Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
258 Часть 111. Практическое программирование микроконтроллеров А VR пользовать оба и притом с различными значениями 1 6-разрядных регистров срав нения OCRlA и OCRlB. ПОДРОБНОСТИ В реализации режимов PWM есть такой нюанс - при задании новых значений порога сравнения через пару ocюxн : oCRlxL происходит двойная буферизация : сначала при записи пары регистров по очереди (старший байт, как мы говорили , записывается первым и при этом помещается в буфер) . Затем записанное значение уже полностью помещается в буфер и обновляется только в момент достижения счетчиком заданного максимального значения (модуля счета , ТОР) . Благодаря этому, у нас есть достаточно времени на запись новых значений регистров сравнения . Но если вы поразмыслите над временнь1ми диаграммами на рис. 9 . 8 , то поймете, что в режиме Phase Correct PWM такой алгоритм приведет к появлению несимметричных импульсов при смене порога, и вся эта самая Phase Correct окажется не такой уж и Согrесt . . Для исправле ния этой ситуации служит третий режим Phase апd Frequeпcy Correct PWM, диаграм мы для которого ничем не отличаются от диаграмм для Phase Correct, но момент сме ны регистра сравнения приходится на минимальное значение · в счетчике (т . е. равное $ 0000) , а не на максимальное , как в остальных двух режимах. Однако наша задача - получить на двух выводах OC l A и OC l B одинаковые по следовательности ШИМ. А если значения порога сравнения одинаковые, то и фаза во всех случаях одинаковая, хотя и это нас на самом деле беспокоить не будет, т. к. мы будем получать наши пачки импульсов для каждого полупериода синуса в разное время и на разных выводах. Потому мы воспользуемся режимом Fast PWM, который позволяет получить более высокую частоту ШИМ при той же так товой частоте на входе таймера. Формула для расчета частоты ШИМ в режиме Fast PWM такая : Focn = Fcu J (NTOP), где Fclk - тактовая частота контроллера, N - коэффициент предделителя таймера, а ТОР - модуль счета (установленное максимальное число) . Для общего образова ния отметим, что для двух других режимов частота будет вдвое ниже . Сначала разберемся со значением ТОР. От установленного модуля счета зависит разрешение сигнала ШИМ (то же самое, что разрешение АЦП), т. е. число градаций выходного сигнала. Для 1 6-разрядного таймера его можно выбирать из трех значе ний: $ FF (8-битовое разрешение), $ 1 FF (9-битовое) и $ З FF ( 1 0-битовое), а также можно делать переменным вплоть до 1 6 разрядов (чем мы заниматься не будем). Мы выберем банальное 8-битовое разрешение просто потому, что нам еще надо будет где-то размещать таблицу значений синуса, а величины размером не больше байта легче извлекать из памяти. 256 градаций вполне хватит, чтобы получить при личный синус . Сразу учтем: для того чтобы нормально работал ферритовый трансформатор ин вертора (см. далее), частоту нам желательно иметь порядка 20--40 кГц. Из приве денной ранее формулы получаем, что при тактовой частоте 8 МГц и коэффициенте предделителя, равном 1 , частота ШИМ на выходе будет равна 3 1 250 Гц, что нас устроит. Теперь вычислим, сколько периодов такой частоты надо отсчитать, чтобы
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==