| Ваш IP: 54.92.190.11 | Online(35) - гости: 24, боты: 11 | Загрузка сервера: 3.48 ::::::::::::

Генератор прямоугольных импульсов на 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("                ");
}

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

 

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

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

  • К5300ЕХ025 — СТАБИЛИЗАТОР НАПРЯЖЕНИЯ С РАСШИРЕННЫМИ ФУНКЦИЯМИ УПРАВЛЕНИЯ

    К5300ЕХ025 — СТАБИЛИЗАТОР НАПРЯЖЕНИЯ С РАСШИРЕННЫМИ ФУНКЦИЯМИ УПРАВЛЕНИЯ

    К5300ЕХ025 – микросхема, предназначенная для использования в качестве линейного стабилизатора напряжения. Характеристики: Входное напряжение до 45В. Выходное напряжение 11,0 В Ток нагрузки: до 60 мА. Защита от короткого замыкания. Тепловая защита. Рабочий температурный диапазон от минус 60 °С до +125 °С Дополнительная регулировка внешним резистором выходного напряжения в диапазоне 11,0-15,0 В. Настраиваемый порог включения стабилизатора по …Подробнее...
  • УНЧ на TDA1904

    УНЧ на TDA1904

    Напряжение питания 4…20В Макс. потребляемый ток 2А Выходная мощность при Rн=4Ом, КНИ=10%: Uп=14В 4Вт Uп=12В 3,1Вт Uп=9В 1,8Вт Uп=6В 0,7Вт КНИ при Uп=9В мощность менее 1,2Вт и Rн=4Ом =0,3% Ток покоя 8…18мАПодробнее...
  • Hi-Fi усилитель для наушников

    Hi-Fi усилитель для наушников

    На рисунке показана схема Hi-Fi усилителя для наушников (моно) с выходной мощность 1 Вт. КНИ усилителя не более 0,1%. Частота пропускания от 10 до 30000 Гц. Усилитель обеспечивает выходную мощность 1 Вт на нагрузке 8 Ом при входном сигнале 500 мВ. Выходные транзисторы усилителя должны быть установлены на небольшие радиаторы. Источник …Подробнее...
  • Цифровой термометр на МК

    Цифровой термометр на МК

    Цифровой ИТ на МК с датчиком на интегральной микросхеме LM35, которая позволяет получить высокую линейность температурной зависимости протекающего через нее тока, разработан Р. Хименесом, Р. Салазаром и М. Улисесом (Electronic Design, July 2002). В основе схемы — микроконтроллер PIC16F872, программу которого можно скачать на сайте http://www.elecdesign.com/Files/29/2476/2476.zip. Индикатором служит сборка из …Подробнее...
  • Источник питания 0…30В 5А

    На рисунке показана схема источника питания с выходным напряжением от 0 до 30 В и максимальным током нагрузки 5А. В схеме используется микросхема LM723 и 4-е транзистора, два из которых силовые 2N3055.      Транзисторы 2N3055 должны быть установлены на радиаторы. Регулировка выходного напряжения осуществляется при помощи потенциометра VR1. Трансформатор должен иметь …Подробнее...