| Ваш IP: 54.91.203.233 | Online(30) - гости: 16, боты: 14 | Загрузка сервера: 3.45 ::::::::::::

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

Генератор прямоугольных импульсов в своей основе использует библиотеку TimerOne, возможности библиотеки позволяют генерировать сигнал ШИМ на выводе 9 в диапазоне от 1 мкс до 8,3 сек, в частности в генераторе диапазон ограничен до 200 мс (5 Гц), при желании диапазон можно увеличить до 8,3 сек. Так можно регулировать скважность от 0 до 1023 единиц (10-бит), что соответствует 0 и 100%.

В генераторе импульсов имеется возможность регулировки периода следования импульсов при помощи кнопок подключенных к цифровым входам 6 и 7 Arduino. 13 вход позволяет регулировать скважность (коэффициент заполнения). Возможно кнопочное управление не самое разумное решение, но на данный момент реализована только такая функция.

Для удобства показания длительности и скважности выведены на первый ряд индикатора LCD 16×2, во втором ряду выведены показания частоты. Важно помнить что минимальный шаг регулировки периода следования импульсов 1 мкс, поэтому частота будет меняться дискретно, например 1 мкс это 1 МГц, 2 мкс — 500 кГц, 3 мкс это 333,333 Гц и так далее, по мере уменьшения частоты увеличивается плавность ее регулировки.

//  rcl-radio.ru
//  Генератор прямоугольных имульсов, период следования импульсов от 1 мкс до 200 мс (1 МГц...5 Гц)
#include <TimerOne.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7
unsigned long t=1000,f,k=512;// по умолчанию 1000 мкс (1000 Гц), меандр, длительность имульса равна скважности k=512 (50%)
byte k1,kn,kn1,kn2;
int drive,drive0;

void setup()
{ 
  lcd.begin(16, 2);// LCD 16X2
  pinMode(10, OUTPUT);
  pinMode(6,INPUT);// кнопка на входе 6
  pinMode(7,INPUT);// кнопка на входе 7
  pinMode(13,INPUT);// кнопка на входе 13
}
void loop()
{
  Timer1.initialize(t); // период    
  Timer1.pwm(9, k); // k - коэффициент заполнения 0-1023. Сигнал снимаем с выхода 9
  kn=digitalRead(6); // кнопка вход 6 (- период импульса)
  kn1=digitalRead(7);// кнопка вход 7 (+ период импульса)
  kn2=digitalRead(13);// кнопка вход 13 (+ по кругу коэффициент заполнения)

  if(kn==HIGH){ // убавление периода
    drive++;
    if(drive<30){ 
      t=t-1;  
    }
    // если долго держат кнопку происходит ускорение коррекции периода импульса х10 х100 х1000
    else if(drive>30 && drive<60 ){ 
      t=t-10; 
    }
    else if(drive>=60 && drive<100){
      t=t-100;
    }
    else if(drive>=100){
      t=t-1000;
    }
  }
  else{
    drive=0;
  }

  if(kn1==HIGH){// добавление периода
    drive0++;
    if(drive0<30){
      t=t+1; 
      // если долго держат кнопку происходит ускорение коррекции периода х10 х100 х1000
    }
    else if(drive0>30 && drive0<60 ){ 
      t=t+10; 
    }
    else if(drive0>=60 && drive0<100){
      t=t+100;
    }
    else if(drive0>=100){
      t=t+1000;
    }
  } 
  else{
    drive0=0;
  }
  if(t==0 || t>300000){ // ограничение длительности импульса по минимому, если 0 мкс или больше 300 мс (3,33 Гц), то период равен 1 мкс
    t=1;
  }
  if(t>200000 && t<300000){ // ограничение длительности импульса по максимому, если больше 200 мс, но меньше 300 мс (3,33 Гц), то период равен 200 мс (5 Гц)
    t=200000;
  } 
  f=1000000/t; // расчет частоты
  k1=k*100/1024; // расчет % коэффициента заполнения

  if(kn2==HIGH){// кнопка регулировки коэффициента заполнения (по кругу от 50 до 100%, далее от 0 до 100%)
    k=k+16;// шаг 16 из 1024 (можно сделать 8 для более плавной регулировки)
  }
  if(k==1024){
    k=0;
  }
// вывод информации на индикатор
  lcd.setCursor(0,0); 
  lcd.print("T=");
  lcd.print(t);
  lcd.print(" us");
  lcd.setCursor(12,0);
  lcd.print(k1);
  lcd.print(" %");
  lcd.setCursor(0,1); 
  lcd.print("F=");
  lcd.print(f);
  lcd.print(" Hz");
  delay(300);
  lcd.setCursor(0,0); 
  lcd.print("                ");
  lcd.setCursor(0,1); 
  lcd.print("                ");
}

Генератор нуждается в доработке, поэтому со временем поменяются органы регулировки, добавятся новые функции.

 

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

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

  • УМЗЧ 12ВТ на MOSFET транзисторах

    УМЗЧ 12ВТ на MOSFET транзисторах

    На рисунке показана схема простого но высококачественного усилителя выходной каскад которого выполнен на MOSFET транзисторах  2SK135 и  2SJ50. Усилитель напряжения выполнен на ОУ NE5534. NE5534 — высокопроизводительный операционный усилитель, сочетающий превосходные характеристики постоянного и переменного тока. Обладает очень низким уровень шума, имеет высокую производительность, высокое единичное усиление, низкий уровень искажений и высокий …Подробнее...
  • Частотомер 1МГц на PIC16F628A

    Частотомер 1МГц на PIC16F628A

    На рисунке показана схема простого частотомера, который состоит из микроконтроллера PIC16F628A и трех семисегментных индикаторов. Частотомер способен отображать частоту в кГц от 1 до 999. Время счета 4 мс, время повторения счета 1 секунда. Все транзисторы в схеме BC337 или их аналог. Ток потребления схемы 45мА при напряжении 5В. Все резисторы подключенные …Подробнее...
  • Параметры, типовой режим и цоколевки электровакуумных приборов (преобразовательные лампы и электронно-лучевые индикаторы настройки)

    Литература РА1998_08Подробнее...
  • Усилитель для наушников

    Усилитель для наушников

    На рисунке показана простая, но высококачественная схема усилителя для наушников.  Выходная мощность усилителя 0,5 Вт на нагрузке 32 Ом. Усилитель обладает очень низким КНИ, ток потребления схемы не превышает 100 мА. Выходные транзисторы должны быть установлены на небольшие теплоотводы. Источник — http://www.redcircuits.com/Page185.htmПодробнее...
  • Усилитель мощности 50 Вт (K1058 + J162)

    Усилитель мощности 50 Вт (K1058 + J162)

    50W Усилитель мощности с выходным каскадом на полевых транзисторах K1058 + J162 достаточно прост. В усилителе используется двух полярное питания +/-35В на 2А. Полевые транзисторы K1058 и J162 должны быть установлены на радиаторе.     Характеристики усилителя мощности:   Выходная мощность на частоте 1 кГц 50Вт на 8 Ом нагрузке и 88Вт …Подробнее...