Oscyloskop wysokich częstotliwości (009; 23.07.2009; arduino, processing)

 

 

Projekt ten powstał, aby umożliwić pomiary napięcia przez Arduino bez konieczności zmian kodu Arduino dla różnych, szczególnie wysokich częstotliwości.

 

Zasada działania projektu przedstawia się następująco:
  • do Arduino wgrywamy jednorazowo kod programu do pomiaru,
  • otwieramy środowisko Processing, w programie podajemy wartość interesującej nas częstotliwości próbkowania pomiaru (jako wielokrotność 100Hz) i przerwę między kolejnymi pomiarami,
  • podłączamy Arduino i uruchamiamy program w Processingu,
  • Arduino czeka, aż dotrą do niego niezbędne informacje z programu w Processingu, a następnie uruchamia pomiar sygnalizując to diodą,
  • wysłane przez Arduino dane Processing wyświetla na wykresie z opisem osi napięcia i czasu,
  • po wcześniej ustalonej przerwie następuje kolejny pomiar.

 

Kod do Arduino wygląda następująco:

int ProbkowanieUS = 10000; //[Hz] domyślne
int Przerwa = 30000;       //[s] domyślne
boolean Start = false;
void setup()
{
  Serial.begin(115200);
  pinMode(13, OUTPUT);
}

void loop()
{
  if (Serial.available()>0)
  {
    delay(500);
    ProbkowanieUS=(10000/Serial.read());
    delay(500);
    Przerwa = (1000*Serial.read());
    Start = true;
  }

  else
  {
    delay(500);
  }
  if (Start ==true)
  {
    delay(2000);
    Serial.flush();
    digitalWrite(13, HIGH);
    for(int i=1 ; i<=500;i++)
    {
      Serial.print(analogRead(0)/4, BYTE);
      delayMicroseconds(ProbkowanieUS-132);
    }
    digitalWrite(13, LOW);
    Start = false;
    delay(Przerwa);
    Serial.flush();
  }
}

 

Kod do Processingu:

import processing.serial.*;
Serial Arduino;
int X=40;
int Y;

int CzestotliwoscProbkowania = 1;	//[*100Hz] max. 7500Hz
int Przerwa = 10;	//[s]
float T = 5/float(CzestotliwoscProbkowania);

void setup() 
{
  Arduino = new Serial(this,"COM4", 115200);
  size(580, 316); 
  background(200); 
  stroke(0); 
  rect(40,30,500,255);
  PFont font; 
  font = loadFont("ArialMT-16.vlw"); 
  textFont(font); 
  fill(0); 
  text("5V",18,37); 
  text("0V",18,290); 
  text("0s",36,302); 
  text(str(T),532,302);
}
void draw()
{
  if (Arduino.available() > 0)
  {
    Y = int(285-Arduino.read()); 
    stroke(255,0,0);  
    point(X,Y); 
    X++;
  }
  else
  {
    delay(Przerwa*1000 - 4000);
    Arduino.write(byte(CzestotliwoscProbkowania)); 
    Arduino.write(byte(Przerwa));
    X=40;
    background(200);  
    stroke(0);  
    fill(255); 
    rect(40,30,500,255);
    fill(0); 
    text("5V",18,37); 
    text("0V",18,292); 
    text("0s",36,302); 
    text(str(T),532,302);
  }
}

 

Uwaga: maksymalna możliwa do uzyskania częstotliwość próbkowania wynosi 7500Hz. Testu częstotliwości próbkowania dokonać możemy podając na wejście przebieg zmienny o znanej częstotliwości, np. podany z wyjścia PWM Arduino (połączenie przez rezystory).

 

Przykładowe przebiegi:


 


Zastosowane w artykule programy: OscyloskopHFarduino.pde, OscyloskoHFprocessing.pde.

 

 

 

Pobierz ten artykuł w formacie pdf: PDF

© Copyright Sebastian Korczak 2009 - 2024 polish versionpolish version