Генератор сигналов на базе Arduino Uno R3
- 640.00грн
-
Данный комплект является простым в сборке генератором синусоидальных и прямоугольных сигналов в диапазононе частот от 0 до 40МГц. Управляется генератор очень просто - с помощью четырех кнопок - две (вверх/вниз) для грубой настройки, и две (влево/вправо) - для точной. Шаг настройки изменяется в зависимости от текущей частоты.
Собрав генератор можно получить полезное устройство, а также освоить программирование Arduino, в том числе работу с библиотекой LiquidCrystal и подключение нескольких кнопок на один вход платы Arduino.
Комплект состоит из платы Arduino Uno R3, шилда DFRobot LCD Keypad Shield, модуля генератора сигналов AD9850 DDS и необходимых проводов.
Программная часть генератора написана на языке Wiring, а аппаратная - из легко соединяемых отдельных модулей, благодаря чему генератор сигналов на базе Arduino сможет сделать своими руками даже человек без глубоких познаний в электронике и программировании.
Комплектация:
- Arduino Uno R3 в антистатической упаковке
- шилд DFRobot LCD Keypad Shield
- модуль генератора сигналов AD9850 DDS
- 8 проводников для соединения модулей
- USB кабель
Инструкция по сборке:
1) Скачайте и установите Arduino IDE (рекомендуем версию 1.0.4). На указанном сайте также можно найти информацию по первичной настройке и работе с IDE, а также ответы на основные вопросы по работе с ней.
2)Подключите к компьтеру плату Arduino Uno и загрузите в нее следующий скетч:
#include <LiquidCrystal.h> // Подключение библиотек LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Инициализация LCD с указанием пинов float freq = 10000; // Оглашение переменных -- Частота float bigStep = 1000; // Шаг изменения частоты при нажатии вверх/вниз float littleStep = 10; // Шаг изменения частоты при нажатии вправо/влево int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 // Создание директив для кнопок #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 #define W_CLK 15 // Пин A1 Arduino - подключен к CLK #define FQ_UD 16 // Пин A2 Arduino - подключен к FQ (FU) #define DATA 17 // Пин A3 Arduino - подключен к DATA #define RESET 18 // Пин A4 Arduino - подключен к RST #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } //------------------------------------------------------ int read_LCD_buttons(){ // Функция считывания нажатия кнопок adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 150) return btnUP; if (adc_key_in < 315) return btnDOWN; if (adc_key_in < 600) return btnLEFT; if (adc_key_in < 850) return btnSELECT; return btnNONE;} //------------------------------------------------------- void tfr_byte(byte data){ // Функция побитной отправки байта for (int i=0; i<8; i++, data>>=1) { // данных в модуль генератора digitalWrite(DATA, data & 0x01); pulseHigh(W_CLK);}} // Подача импульса на CLK после каждого бита //------------------------------------------------------- void sendFrequency(double frequency) { // Преобразование и отправка int32_t freq = frequency * 4294967295/125000000; // значения частоты for (int b=0; b<4; b++, freq>>=8) {tfr_byte(freq & 0xFF);} tfr_byte(0x000); // Отправка завершательного контрольного байта pulseHigh(FQ_UD);} // Обновление частоты генератора //---------------------------------------------------- void setup() { lcd.begin(16, 2); // Старт библиотеки. Указанием количества символов и строк pinMode(FQ_UD, OUTPUT); pinMode(W_CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(RESET, OUTPUT); pulseHigh(RESET); // Отправка импульсов для запуска модуля генератора pulseHigh(W_CLK); pulseHigh(FQ_UD); } //---------------------------------------------------- void loop() { lcd.setCursor(0,0); // Далее вывод текущего значения частоты lcd.print("Freq: "); lcd.setCursor(6,0); lcd.print(" "); lcd.setCursor(6,0); if (freq<1000){lcd.print(freq); lcd.print("Hz");} if ((freq>=1000)&&(freq<1000000)){lcd.print(freq / 1000); lcd.print("kHz");} if ((freq>=1000000)&&(freq<50000000)){lcd.print(freq / 1000000); lcd.print("MHz");} lcd.setCursor(0,1); lcd.print(" Genie v1.0"); if (freq<100){bigStep = 10; // Определение шага грубой и точной littleStep = 1;} // настройки в зависимости от частоты if ((freq>=100)&&(freq<1000)){bigStep = 100; littleStep = 1;} if ((freq>=1000)&&(freq<10000)){bigStep = 1000; littleStep = 10;} if ((freq>=10000)&&(freq<100000)){bigStep = 10000; littleStep = 100;} if ((freq>=100000)&&(freq<1000000)){bigStep = 100000; littleStep = 1000;} if ((freq>=1000000)&&(freq<10000000)){bigStep = 1000000; littleStep = 10000;} if ((freq>=10000000)&&(freq<40000000)){bigStep = 10000000; littleStep = 100000;} lcd_key = read_LCD_buttons(); // Считывание клавиш switch (lcd_key) // Далее обработка нажатий клавиш { case btnRIGHT: {freq += littleStep; break;} case btnLEFT: {freq -= littleStep; break;} case btnUP: {freq += bigStep; break;} case btnDOWN: {if (freq == bigStep){freq -= (bigStep/10);} else {freq -= bigStep;} break;} case btnSELECT: {break;} case btnNONE: {break;} } if (freq<1) freq=1; // Ограничение значений частоты if (freq>40000000) freq=40000000; sendFrequency(freq); // Вызов функции отправки частоты delay (200); // Пауза 200 мс }
3) Если после загрузки скетча Вы получили сообщение "Done uploading.", значит все сделано правильно и можна приступать к следующему этапу - соединению модулей. Keypad Shield нужно просто втыкнуть поверх Arduino Uno, а модуль генератора подключить с помощью идущих в комплекте проводников по следующей схеме:
Выводы Arduino | Выводы модуля генератора |
+5V | VCC |
GND | GND |
A1 | W_CLK |
A2 | FU_UD |
A3 | DATA |
A4 | RESET |
Выходной сигнал снимается с пинов модуля генератора QOUT1, QOUT2(прямоугольный), ZOUT1 и ZOUT2(синусоидальный)
4) После сборки еще раз проверьте правильность подключения, если все правильно - на устройство можно подавать питание.
5) Через несколько секунд появится значение частоты по умолчанию - 10 кГц, которое можно изменить нажатиями кнопок вверх/вниз и вправо/влево. Устройство готово к работе.