Я хотел построить генератор , который был бы похож на старый 'аналоговый'. Появились два главных претендента из старыъ запасов - Intersil ICL8038 и Exar XR-2206 . На практике, я думаю, где-то около 400 кГц или 500 кГц максимальной частоты является более реалистичным для этих микросхем при сохранении достаточно низкого искажения синусоидальной формы сигнала. В проекте я был больше заинтересован в производстве чистой неискаженной синусоиды.
ATmega328 работает как счетчик частоты и управляет 8-значным 0.36 "LED модулем SPI (хотя используются только 6 цифр).
Функциональный генератор схема
Цепь построенная вокруг XR-2206 базируется на TAN-005 XR-2206 Application Note , который дает высокое качество от 1Hz до 100kHz. После игры с некоторыми из значений компонентов и добавив пару операционников, качество волны будет расти до 550kHz, хотя треугольная волна начинает получать закругленные пики около 300 кГц.
Регулирование частоты
Диапазон частот регулируется с времязадающим конденсатором (подключенного между контактами 5 и 6 XR-2206) и временных резисторов VR1, VR2 и R2 (соединенных последовательно между выводами 7 и -12В). Значения показаны выше, перекрывающиеся частотные диапазоны приведены в следующей таблице: Перекрытие диапазонов не является идеальным, но это не оказалось проблемой на практике. TAN-005 Замечания рекомендует лог-конус для подстройки частоты (VR1), хотя я использовал линейную и добавил "тонкую" подстройку частоты (VR2).
Конденсатор |
Минимальная частота |
Максимальная частота |
1uF |
2.25Hz |
225Hz |
0.1uF |
20Гц |
2kHz |
0.01uF |
225Hz |
22кГц |
0.001uF |
2.0кГц |
186kHz |
470pF |
4kHz |
375kHz |
Для Exar XR-2206 рекомендуется 1000 пФ (0.001uF) в качестве минимального значения для синхронизации конденсатора , подключенного к контакту 5. Я обнаружил , что квадратные волны, в частности, имеют тенденцию становиться нестабильными приблизительно между 23 кГц и 50 кГц с синхронизацией конденсатора меньше чем 400pF. С использованием выходного сигнала прямоугольной формы для частоты / счетчика дисплея, я ограничил наименьший конденсатор 470pF, что привело к верхней частоте около 375kHz. Если конденсатор 100pF, самая высокая частота составляет около 500 кГц до сих пор с приемлемыми формами волны.
Амплитуда выходного сигнала
Выбор между синусоидальных и треугольных формами сигнала осуществляется с помощью переключателя SW2B, подключенного через XR-2206 к выводам 13 и 14. Когда переключатель замкнут, на выходе получается синусоида. Выключатель разомкнут, это треугольная волна. К сожалению, выходные напряжения синуса и треугольника не совпадают. Максимальная синусоида составляет около 6 вольт пик-пик и треугольной волны примерно в два раза. В моей схеме, я добавил два триммера - R15 и R16 - для регулировки формы волны. Когда SW2B закрыт, на выходе получается синусоида и SW2A соединяет R15. Когда SW2B открыт, выход треугольника и R16 становится "активным". R15 и R16 оба должны быть повернуты от максимума иначе TL027CP будет перегружен. После того, как R15 и R16 установлены правильно, то выход из TL027CP полностью регулируется от нуля до 10 вольт от пика к пику (то есть ± 5 относительно земли 0В). Хотя может быть достигнут пик около 20 вольт пик.
Это изображение показывает амплитуду синусоиды.
R 14, который соединен с XR-2206 через R1, используется для установки смещения постоянного тока из импульсных сигналов. По мере того как схема использует раздвоение питания (± 12В), R14 может настроить центр волновой формы, чтобы быть немного положительным или отрицательным относительно земли. На практике количество корректировки довольно ограничено, поэтому я использовал R14 в качестве с предварительно заданным значением. Выходной сигнал синусоидальной / треугольной формы на выводе 2 XR-2206 подключен к TL072CP операционного усилителя, который имеет свои собственные регулировки смещения с помощью VR4. Поэтому предварительно установленный триммер R14 используется только для "централизации" , т.е. форма волны сосредоточена в диапазоне около 0В. Первая половина TL072CP (IC3a операционного усилителя) используется в качестве буфера с единичным усилением. IC3b обеспечивает около 5.7x коэффициента усиления [(R12 / R13) +1] и широкое смещение постоянного тока из импульсных сигналов при регулировке. Первоначально я использовал LM6172, но для простоты и и совместимости взял TL072CP. XR-2206 обеспечивает отдельный выход для синхронизации / квадратной волны свыше 20 вольт. Это полезно для синхронизации осциллографа при тестировании схемы синусоиды, но я хотел бы использовать счетчик частоты. В любом случае управляемое выходное напряжение, казалось более разумным. R6, R7 и R8 обеспечивают 8В пиковый уровень сигнала при -0,1 вольт относительно земли. Этот сигнал подается на обе половины компаратора - LM293. Выходы на контакты 1 и 7 колебании между землей и 5 вольт. Выходной сигнал на выводе 7 принимается на передней панели BNC, а также выход на контакт 1 берется на коллектор - вместе с + 5v и землей - для подключения к ATmega328. 1N4148 помогает защитить вход ATmega328. На 590kHz, меандр имеет время нарастания около 140ns и время падения около 70ns. Тем не менее, как уже отмечалось выше, я ограничил верхний предел частоты приблизительно до 310kHz из-за нестабильности волны между 23 кГц и 50 кГц при использовании меньшего конденсатора синхронизации.
Счетчик частоты
Схема подключения 8-разрядного 7-сегментный светодиодного дисплея очень проста и понятна. ATmega328 использует библиотеку Arduino ( FreqCounter ) для подсчета нарастающих фронтов + 5v прямоугольных импульсов от генератора сигнала в цифровой пин D5. 7-сегментный модуль дисплея LED использует другую библиотеку Arduino - LedControl . Я попробовал несколько различных частот счетчика библиотеки Arduino, и все они используют более или менее тот же принцип создания внутреннего 16-разрядный счетчика ATmega328 и измерение импульсов на выводе 'T1' - который отображает на Arduino пин D5. К счастью, это все есть в библиотеке FreqCounter.
Arduino код
#include "LedControl.h"
// https://github.com/wayoda/LedControl/releases
#include <FreqCounter.h>
// http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
// Counter input must be D5.
//LedControl lc=LedControl(DIN,CLK,CS,1);
LedControl lc=LedControl(6, 8, 7, 1);
unsigned long frq;
void setup() {
lc.shutdown(0,false);
lc.setIntensity(0,4);
lc.clearDisplay(0);
delay(2000);
}
void loop() {
FreqCounter::f_comp=10; &nbs
p; // Cal Value - Calibrate with professional Freq Counter
FreqCounter::start
(1000); // 1000
ms Gate Time for 1Hz resolution.
while (FreqCounter::f_ready == 0);
// Wait for counter to be ready
frq=FreqCounter::f_freq;
lc.clearDisplay
(0); // Clear LED display.
printNumber
(0, frq);
;// Break number into individual digits for LED display.
}
void printNumber(int addr, long num) {
byte c;
int j;
int d;
num < 1000 ? d = 4 : d = countDigits
(num);
for (j=0; j<d; j++) {
c = num
% 10; &nb
sp; // Modulo division = remainder
num /= 10; &
nbsp; // Divide
by 10 = next digit
boolean dp =
(j==3); // Add decimal point at 3rd digit.
lc.setDigit(addr, j, c, dp);
}
}
int countDigits(long num) {
int c = 0;
while (num) {
c++;
num /= 10;
}
return c;
}
Источник питания
Схема питания довольно условна. Она обеспечивает плюс и минус 12 вольт и для XR-2206 генератора Funtion IC и TL072CP операционного усилителя. Она также обеспечивает плюс 5 вольт для LM239 компаратора, 7-сегментного светодиодного дисплея и ATmega328. Несмотря на то, XR-2206 и TL072CP может быть использован с одним блоком, в результате синусоидальные и треугольные формы сигнала всегда будут иметь положительное напряжение по отношению к нулю.
Этот проект использует потенциально летальные напряжение сети. Не экономьте на механизмы безопасности , такие как заземление (заземление), предохранители, вентиляции и предотвращение доступа к токоведущим частям через вентиляционные отверстия.
От сети переменный ток подается на первичную обмотку трансформатора через предохранитель 1A. Жила заземления (земля) провод подключена к корпусу. Обратите внимание, что любые части корпуса, которые прикреплены отдельно должны иметь свой собственный провод заземления обратно к крепежному болту трансформатора. Компоненты низкого напряжения блока питания смонтированы на главной печатной плате функционального генератора. Регуляторы + 12v и + 5v имеют небольшие теплоотводы. Из-за недостатка места, я изготовил радиатор для + 12V регулятора из небольшой полоски алюминия.
Монтажная плата
Светодиодный дисплей PCB ATmega328 Driver
Общие виды
Изготовленый радиатор для LM7812 можно увидеть в верхнем левом углу печатной платы в изображении ниже.
.
Окончательная сборка и калибровка
Я напечатал зеркальное изображение макета панели с помощью лазерного принтера и прогладил его на тщательно очищенную и обезжириную алюминиевую пластину. Затем покрыл несколькими слоями прозрачного лака.
Макет панели разработал с помощью бесплатной программы под названием Front Panel Designer , которая позволяет легко изготавливать этикетки.
Калибровка
Повторите все шаги на различных частотах, чтобы найти лучшие общие настройки