Сообщение от Gnider
|
Ну на 5квт брать атмега48 это уже старомодно. Есть LPC17 и STM32 c 3-фазными ШИМ-ми с дэдтаймами и код Си отлично под них оптимизируется.
|
В чём же старомодность? Это ж не Z80. Может LPC17 и STM32 тоже через "пару дней" старут старомодными и сразу стоит ставить 64-х разрядную двухядерную архитектуру, по ядру на каждый ШИМ-канал? Я Вас прекрасно понимаю что Вы гордитесь знаниями 32-х разрядников, к моему сожалению я их знаю только теоритически, к практике подойти никак не могу либо из-за нежелания вкладывать в это дело деньги, или просто из-за нежелания решать это вопрос. Keil давно на жестком диске лежит пока без дела. А вот среди 8-разрядников AVR есть спецчипы с 3-мя ШИМ каналами с аппаратными дэдтаймами, PLL-ами на 64 МГц, AT90PWM3B, ATtiny461, но вот задачи пока такой нет. Среди PIC-ов есть PLL-ы по 430 МГц, если нужно будет - буду осваивать. Цена меги48 - 9 гривень, 90 копеек, согласитесь бросовая цена. Насчёт оптимизации Вы малость меня не поняли, представим, что на внешнее прерывание пришел некий "fall", пишем:
#define driver_disable PORTD.3=0;
interrupt [EXT_INT0] void ext_int0_isr (void) //токовая защита
{
driver_disable;
TCCR1A=0x01;
TCCR1B=0x01;
PORTB.1=0;
PORTB.2=0;
};
Прокомпилированный код будет выглядеть примерно таким образом:
EXT_INT0:
push r30
in r30,SREG
push r30
cbi driver_disable ;а вот она столь необходимая строчка для экстренного отключения драйверов
;... некий код для отключения ШИМ-каналов
pop r30
out SREG,r30
pop r30
reti
И каким бы не был великим программист, он не заставит Си-шный компилятор сперва "погасить" драйверы а потом уже заниматься менее необходимыми отключениями ШИМ-каналов:
EXT_INT0:
cbi driver_disable ;строчка для экстренного отключения драйверов
push r30
in r30,SREG
push r30
;... некий код для отключения ШИМ-каналов
pop r30
out SREG,r30
pop r30
reti
Ну разве что асм вставками, или повышением частоты контроллера так что-бы не выйти за критический лимит 5 мкс реакции внешнего прерывания. В итоге что-бы "вылизать" код придётся применить ещё не одну такую вставку.
Может Вы и правы, что это примерно получится "экономия на спичках" (в случае с ATmega4
![Горд собой](images/smilies/icon_dovl.gif)
.
Ну а если говорит о совсем "крутом" ШИМ-овании, и возможной обратной связи для коррекции формы синуса на лету в случае "тяжелой нагрузки" то здесь не ARM нужон c каким-нибудь встроенным ява-движком
![Улыбка](images/smilies/icon_smile.gif)
который будет бездействовать, а DSP-шник или ещё быстрее ПЛИС-ина.
Пардон за каламбур