В этом проекте плата Arduino Uno настроена как генератор прямоугольных импульсов с выбираемым пользователем уровнем частоты и рабочего цикла. Рабочий диапазон системы составляет до 10 кГц.
Желаемую частоту и рабочий цикл генерируемых прямоугольных импульсов можно задать с помощью матричной клавиатуры, которая сопряжена с цифровыми выводами Arduino.
Генератора прямоугольных импульсов — схема и работа
Принципиальная схема генератора прямоугольных импульсов показана на следующем рисунке:
В качестве устройства ввода используется матричная клавиатура 4 × 3. Четыре ряда (с RW1 по RW4) клавиатуры подключены к цифровым контактам 10, 11, 12 и 13 платы Arduino Uno. Три столбца (с CL1 по CL3) клавиатуры подключены к аналоговым входным контактам Arduino (с A0 по A2). Каждая колонка подключена к источнику питания 5 В через резистор сопротивлением 1 кОм (R1 — R3).
Arduino Uno — это плата разработки на базе микроконтроллера AVR ATmega328P (MCU) с шестью аналоговыми выводами и 14 цифровыми контактами ввода/вывода. Микроконтроллер имеет 32 КБ флэш-памяти ISP, 2 КБ ОЗУ и 1 КБ EEPROM. Плата обеспечивает последовательную связь через UART, SPI и I2C. Микроконтроллер может работать с тактовой частотой 16 МГц.
В нашем примере цифровые выводы Arduino 13, 12, 11, 10 и 9 сконфигурированы как выходные выводы. Контакты A0, A1 и A2 служат для аналоговых входов.
Программного обеспечения
Исходный код написан на языке программирования Arduino. Плата программируется с использованием программного обеспечения Arduino IDE.
Выберите плату Arduino Uno в меню Инструменты –> Плата в Arduino IDE и загрузите ниже приведенный скетч через стандартный порт USB на вашем компьютере:
int r1=10; int r2=11; int r3=12; int r4=13; int c1; int c2; int c3; float x=0;int a; float t,t1,t2,f,d,t3; void setup() { pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(r3,OUTPUT); pinMode(r4,OUTPUT); pinMode(9,OUTPUT); pinMode(0,INPUT); pinMode(1,INPUT); pinMode(2,INPUT); Serial.begin(9600); } void loop() { digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); c1=analogRead(0); c2=analogRead(1); c3=analogRead(2); if(c1<600) {a=1; x=10*x+a; Serial.println(x); delay(500);} else { if(c2<600) {a=2; x=10*x+a; Serial.println(x); delay(500);} else { if(c3<600) { a=3; x=10*x+a; Serial.println(x); delay(500);} }} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH); digitalWrite(r4,HIGH); c1=analogRead(0); c2=analogRead(1); c3=analogRead(2); if(c1<600) {a=4; x=10*x+a; Serial.println(x); delay(500);} else { if(c2<600) {a=5; x=10*x+a; Serial.println(x); delay(500);} else { if(c3<600) {a=6; x=10*x+a; Serial.println(x); delay(500);} }} digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,LOW); digitalWrite(r4,HIGH); c1=analogRead(0); c2=analogRead(1); c3=analogRead(2); if(c1<600) {a=7; x=10*x+a; Serial.println(x); delay(500);} else { if(c2<600) {a=8; x=10*x+a; Serial.println(x); delay(500);} else { if(c3<600) {a=9; x=10*x+a; Serial.println(x); delay(500);} }} digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH); digitalWrite(r4,LOW); c1=analogRead(0); c2=analogRead(1); c3=analogRead(2); if(c1<600) {f=x; x=0; Serial.println("enter duty cycle"); delay(500);} else { if(c2<600) {a=0; x=10*x+a; Serial.println(x); delay(500);} else { if(c3<600) { d=x; t=(1/f); t1=t*1000000; t2=t1*(d/100); t3=t1-t2; Serial.print("frequency="); Serial.println(f); Serial.print("duty cycle="); Serial.println(d); x=0; while(1) { digitalWrite(9,1); delayMicroseconds(t2); digitalWrite(9,0); delayMicroseconds(t3); } delay(500);} }} }
Функция Serial.begin (9600) инициализирует последовательный порт со скоростью 9600 бод. В этом проекте монитор последовательного порта Arduino IDE также отображает введенное значение частоты и рабочего цикла прямоугольных импульсов.
Примечание. Arduino необходимо перезагружать каждый раз, перед тем как устанавливается новая частота и рабочий цикл.
Схема работы проста. После загрузки кода в Arduino подключите клавиатуру, как показано на схеме. Включите питание и введите желаемое значение частоты с клавиатуры. Затем нажмите кнопку рабочего цикла S11 (см. схему) и введите желаемое значение рабочего цикла, нажимая цифровые клавиши (от S0 до S9). Наконец, нажмите клавишу Enter (S12).
Выходные прямоугольные импульсы будут на разъеме CON1, который подключен к цифровому выводу 9 Arduino Uno.