Система поиска и стабилизации резонансной частоты

pdjboy
pdjboy аватар
Offline
Зарегистрирован: 22.01.2017

Всем привет. Если уже есть где то подобная тема на форуме, ткните пальцем. Авто предлагает схему генератора прямоугольных импульсов на ард.2560 на сколько я понял. Автоматическая система сканирования частотного диапазона от 1 до 15кГц с фиксацией на резонансной частоте, там где напряжение по амплитуде привышает ток. И код имеется, как бы этого проэкта, но чето не копмилируется для проверки в протеусе. Вот видео проекта, кому интересно. https://www.youtube.com/watch?v=T-RgYB0-KQo https://www.youtube.com/watch?v=J593-dbg6x8&t=26s https://www.youtube.com/watch?v=mcrKzG7HioM https://www.youtube.com/watch?v=PVMJj66GvWI&t=170s https://www.youtube.com/watch?v=ZGxcDtJ36AY&t=561s https://www.youtube.com/watch?v=Oysg8RPgW88

#include 
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int hz = 500;
int freq = 0; 
int volt = 0;
int vmax = 0;
int intval = 0;

void setup()
{ 
  lcd.begin(16, 2);
  lcd.print("VIC Scan Circuit");
  lcd.setCursor(0,1);
  lcd.print("ver. 0.1.0alpha");
  delay(5000);
  //Serial.begin(9600);
  pinMode(9, OUTPUT);                  //pin that tones will be sent from
  pinMode(A0, INPUT);                   //voltage reading pin
  pinMode(8, INPUT);                     //button pin
}

void loop()
{ 
vmax = 0;                             //comment if you want to keep the best frequency of all scans 
intval = 0;                             //comment if you want to see the frequency found intervals added from all scans 
lcd.clear();
lcd.print("   Scanning... ");
lcd.setCursor(11,1);
lcd.print("Hz");
for (hz=1000; hz<=15000; hz=hz+10)       //start from 1khz to 15khz to oscillate the circuit
{
  tone(9,hz);                              //will send a tone at first
  delay(1);                                //wait for a millisecond
  volt = analogRead(A0);             //then read the voltage
  if (vmax < volt)                      //if there is a resonant point, voltage should have the highest value on this frequency
  { 
    vmax = volt;
    freq = hz;                        //remember that frequency
    intval = intval++;              //times found a nice frequency interval during search
    lcd.setCursor(0,1);
    lcd.print(intval); 
  }
  lcd.setCursor(5,1);
  lcd.print(hz);
  }
  for (hz=15000; hz>=1000; hz=hz-10)      //do a descent scan
  {
    tone(9,hz);   
    volt = analogRead(A0);
  delay(1);
  if (vmax < volt)
  {
  vmax = volt;
  freq = hz;
  intval = intval++  ;
  lcd.setCursor(0,1);
  lcd.print(intval);
  }
  if (hz < 10000)
  {
  lcd.setCursor(9,1);
  lcd.print(" ");
  }
  lcd.setCursor(5,1);
  lcd.print(hz);
  }
  tone(9,freq);                      //output the frequency found with higher voltage reading
  lcd.clear();
  lcd.print("Resonance found");
  lcd.setCursor(4, 1);
  lcd.print("@");
  lcd.setCursor(6, 1);
  lcd.print(freq);
  lcd.setCursor(12, 1);
  lcd.print("Hz");
  delay(3500);
  lcd.clear();
  lcd.print("Vres =      v");
  lcd.setCursor(7,0);
  lcd.print(volt);
  lcd.setCursor(0,1);
  lcd.print("Fres =      Hz");
  lcd.setCursor(7,1); 
  lcd.print(freq);
  //Serial.println(vmax);
  //Serial.println(freq);
  // delay(15000)                                //wait for 15 seconds for the next scan. This can be set to whatever you like
  while (digitalRead(8) == LOW)           //or wait for button to be pressed to start the new scan
  {
  volt = analogRead(A0);
  lcd.setCursor(7,0);
  lcd.print("   ");
  lcd.setCursor(7,0);
  lcd.print(volt);
  delay(100);
  }
  

}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Судя по скетчу - говнокод какого-то чайника.

Есть хороший, обкатанный прибор для измерения частотных характеристик, называется NWT-7 . Полоса от 0 до 70МГц, можно тестировать кварцы, катушки, фильтры, снимать АЧХ усилителей. Софт удобный, рисует графики, итд.  Описание.  Его можно собрать самому, все детали доступны. Так-же продают наборы для сборки. Гугло-яндекс расскажет подробности про схему софт итп.  Хорошая, добротная вещь, сам бы сделал себе, но не нужен .. )