-
- Поступила задача разработать генератор синусоидального сигнала 60 Гц с точностью до 1%. Устройство должно быть максимально дешевым в массовом производстве, и все компоненты должны быть доступны для заказа (т. е. не вышедшими из производства).
Я предложил клиенту использовать микроконтроллер stm8s003, т. к. цена на них на сегодняшний день одна из самых низких на рынке 8-битных МК. Нашли по 0.2$ в катушечном исполнении.
Тактовый генератор на кварцевом резонаторе 16 мГц, выход-ШИМ сигнал с частотой 62.5 КГц, сглаженный простым RC-фильтром. Есть дополнительный выход для отладки (светодиод) — меандр 2 Гц, сигнализирующий о правильной работе генератора.
Изначально предолагалось, что мне отправят заранее сгенерированную таблицу сигнала, но я предложил сгенерировать ее программно. 8 бит ШИМ с учетом RC-фильтра достаточно для гладкой синусоиды.
Код генератора для генерации таблицы, 255 байт:
#define RAD_360 6.283185307165f
//Sin waveform generation
for (uint16_t i=0;i<255;i++)
{
float x_rad = RAD_360/((float)ARR_VAL)*((float)i);
float sin_res = (((float)ARR_VAL)/2.0f)*(x_rad+1.0f);
wave_table[i] = round(sin_res);
}
Генератор работает на прерывании от TIM4 по переполнению. Тактовая частота таймера — 4 мГц. TIM2 используется в качестве ШИМ.
Скриншот с ISDS205x. Желтая линия — сигнал с устройства, голубая — c DDS-генератора осциллографа: