Sharp Abstandssensor an AVR ATmega32

OP #3664238
Lesenswert?

Hallo zusammen,

ich möchte mit einem Sensor von Sharp (GP2Y0A02) einen Abstand messen.
Den digitalisierten Messwert möchte ich über einen Summer, der am 
Ausgang eines ATmega32 angeschlossen ist akustisch ausgeben.
Wenn ich an den Eingang ein Poti anschließe, kann ich einen schönen 
(variabel durch drehen) Sinuston hören.
Wenn ich nun anstelle des Poti den Sensor dranhänge, bekomme ich einen 
sehr ungleichmäßigen Ton.
Da es mit dem Poti gut funktioniert, gehe ich davon aus, das die 
Software in Ordnung ist. Ich habe den Quelltext unten trotzdem 
angehängt.

Hat jemand eine Idee, wie ich den Wert des Abstandssensors auch so schön 
bekomme, wie die Wandlung mit dem Poti?

Vielen Dank!
Micha
1
#define F_CPU 8000000UL     /* 8MHz */
2
 
3
#include <avr/io.h>
4
#include <util/delay.h>
5
 
6
void long_delay(uint16_t);
7
 
8
#define SUMMER (1<<PD7)
9
 
10
int main()
11
{
12
  uint16_t adc_wert = 0;
13
 
14
  DDRD |= SUMMER;
15
 
16
  /* Vref = AVCC = +5V */
17
  ADMUX |= (1<<REFS0);
18
 
19
  /* ADC-Frequency has to be between 50 and 200kHz
20
   * Rescaler = 64 --> 8MHz / 64 = 125kHz */
21
  ADCSRA |= (1<<ADPS1) | (1<<ADPS2);
22
 
23
  ADCSRA |= (1<<ADEN);
24

25
  ADCSRA |= (1<<ADSC);
26
 
27
  while (ADCSRA & (1<<ADSC)) 
28
  {}
29
 
30
  adc_value = ADCW;
31
  
32
  while(1)
33
  {
34
    ADCSRA |= (1<<ADSC);
35

36
    while (ADCSRA & (1<<ADSC)) 
37
    {}
38
 
39
    adc_value = (ADCW << 2);
40
 
41
    long_delay(adc_value);
42
 
43
    PORTD ^= SUMMER;
44
  }
45
}
46
 
47
void long_delay(uint16_t us) 
48
{
49
                for(; us>0; us--) 
50
                _delay_us(1);
51
}
(Firma: matzetronics) #3664282
Lesenswert?

Der Sensor benötigt zum ersten recht viel Strom, sorge also dafür, das 
die Betriebsspannung ordentlich abgeblockt ist und evtl. direkt am 
Sensor sich auch noch ein Elko befindet (z.B. 10µF-47µF).
Zum zweiten sagt Sharp zwar, das der Ausgang direkt an einen MC 
angeschlossen werden kann, ich würde jedoch zu einem kleinen RC Tiefpass 
tendieren. Also z.B. 1k bis 3k3 in die Messleitung und einen Kondensator 
von z.B. 2n2 - 22n am ADC Eingang nach Masse.
Der Messzyklus liegt ja bei etwa 38ms, diese Frequenz (etwa 26 Hz) 
dürfte sich immer mal wieder zeigen, das wäre aber normal.
(Firma: matzetronics) #3664682
Lesenswert?

Uwe schrieb:
> The relationship between the sensor’s output voltage and the inverse of
> the measured distance is approximately linear over the sensor’s usable
> range.

Ja, steht ja im Datenblatt, aber was möchtest du damit sagen? Genau 
diese Ausgangsspannung will der TE ja akustisch umsetzen (hohe Spannung 
= tiefe Frequenz und umgekehrt), sie scheint aber recht stark zu 
springen, wenn ich das richtig verstanden habe.
Gast #3664692
Lesenswert?

Das der KEHRWERT der Distanz ANNÄHREND linear ist.
Und selbst wenn man den Kehrwert nimmt ist "annährend" auch schon fast 
übertrieben. Wenn man das mit dem Kehrwert nicht beachtet dann sieht das 
in etwa so aus:
Die Spannung ändert sich zwischen 150cm und 60cm von 0,5V zu 1V.
Zwischen 60cm und 15cm verändert sich die Spannung von 1V zu 2,75V.
OP #3677792
Lesenswert?

Matthias Sch. schrieb
> Der Sensor benötigt zum ersten recht viel Strom, sorge also dafür, das
> die Betriebsspannung ordentlich abgeblockt ist und evtl. direkt am
> Sensor sich auch noch ein Elko befindet (z.B. 10µF-47µF).
> Zum zweiten sagt Sharp zwar, das der Ausgang direkt an einen MC
> angeschlossen werden kann, ich würde jedoch zu einem kleinen RC Tiefpass
> tendieren. Also z.B. 1k bis 3k3 in die Messleitung und einen Kondensator
> von z.B. 2n2 - 22n am ADC Eingang nach Masse.
> Der Messzyklus liegt ja bei etwa 38ms, diese Frequenz (etwa 26 Hz)
> dürfte sich immer mal wieder zeigen, das wäre aber normal.

Hallo Matthias, vielen Dank zuerst einmal für deine Antwort.
Wo am Sensor sollte der Elko sitzen? Zwischen Versorgungsspannung und 
Masse?
Das RC TP-Filter werde ich mal versuchen zu realisieren.
Was genau bedeutet ein Messzyklus von 38 ms? Muss ich dementsprechende 
etwas in der ADC Software beachten?

Uwe schreib
>> sie scheint aber recht stark zu springen, wenn ich das richtig verstanden
>> habe.
>Ja und ich schätze der Sprung ist ca. bei 60cm zu hören!

Hallo Uwe, auch dir vielen Dank für deine Antworten.
Ob der Sensor bei 60 cm springt kann ich nicht sagen, da er insgesamt 
"springt". D.h. das ich bei einem konstanten (so gut ich das realisieren 
kann) Abstand zum Sensor ein "springen" in der Tonhöhe wahrnehmen kann. 
Und das so stark, dass ich auf der Tonhöhe nicht auf den Abstand 
schließen kann.

Hat einer von euch diesen Sensor schon einmal an einem ATmega 
(erfolgreich) betrieben?

Vielen Dank
Micha

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren