Ревич, Ю.В. Программирование микроконтроллеров 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 Гц, что нас устроит. Теперь вычислим, сколько периодов такой частоты надо отсчитать, чтобы

RkJQdWJsaXNoZXIy MTExODQxMg==