.
В некоторых микроконтроллерах есть встроенные модули DAC(цифро-аналоговый преобразователь) в частности PIC12F1822 о котором далее пойдет речь и хотя в данном МК разрядность модуля не велика, но все равно можно получить относительно неплохой синусоидальный сигнал. Вообще сам метод применим и к другим ЦАП в том числе и сделанным на примитивных R-2R.
Не раз сталкивался с необходимостью получить синусоидальный сигнал, но все рассмотренные методы получения оказались трудоемки и по различным причинам не подходили. В то же время под рукой оказалось несколько штук микроконтроллеров PIC12F1822 со встроенным модулем DAC. Разрядность позволяет сделать 32 значения на выходе модуля, хотелось бы по больше, но и этого оказалось достаточно для реализации некоторых проектов. Сам МК имеет всего 8 выводов и помимо генерации сигнала на выводе "a0" может выполнять и другие задачи. Вот так выглядит сигнал с вывода микроконтроллера PIC12F1822.
Здесь я не буду рассматривать саму методику и формулу для получения значений цифро-аналоговый преобразователя, а сразу обратимся к странице расчета.
Для получения значений необходимо в предлагаемой форме указать количество шагов DACа и название будущей таблицы значений, можно перед названием указать сразу и тип. В данном случае при разрядности модуля 5 мы имеем 32 шага (при разрядности 8 будет соответственно 256 шагов). Указываем шаги и нажимаем кнопку «выполнить», в итоге получим таблицу (массив) значений для получения синусоидального сигнала в десятичном формате.
PIC12F1822 работает на внутреннем генераторе с тактовой частоте 32 МГц, сам алгоритм формирования сигнала программы очень прост, в прерывании от таймера TMR2 происходит копирования в регистр DACCON1 одного из значений таблицы Tablsinus, начиная с 0 до 31. Для получения частоты 50 Гц в регистр T2CON прописываем значение 0x25.
А вот и вся программа...
if (TMR2IE && TMR2IF) {
TMR2IF = 0;
TMR2 = 31;
chetRaz++ ; //0-31
if (chetRaz > 31) chetRaz = 0;
DACCON1 = TablSinus[chetRaz];
}
Как видим ресурсов программа практически не занимает. И ее легко можно адаптировать в свой проект. Можно получить и другие сигналы, к примеру мне нужно было для инвертора сформировать положительные полупериоды и выдать с др. вывода сигнал синхронизации (на фото не показан).
Причем при формировании полупериода частота дискретизации возрастает в 2 раза, т.к. все 32 отчета задействованы на полупериода не на период, как при синусоидальном сигнале.
Для других микроконтроллеров, как и с внешним АЦП методика расчета и алгоритм тот же, только необходимо учитывать, что с увеличением частоты выходного сигнала и разрядности АЦП понадобится микроконтроллер с большой тактовой частой генератора, что бы хватили и под другие задачи.
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|