N 16 каналов F Частота 400 Гц n Количество градаций 1000 f Частота микроконтроллера 72 MHz p Ресурсы времени на обслуживание ШИМ 50%
T Период прерывания обслуживания ШИМ = (1/(F*n)) = 1/(400*1000) = 2,5 мкс Время прерывания 2,5 *50/100 = 1,25 мкс. Допустимое количество команд 72*1,25= 90
Делаем тупо 16 раз:
if (count==pwm[NUM]) PORT->BSRR=PIN
На каждый канал тратится шесть команд, итого 96 команд плюс инкремент-пролог-эпилог. Много. Плюс джиттер - отдельный вопрос.
Переделываем на предварительное формирование слова для записи в порт, и потом три записи этих байтов 4 команды на канал итого 64 плюс чистка и запись в три порта 11 команд всего 75. Чуть лучше.
Какие еще варианты могут быть? (кроме снижения требований, конечно )
Сдвиговый регистр на SPI с записью по DMA? Что-то еще?
--------------------
Уходя, оставьте свет...
|