Авторизация


...

Кто на сайте?

Сейчас 86 гостей и один зарегистрированный пользователь на сайте

  • orroughalis

Статистика

-Посетители : 25313
-Материалы : 210

Пользователь сайта продает...

  106ЛБ1

Пользователь сайта покупает...

Получение синусоидального сигнала с ЦАП микроконтроллера.

Автор: Николай Викторов Просмотров: 4288

 

Не раз сталкивался с необходимостью получить синусоидальный сигнал, но все рассмотренные методы получения оказались трудоемки и по различным причинам не подходили. В то же время под рукой оказалось несколько штук микроконтроллеров PIC12F1822 со встроенным модулем DAC. Разрядность позволяет сделать 32 значения на выходе модуля, хотелось бы по больше, но и этого оказалось достаточно для реализации некоторых проектов. Сам МК имеет всего 8 выводов и помимо генерации сигнала на выводе "a0"  может выполнять и  другие задачи.  Вот так выглядит сигнал  с вывода микроконтроллера PIC12F1822.

 

sinus 01

 

Здесь я не буду рассматривать саму методику и формулу для получения значений   цифро-аналоговый преобразователя, а сразу  обратимся  к странице расчета.

Для получения значений необходимо в предлагаемой форме указать количество шагов DACа и название будущей таблицы значений, можно перед названием указать сразу и тип. В данном случае при разрядности модуля 5 мы имеем 32 шага (при разрядности 8 будет соответственно 256 шагов). Указываем шаги и нажимаем кнопку «выполнить», в итоге получим таблицу (массив) значений для получения синусоидального сигнала в десятичном формате.

 

sinus 02

 

   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];
       } 

  Как видим ресурсов программа  практически  не занимает. И ее легко можно адаптировать в свой проект. Можно получить  и другие сигналы, к примеру мне нужно было для инвертора сформировать положительные полупериоды и выдать с др. вывода сигнал синхронизации (на фото не показан).

 

sinus 02

 

 Причем при формировании   полупериода частота дискретизации возрастает в 2 раза, т.к. все 32 отчета задействованы на полупериода не на период, как при синусоидальном сигнале.

Для других микроконтроллеров, как и с внешним АЦП методика расчета и алгоритм тот же, только необходимо  учитывать, что с увеличением частоты выходного сигнала и разрядности АЦП понадобится микроконтроллер с большой тактовой частой генератора, что бы хватили и под другие задачи.

 

 

Случайные статьи....

Prev Next

Помехоустойчивое кодирование на примере кода Хэмминга

13-05-2011 Иван Шевченко (R1ZK)

Помехоустойчивое кодирование на примере кода Хэмминга

Исправлять ошибки труднее, чем их детектировать, или предотвращать. (Не моё - одна бабка сказала...) Код Хэмминга, о котором здесь идёт речь, представляет собой блочный код, который позволяет выявить и исправить один ошибочно переданный бит в пределах переданного блока.      

Таймер для коммутации 3-х фазного двигателя.

29-10-2016 Александр Милевский

Таймер для коммутации  3-х фазного двигателя.

        Данный таймер разрабатывался по просьбе знакомого для экспериментальной установки периодического включения 3-фазного электродвигателя. Таймер можно применить и для других задач, т.к. выходом устройства является маломощное реле, которое в свою очередь управляет 3-фазным пускателем. Автор предоставил полную документацию для повторения...

Радиомаяк для ребенка-электронный поводок

18-02-2017 Super User

Радиомаяк для ребенка-электронный поводок

  В этой статье автор под псевдонимом "Mizar" делится своим устройством для контроля ребенка (маячок). Идея создания устройства у автора появилась после приобретения печального опыта поиска ребенка в зале аттракционов в торговом центре. Предоставлена все необходимая документация для повторения, включая...

Программирование c нуля в AVRStudio 5 (ч.1)

04-02-2012 Радик

Программирование c нуля в AVRStudio 5 (ч.1)

Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще программирование, упирается сразу в несколько вопросов:1.Какой микроконтроллер выбрать для максимально быстрого освоения?2.Какой основной инструмент (программу) использовать для начала работы?3.Какие аппаратные средства доступны для начала программирования?4.Какую литературу использовать?  


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru