Главная » Ардуино » Arduino Uno в качестве генератора прямоугольных импульсов с регулируемой частотой и рабочим циклом

Arduino Uno в качестве генератора прямоугольных импульсов с регулируемой частотой и рабочим циклом

В этом проекте плата Arduino Uno настроена как генератор прямоугольных импульсов с выбираемым пользователем уровнем частоты и рабочего цикла. Рабочий диапазон системы составляет до 10 кГц.

Блок питания 0...30 В / 3A
Набор для сборки регулируемого блока питания...
Подробнее

Желаемую частоту и рабочий цикл генерируемых прямоугольных импульсов можно задать с помощью матричной клавиатуры, которая сопряжена с цифровыми выводами Arduino.

Генератора прямоугольных импульсов — схема и работа

Принципиальная схема генератора прямоугольных импульсов показана на следующем рисунке:

Arduino Uno в качестве генератора прямоугольных импульсов - схема

В качестве устройства ввода используется матричная клавиатура 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.

Источник

Цифровой мультиметр AN8009
Большой ЖК-дисплей с подсветкой, 9999 отсчетов, измерение TrueRMS...
Подробнее

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*