Например TDA7294

РадиоКот > Конкурс: Поздравь Кота по-человечески 2017!

Универсальный генератор сигналов

Опубликовано 20.09.2017.
Создано при помощи КотоРед.

Однажды, доставая из коробки кусок макетной платы с запутанными проводами и припаянной к ней NE555, я понял что мне нужен нормальный генератор сигналов. Хотелось получить одновременно и хорошую функциональность и простоту схемы с использованием доступных компонентов. В интернете нашлось несколько интересных схемных решений. Однако при ближайшем рассмотрении у всех выявились свои недостатки. В итоге было решено сделать свой собственный генератор, с максимально — возможным числом функций, дабы хватило если не на все, то на большую часть потребностей.


От аналогичных устройств собранных на основе AVR контролеров отличается широким выбором генерируемых сигналов, более доступными и дешёвыми компонентами и однополярным питанием. Конечно, он не сравниться с заводскими приборами, но может оказаться полезен в домашней лаборатории.

Характеристики.


Форма сигнала:

  • синус
  • треугольник
  • пила
  • обратная пила
  • ЭКГ
  • шум
  • меандр
  • высокая частота
  • ШИМ (прямоугольник с рег. скважностью)
  • импульсы специальной формы
  • ТВ сигнал(полосы)

Частота:

  • Синус, треугольник, пила, обратная пила, ЭКГ: 1Гц — 111.1КГц
  • Меандр: 1Гц — 500.0Кгц
  • Меандр(высокая частота): 1МГц, 2МГц, 4МГц, 8МГц

ШИМ:

  • 1Гц-99КГц
  • коэффициент заполнения 1% — 99%
  • возможность внешней синхронизации

Импульсы специальной формы:

  • Tмин. = Trise+Ton+Tfall+Toff = 8мкс
  • Tмакс. = Trise+Ton+Tfall+Toff = 4000000мкс
  • число импульсов 1 — 65535
  • возможность запуска внешним импульсом

Напряжение питания 12В
Амплитуда сигнала 0 — 5В
Смещение -3 — 3В
Разрядность ЦАП 8бит
Частота дискретизации 1,78МГц

 

У генератора имеется 2 выхода — A, D и вход — E. Сигналы в режимах синус, треугольник, пила, обратная пила, ЭКГ, шум, ТВ, pulse выводятся на выход A.

Выход D - цифровой, на него выводятся сигналы в режимах ШИМ, меандр, высокая частота. на выходе имеется защитный резистор.

Вход E используется для запуска режима PULSE и для синхронизации в режиме ШИМ. На входе имеется защитный резистор и стабилитрон, подтяжки к питанию нет.

Все установленные параметры сохраняются в энергонезависимой памяти контроллера после запуска генератора.

Режимы работы.


После включения прибора на дисплее в верхней строке отображается текущий режим работы и состояние(включен или выключен). В нижней строке указываются дополнительные параметры.
При нажатии кнопки реж.(mode) происходит смена режима работы устройства. При нажатии кнопки уст.(set) включается режим установки параметров для текущего режима.
Кнопка вкл./выкл(on/off) запускает или выключает генератор. Переключатель Ф. включает и выключает аналоговый фильтр на выходе A.

Синус (SINE), треугольник (TRIANGLE), пила (SAWTOOH WAVE), обратная пила (RSAWTOOH WAVE), ЭКГ (ECG).
Сигнал выбранной формы генерируется табличным методом. Для перехода в режим ввода частоты нужно нажать кнопку уст. В этом режиме в верхней строке показывается текущая частота, в нижней — шаг устанавливаемого числа. Значение устанавливается кнопками +/-, шаг можно изменить кнопкой реж. По окончанию ввода нужно ещё раз нажать кнопку уст., после чего генератор перейдет в основной режим.

 

Синус 1КГц, 5В, смещение 1В.

Пила 21КГц.

треугольник 1КГц.

 ЭКГ 1Кгц

Шум (NOISE).
Генерирует шум, используется стандартная библиотечная функция rand(), не имеет настраиваемых параметров.

 

Меандр (SQUAREWAVE).
Генерирует прямоугольные импульсы с коэффициентом заполнения ~50% методом DDS.

Высокая частота (HIGH SPEED).
Генерирует прямоугольные импульсы высокой частоты, с коэффициентом заполнения ~50%. Имеет всего 4 значения частоты: 1МГц, 2МГц, 4МГц, 8МГц.

ШИМ (PWM).
Генерирует прямоугольные импульсы с регулируемым коэффициентом заполнения путем деления тактовой частоты.
В этом режиме есть 3 настраиваемых параметра, переход между ними осуществляется последовательно нажатием кнопки уст.

F - частота устанавливается аналогично предыдущим режимам.

DC - коэффициент заполнения устанавливается в диапазоне 1-99% с шагом в 1% кнопками +-.

ШИМ 21КГц, 80%.

EXT SYNC - внешняя синхронизация может иметь 3 значения, которые выбираются кнопками +- :

  • NO – отсутствует, генератор будет работать все время после нажатия кнопки вкл.
  • HIGH – генератор будет работать при наличии высокого уровня на входе E.
  • LOW - генератор будет работать при наличии низкого уровня на входе E.

ШИМ 21КГц, 80%, внешняя синхр. E=H.

Импульсы специальной формы (PULSE).
Позволяет генерировать импульсы с заданным периодом линейного нарастания/спада уровня сигнала. Имеет 6 настраиваемых параметров.

Trise — период нарастания импульса 2 — 1000000мкс;
Ton — период высокого уровня 2 — 1000000мкс;
Tfall — период спада импульса 2 — 1000000мкс;
Toff — период низкого уровня 2 — 1000000мкс, устанавливаются кнопками +-, шаг выбирается кнопкой реж.

Trise=Ton=Tfall=Toff=100мкс, N=ND

N – число импульсов, устанавливается кнопками +-, шаг выбирается кнопкой реж.

  • Диапазон 1 — 65535, после запуска генератор выдаст установленное количество импульсов на выход A.
  • ND – не определено, генератор будет работать все время после нажатия кнопки вкл.

Trise= 3мкс,Ton=Tfall=Toff=100мкс, N=3

TRIGGER — запуск генератора внешним импульсом на входе E. Значения, выбираются кнопками +- :

  • NO – отсутствует, генератор будет работать все время после нажатия кнопки вкл.
  • RISE – после нажатия кнопки вкл. генератор запустится только по фронту импульса на входе E. Во время ожидания в верхней строке дисплея будет показываться W:R
  • FALL — после нажатия кнопки вкл. генератор запустится только по спаду импульса на входе E. Во время ожидания в верхней строке дисплея будет показываться W:F

 

ТВ (TV).
Генерирует аналоговый видеосигнал — вертикальные полосы. Для правильной работы нужно установить смещение на 0В, амплитуду 5В. Выход A подключается к видеовходу телевизора.

 

Сброс установок.

Может понадобиться, если у вас не прошилась EEPROM или в процессе настройки случился какой-то коллапс и теперь прибор показывает что-то страшное. Для сброса установок в обесточенном генераторе зажимается кнопка уст.(set), затем подается питание и не отпуская кнопку ждем 5сек. После этого настройки в EEPROM перезаписываются на дефолтные.

Схема.


Вся цифровая часть реализована в микроконтроллере Atmega8A, работающим на частоте 16МГц. К микроконтроллеру подключен резистивный R2R ЦАП, выдающий аналоговый сигнал. С выхода ЦАП сигнал поступает на буферный усилитель на U2B. После чего проходит через активный НЧ фильтр 2 порядка, собранный по схеме Баттерворта на U2A, с частотой среза 300КГц. Фильтр рассчитывался в онлайн калькуляторе от AD.

Переключатель SW5 позволяет выбирать, снимать сигнал непосредственно с повторителя или прошедший через НЧ фильтр. Далее в схеме стоит инвертирующий усилитель с регулируемым коэффициентом усиления 0 — 0.5. Такой коэффициент выбран неслучайно. Дело в том что, нижнее напряжение питание ОУ TL082 должно быть на 1,5В ниже выходного. Т.е. при амплитуде в 5В, питание должно быть -6.5В, что потребовало бы изменение в схеме преобразователя напряжения. Затем сигнал поступает на второй инвертирующий усилитель, который сдвигает уровень относительно напряжения смещения, регулируемое резистором RV1. А также восстанавливает амплитуду сигнала, которая была уменьшена ранее в U3B.

Сигналы в режимах ШИМ и меандр(высокая частота) генерируются таймером-счетчиком микроконтроллера, путем деления тактовой частоты. В режиме меандр — программным методом DDS.

Для экономии портов в/в дисплей подключен по схеме только на запись, с заземленным выводом RW. Линии D4 – D7 имеют двойное назначение, помимо передачи данных в дисплей, к ним подключены кнопки управления. Для избежания к.з., при одновременном нажатии кнопки и передачи данных, установлены защитные резисторы. Передача данных и чтение состояний кнопок происходит последовательно.

Также на плате имеются контактные штыри линий Rx, Tx, на которые выведен программный UART 19200 8b1. В текущей версии прошивки этот интерфейс работает только на вывод.

По линии V_GEN контроллер выдает прямоугольные импульсы частотой ~20КГц, которые поступают на преобразователь напряжения. Он генерирует -5,6В, необходимое для питания операционных усилителей.

 

Немного теории.

В генераторе используется метод прямого цифрового синтеза частоты(DDS). За основу был взят алгоритм из прибора AVR DDS signal generator V2.0 и доработан. В частности, заменив чтение табличных значений из флэш на буфер в оперативной памяти, удалось сократить время рабочего цикла на 1 такт. Что привело к увеличению частоты дискретизации с 1.6 до 1.78МГц. На его основе был написан алгоритм генерации прямоугольника и импульсов с произвольным временем линейного нарастания — спада.

Простейший цифро-аналоговый генератор на МК делается довольно легко.
Берется таблица значений аналогового сигнала(например синусоида) за 1 период. И последовательно выводится в порт МК к которому подключен ЦАП. Частота выходного сигнала будет равняться:

FOUT = FCLK / C;
FCLK – частота с которой происходит вывод в порт(частота дискретизации),
C – число значений в таблице.

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

При прямом цифровом синтезе частота дискретизации остается постоянной. В алгоритм вводиться специальная переменная, которая хранит текущее значение фазы сигнала, называемая аккумулятором фазы. В конкретном примере его размер составляет 24 бита.
Основной код алгоритма написан на ассемблере:

;в регистр Z загружается адрес буфера в ОЗУ, содержащий таблицу из 256 значений одного периода генерируемого сигнала
;для правильной работы алгоритма адрес буфера должен быть выровнен на 0x100h, т. е. начинаться с 0xXX00h
;в данном случае буфер находиться по адресу 0x0100
ldi zh, 0x01
ldi zl, 0

;регистры r18, r19, zl составляют 24битный фазовый аккумулятор
;старшие 8 разрядов также являются индексом в таблице сигнала
eor r18, r18 ;обнуление аккумулятора
eor r19, r19 ;обнуление аккумулятора

;в регистрах r22, r23, r24 находиться 24битное значение приращения фазы - M

1:
add r18, r22 ;сложение аккумулятора с М
adc r19, r23 ;сложение аккумулятора с М
adc zl, r24 ;сложение аккумулятора с М
ld r0, z ;загрузка значения из таблицы по адресу Z
out _SFR_IO_ADDR(R2RPORT), r0 ;вывод значения в ЦАП
sbic _SFR_IO_ADDR(BTN_PIN), START ;условие для прерывания цикла,если кнопка нажата выходим
rjmp 1b ;прыжок на начало цикла

В цикле, который крутится с заранее известной частотой FCLK, к аккумулятору фазы прибавляется некоторое постоянное число которое называется приращением фазы – M. При этом значение аккумулятора увеличивается с постоянной скоростью, а его старшие 8бит используются как индекс в таблице аналоговых значений сигнала. Период переполнения аккумулятора будет равен одному периоду генерируемого сигнала. При этом сам период может быть не кратным значением тактовой частоты, см. график.

FOUT = M * FCLK/N
где FOUT – выходная частота,
FCLK – частота дискретизации,
M – приращения фазы,
N – максимальное значение аккумулятора фазы.

частота дискретизации равна
FCLK = F_CPU/NUM_CYCLES
,где F_CPU тактовая частота процессора - 16Мгц
,NUM_CYCLES — число машинных тактов за один проход цикла - 9
FCLK = 16000000/9 = 1777777Гц

Минимальная частота сигнала будет при M = 1
FMIN = 1 * 1777777 / 2^24 = 0,105Гц, и она же является шагом изменения частоты.

Значение приращения фазы для требуемой частоты можно рассчитать так:

M = FOUT * N / FCLK

С увеличением частоты уменьшается количество выборок и форма сигнала упрощается, появляются ступеньки. Поэтому максимальная частота ограничена 111.1КГц, при которой ещё более-менее сохраняется форма сигнала. Также для уменьшения ступенек в схему добавлен аналоговый фильтр на 300КГц.

Алгоритм генерации меандра методом DDS принципиально особо не отличается. Отличие только в том, что сигнал генерируется ногодрыгом, а не через ЦАП. Уровень на выводе порта МК просто инвертируется после переполнения аккумулятора фазы.

ldi zh, 1<<HSPIN;Загружаем в zh маску вывода

;обнуление аккумулятора
ldi zl, 0
eor r18, r18

eor r19, r19

in r0, _SFR_IO_ADDR(HSPORT); запоминаем состояние порта
1:
add r18, r22 ;сложение аккумулятора с М
adc r19, r23
;сложение аккумулятора с М
adc zl, r24
;сложение аккумулятора с М

BRCC 2f 
eor r0, zh;если случилось переполнение аккумулятора, инвертируем бит порта
2:
out _SFR_IO_ADDR(HSPORT), r0 ;вывод
sbic _SFR_IO_ADDR(BTN_PIN), START ;условие для прерывания цикла,если кнопка нажата выходим
rjmp 1b ;прыжок на начало цикла


И формулы немного изменятся:
FOUT = M * FCLK/(2*N);

M = FOUT * 2 *  N / FCLK

Такой способ генерации прямоуголного сигнала имеет большую точность установки частоты, нежели простое деление таймером-счётчиком(которое используется в режиме ШИМ). Однако в сигнале постоянно присутствует дрожание фронтов(джиттер) из-за несогласованности фазы с частотой дескретизации.

Ну надеюсь кто-нибудь что-нибудь поймет из моего сумбурного объяснения.

Прошивка.

Помимо файла программы, необходимо также прошить EEPROM.
Фьюз биты: LOW = 0xFF, HIGH = 0xD9.
Будьте осторожны, при последующей прошивке контроллер без кварца может не определяться прошивальщиком!

Сборка, настройка.


Для R2R ЦАП желательно брать резисторы из одной партии, или выбирать при помощи мультиметра, так чтобы их сопротивлению отличалось не более чем на 0.5%. К статье приложена обновленная печатная плата, она отличается от той что на фото в корпусе.

На новой ПП предусмотрены площадки под SMD резисторы, чтобы народ не мучался высверливая дополнительно 48 дырок.
После включения первым делом нужно проверить наличие всех питающих напряжений, особенно -5.6В, на выводах ОУ. Далее подстроечным резистором RV3 нужно добиться, чтобы на крайних выводах резистора RV1 напряжение было примерно равно -1В и 1В. На этом, собственно, настройка окончена.

Корпус.


Корпус прибора склеен из 4мм фанеры. Лучше для этого использовать шлифованную фанеру, так как она более ровная и имеет меньше дефектов. Все детали корпуса выпилены вручную лобзиком.

При наличии ЧПУ станка всё делается гораздо проще, но если кто надумает сделать вручную, хочу дать несколько советов.

Сначала в САПР или вручную, на листе в клетку, рисуются детали будущего корпуса в натуральную величину. Следует продумать размещение дисплея и ручек управления, и остальных деталей. Шипы соединения по краям деталей не стоит делать слишком узкими, иначе при склейке подгонять замучаетесь. Оптимальная ширина шипов/пазов для 4мм фанеры 15 — 25мм. После чертеж переносится на фанеру, особое внимание следует уделять геометрии, чтобы не было перекосов и все углы были прямыми. Затем высверливаются или выпиливаются внутренние отверстия, и только потом выпиливается сама деталь.

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

После того, как все элементы корпуса выпилены, наступает самый нудный и ответственный момент, от которого зависит итоговый вид корпуса. Нужно подогнать шипы/пазы на соединяемых деталях. Делать это лучше узким плоским напильником. Положив деталь на основание с плоской кромкой(кусок ДСП например), так чтобы пазы оказались на одном уровне. В итоге детали должны хорошо прилегать друг к другу с минимальными зазорами.

Для склейки лучше всего подходит клей ЭДП(эпоксидка), т. к. он заполняет щели и не дает усадку после затвердевания. Но я клеил обычным канцелярским ПВА-М, результат оказался неплохим. Только не используйте обычный строительный ПВА, он гораздо жиже и прочность склейки оставляет желать лучшего.

Когда клей высохнет, плоским напильником нужно сточить выступающие части шипов на гранях получившейся коробки. Если к этому моменту на поверхностях всё-же появились сколы древесины, то ничего страшного, их можно просто зашпаклевать смесью клея и опилок. После обработки напильником и шлифовки наждачкой эти места будут почти незаметны.


Надписи на корпусе сделаны путем переноса распечатанных на лазерном принтере изображений на водный акриловый лак.

Изначально я пробовал переводить изображения с бумаги при помощи утюга, как в технологии ЛУТ. Однако из-за плохой теплопроводности дерева тонер практически не прилипал к поверхности корпуса. В итоге после нескольких экспериментов был подобран способ обеспечивающий более-менее приемлемый и главное повторяемый результат.

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

На листе бумаги с непромокаемым покрытием( я использовал подложку от самоклейки) были распечатаны отзеркаленные версии переносимых изображения. Бумага для печати должна быть с идеально гладкой поверхностью. Любые дефекты, такие как перегибы или царапины плохо скажутся на результате. Тонер с поверхности бумаги либо не приклеится к фанере, либо приклеится сама бумага.

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

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

После нанесения всех изображений корпус покрывается последним слоем лака.

По поводу износостойкости таких переведённых изображений пока сказать ничего не могу. Ногтем ничего не стирается. Вероятно всё зависит от используемого лака.

Подходящих кнопочных толкателей для корпуса найти не удалось. Поэтому были сделаны самодельные из корпусов старых советских электролитических конденсаторов и отрезков коаксиального кабеля. Современные китайские конденсаторы для препарирования непригодны, так как сделаны из очень тонкого алюминия и легко мнутся. Кабель должен быть прямым и достаточно жестким, я использовал антенный, диаметром 5мм.

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

Плата крепиться к задней крышке корпуса. Сама крышка притягивается к передней части при помощи винтов М3 и шестигранных стоек. Стойки крепятся снизу винтами с потайной головкой. Вместо ножек я использовал пластиковые набойки, которые применяются для обтяжки мебели.

В заключении.


Надеюсь кому-нибудь моя статья пригодиться.

А кота хочу поздравить и пожелать побольше свежего контента с колбасой!


Ссылки на используемые источники:

  1. AVR DDS signal generator V2.0
    http://www.scienceprog.com/avr-dds-signal-generator-v20/

  2. Всё о синтезаторах DDS
    http://www.kit-e.ru/articles/powersource/2005_1_28.php

  3. Прямой цифровой синтез
    http://www.rlocman.ru/review/article.html?di=143994

  4. Функциональный DDS генератор сигналов "OSKAR-DDS"
    http://www.radiokot.ru/circuit/digital/measure/126/

  5. TV Video PAL Signal Generator with Arduino
    http://www.javiervalcarce.eu/html/arduino-tv-signal-generator-en.html

  6. Analog Filter Wizard
    http://www.analog.com/designtools/ru/filterwizard/

  7. Mixing C and Assembly in AVR GCC and AVR Studio 4
    https://ucexperiment.wordpress.com/2012/02/09/mixing-c-and-assembly-in-avr-gcc-and-avr-studio-4/

  8. О принципе действия DDS синтезатора
    http://npl-polus.ru/articles/electronic/dds

  9. Прямые цифровые синтезаторы частоты (DDS)
    http://life-prog.ru/1_42141_pryamie-tsifrovie-sintezatori-chastoti-DDS.html

  10. Параллельный Цифро Аналоговый Преобразователь по схеме R-2R
    http://easyelectronics.ru/parallelnyj-cifro-analogovyj-preobrazovatel-po-sxeme-r-2r.html

  11. Для микроконтроллеров и не только: Алгоритм DDS - синтез точной произвольной частоты на микроконтроллере (генерация сигнала произвольной формы нужной частотой с точностью до долей герца) http://electronics-and-mechanics.azm.su/page56.html

 


Файлы:
Прошивка
Схема, плата в формате sprint layout 5
Исходники прошивки, AVRGCC


Все вопросы в Форум.


ID: 2582

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

120 1 4
1 1
Подробно