Pages: [1]   Go Down
Author Topic: Issues with samping a sine wave  (Read 860 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I'm a starter with arduino. I tried to sample a 200 Hz sine wave or a square wave from the function generator and get the pulses from an analog output. Ideally, if it is a square wave, I would get the exactly the same pusles from the output. But the pulses I got varied in pulse widths, in other words, the duty cycle was not constantly 50% as the input. I assume there must be problems with sampling rate and PWM frequency. Can anyone help please?

Here's the code I get from the "Analog serial in out" example.
const int analogInPin = A0;  // Analog input pin that the function generator is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);           
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255); 
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);           

  // print the results to the serial monitor:
  Serial.print("sensor = " );                       
  Serial.print(sensorValue);     
  Serial.print("\t output = ");     
  Serial.println(outputValue);   

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);                     
}
Logged

Quebec
Offline Offline
Jr. Member
**
Karma: 3
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You're sampling rate is too low, you're sampling at about 2.5 times faster than the input signal, if you draw a square signal on paper and then place dots on it where sampling is done, you'll grasp what's happening.
Don't forget to offset your input so it's always positive, arduinos don't like negative voltages.

I would do the serial print only once per second or you'll fill the buffer.
And increase the sampling rate to 2KHz and make sure the sampling interval is always the same (by calling micros() or using a timer)

Ideally you should use a low pass filter to remove frequencies above 200Hz but this can wait.
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 514
Posts: 31543
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Also the analogWrite outputs PWM not a DC value.

http://www.thebox.myzen.co.uk/Tutorial/PWM.html
So it is never going to look like the input signal.
Logged

Pages: [1]   Go Up
Jump to: