| Ваш IP: 54.145.83.79 | Online(21) - гости: 9, боты: 12 | Загрузка сервера: 4.79 ::::::::::::

Импульсный генератор + частотомер (Arduino)

На рисунке показана схема простого уст-ва которое может работать в режиме генератора импульсов и в режиме частотомера.

Генератор импульсов:

  • Длительность импульсов от 1 мкс до 8.3 сек
  • Регулировка скважности от 0 до 100.0%

Изменение длительности импульсов и скважности происходит при помощи энкодера, при нажатии на кнопку энкодера начнет мигать курсор в самом младшем разряде, при помощи ручки энкодера можно установить значение от 0 до 9, при повторном нажатии кнопки энкодера курсор перемещается на следующий разряд и так далее, до регулировки скважности, если нажать кнопку энкодера еще раз, то включится режим генерации и на экране LCD индикатора появится надпись «ON». Для удобства использования генератора добавлена кнопка «включение генерации», она позволяет не перебирать все разряды, а сразу включить генерацию если Вы уже установили необходимое значение длительности импульсов. Для перехода в режим изменения длительности импульсов достаточно один раз нажать кнопку энкодера.

Для перехода в режим частотомера необходимо нажать на кнопку «генер./част.», максимальная частота измерения 6.5 МГц. Частотомер имеет три режима времени измерения: 1, 0.1 и 10 секунд. Для изменения времени измерения нужно нажат кнопку энкодера.

Для перехода в режим генератора нужно снова нажать кнопку «генер./част.».

#include <LiquidCrystal.h>
#include <Encoder.h>
#include <TimerOne.h>
#include <FreqCount.h>
LiquidCrystal lcd(6, 7, 8, 11, 12, 13);// RS,E,D4,D5,D6,D7
Encoder myEnc(3, 4);// CLK, DT
 
void setup() {
  pinMode(2,INPUT); // КНОПКА ЭНКОДЕРА
  pinMode(A5,INPUT); // КНОПКА ПРИНУДИТЕЛЬНОГО ВКЛЮЧЕНИЯ ГЕНЕРАЦИИ
  pinMode(A4,INPUT); // ЧАСТОТОМЕР/ГЕНЕРАТОР
  lcd.begin(16, 2);// LCD 16X2
}
 
unsigned long f_sum,time;
long f[8]{0,0,0,0,0,0,0,512};
int i,x,y,cursor,h_g;
long oldPosition  = -999,newPosition;
float t;
const float popravka = 1.0004502;// поправочный коэффициент для повышения точности генератора (если нет эталона то коэффициент = 1.0000000)
 
unsigned long f_0;float f0;
int x1,n=3,r;
 
void loop() {
  if(analogRead(4)>600){h_g++;y=0;delay(300);if(h_g>1){h_g=0;}}// ГЕНЕРАТОР/ЧАСТОТОМЕР (ПО УМОЛЧАНИЮ ПЕРВЫЙ ГЕНЕРАТОР)
 
  if(h_g==1){ i=0; // ЧАСТОТОМЕР ////////////////////////////////////////////////////////////////////
  if(y==1){FreqCount.begin(1000);}
 
  if(digitalRead(2)==LOW){n++;x1=0;delay(100);}// ВЫБОР ВРЕМЕНИ ИЗМЕРЕНИЯ ПРИ ПОМОЩИ КНОПКИ ЭНКОДЕРА
    lcd.setCursor(0,1);
  if(n==1){x1++;if(x1==1){FreqCount.begin(100);}r=-1;lcd.print("T = 0.1 s ");}
  if(n==2){x1++;if(x1==1){FreqCount.begin(10000);}r=1;lcd.print("T = 10 s ");}
  if(n==3){x1++;if(x1==1){FreqCount.begin(1000);}r=0;lcd.print("T = 1 s  ");}
  if(n>3){n=1;} 
    lcd.setCursor(0,0);
    lcd.print("F = "); // ВЫВОД ЧАСТОТЫ 
  if(f_0>=1000000 && n==3){f0=f_0/1000000.0;lcd.print(f0,6+r);lcd.print(" MHz");}
  if(f_0<1000000 && n==3){f0=f_0/1000.0;lcd.print(f0,3+r);lcd.print(" kHz");}
  if(f_0>=100000 && n==1){f0=f_0/100000.0;lcd.print(f0,6+r);lcd.print(" MHz");}
  if(f_0<100000 && n==1){f0=f_0/100.0;lcd.print(f0,3+r);lcd.print(" kHz");}
  if(f_0>=10000000 && n==2){f0=f_0/10000000.0;lcd.print(f0,6+r);lcd.print("MHz");}
  if(f_0<10000000 && n==2){f0=f_0/10000.0;lcd.print(f0,3+r);lcd.print(" kHz");}
 
  if (FreqCount.available()) { 
 
    f_0 = FreqCount.read(); // ИЗМЕРЕНИЕ ЧАСТОТЫ
 
   lcd.setCursor(10,1);lcd.print("***");// ИНДИКАЦИЯ ИЗМЕРЕНИЯ
  }
   delay(200);
   lcd.clear();
}
 
  if(h_g==0){// ГЕНЕРАТОР //////////////////////////////////////////////////////////////////
 
   if(i==8){   lcd.setCursor(10,1); lcd.print("ON ");// ГЕНЕРАЦИЯ ВКЛЮЧЕНА
   if(y==1){ Timer1.initialize(f_sum * popravka); // период  - запускаем только один раз после выхода из режима изминения параметров 
   Timer1.pwm(9, f[7]);} // k - коэффициет заполнения 0-1023. Сигнал снимаем с выхода 9
   delay(100);
 }
 
  if(digitalRead(2)==LOW){delay(300);i++;if(i>8){i=0;} myEnc.write(f[i]*4);// ОПРОС КНОПКИ ЭНКОДЕРА
  if(i==8){y=0;cursor=0;}}
  if(analogRead(5)>600){delay(300);i=8;y=0;}// КНОПКА ПРИНУДИТЕЛЬНОГО ВКЛЮЧЕНИЯ ГЕНЕРАЦИИ
 
  if(i<8||cursor==1){ // В РЕЖИМЕ ИЗМИНЕНИЯ ПЕРИОДА И ЗАОЛНЕНИЯ ШИМ ГЕНЕРАЦИЯ ОТКЛЮЧЕНА
  lcd.setCursor(10,1); lcd.print("OFF");// ГЕНЕРАЦИЯ ВЫКЛЮЧЕНА
 
 long newPosition = myEnc.read()/4; // ОПРОС ЭНКОДЕРА
 
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    f[i]=newPosition;
 
    if(i<7){ // ОГРАНИЧЕНИЕ ПРИ ИЗМИНЕНИИ ПЕРИОДА ОТ 0 ДО 9
    if(f[i]>9){myEnc.write(0);}
    if(f[i]<0){myEnc.write(9*4);}}
    else{// ОГРАНИЧЕНИЕ ПРИ ИЗМИНЕНИИ ЗАПОЛНЕНИЯ ШИМ ОТ 0 ДО 1023
    if(f[7]>1023){f[7]=1023;}
    if(f[7]<0){f[7]=0;}}
  }
   f_sum=f[6]*1000000+f[5]*100000+f[4]*10000+f[3]*1000+f[2]*100+f[1]*10+f[0];// ПЕРИОД
   lcd.setCursor(0,0);// ВЫВОД ИНФОРМАЦИИ НА LCD 
   lcd.print("T = ");
   for(x=6;x>=0;x--){
   if(x==5||x==2){lcd.print(".");}// ВСАВЛЯЕМ РАЗДЕЛИТЬ РАЗРЯДА
   if(cursor==1&&i==x){lcd.print(" ");}else{lcd.print(f[x]);}
   }
   lcd.print(" uS");
 
     // МИГАНИЕ КУРСОРА ПРИ ИЗМИНЕНИИ ПАРАМЕТРОВ 
 
   if(millis()-time<200){cursor=1;}// 200 МС ПРОБЕЗ ВМЕСТО ЦИФРЫ
   if(millis()-time>200){cursor=0;}// 800 МС ПОКАЗЫВАЕМ ЦИФРУ
   if(millis()-time>1000){time=millis();}// ОТСЧЕТ 1 СЕКУНДЫ
  }
 
   // ВЫВОД НА LCD % ЗАПОНЕНИЯ ШИМ
   t=f[7]*100.0/1023;
   lcd.setCursor(0,1);lcd.print(t,1);if(cursor==1&&i==7){lcd.print("    ");}else{ lcd.print(" %   ");}
  }
y++;
}

Частотомер

Генератор

 

50%

20%

80%

Encoder.h

FreqCount.h

 TimerOne.h

 

Добавить комментарий

Случайные статьи

  • Акустическое оформление НЧ динамической головки

    Динамический диапазон — 25…150Гц, автором применена НЧ головка 75ГДН-3. Корпус рис. 1.2. изготовлен из ДСП толщиной 20мм. Стенки корпуса соединены друг с другом рейками 20*20мм с помощью клея и шурупов. Акустическая панель с отверстиями под НЧ головку крепится внутри корпуса АС. Задняя стенка корпуса — съемная, на ней устанавливаются НЧ …Подробнее...
  • Замедлитель выключения света в салоне автомобиля

    После закрывания двери автомобиля при неработающем двигателе такой замедлитель будет гасить свет не сразу , а через 10-15 секунд. При этом при работающем двигателе замедлитель не должен будет работать. По питанию схема включена параллельно осветительной лампе Л1. Контакты реле К1 блокируют выключатель освещения П1.  при неработающем двигателе при открывании двери …Подробнее...
  • Приемник УКВ ЧМ на микросхеме 174ХА34

    Приемник работает в диапазоне 65…108 МГц и имеет чувствительность не хуже 5 мкВ\В. Номинальное напряжение питания — 3В. Весь высокочастотный тракт включая ЧМ детектор, УВЧ и гетеродин, собран на одной специализированной микросхеме DA1 типа К174ХА34. Эта микросхема представляет собой УВЧ, смеситель, гетеродин, УПЧ, усилитель-ограничитель, ЧМ детектор, систему шумо-понижения и сжатия …Подробнее...
  • Предварительный делитель частоты

    На рисунке показано уст-во (делитель частоты) которое предназначено для расширения верхнего предела диапазона измерения частотомеров до 250 МГц, путем деления частоты на 100. Так же это уст-во совместимо с осциллографом для увеличения диапазона частот. Делитель частоты собран на одной стороне фольгированного стеклотекстолита, а на второй стороне остается фольга не тронутой, …Подробнее...
  • MAX639, MAX640, MAX653 — понижающие, импульсные стабилизаторы

    MAX639, MAX640, MAX653 — понижающие, импульсные стабилизаторы

    MAX639, MAX640, MAX653 (5В/3.3В/3В) — понижающие DC/DC преобразователи с низким потребляемым током покоя. Максимальный выходной ток преобразователя до 225 мА. Система управления и ограничения тока с частотно – импульсной модуляцией (ЧИМ) обеспечивает устройствам преимущества, свойственные преобразователям с широтно – импульсной модуляцией (ШИМ), т.е. высокую эффективность при больших нагрузках, в то …Подробнее...