Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual

Product codes
RP6 V2
Page of 141
RP6 ROBOT SYSTEM -  4. Programmierung des RP6
4.6.5. ADC auslesen (Batterie-, Motorstrom- und Lichtsensoren)
Am ADC (Analog to Digital Convertor) sind - wie in Abschnitt 2 schon beschrieben 
wurde - viele Sensoren des RP6 angeschlossen. Natürlich bietet die RP6Library auch 
hier eine Funktion, um diese auszulesen:
uint16_t readADC(uint8_t channel)
Die Funktion gibt einen 10 Bit Wert (0...1023) zurück, also benötigt man 16 Bit Varia-
blen für die Sensorwerte.  
Es stehen folgende Kanäle zur Verfügung:
ADC_BAT 
--> Batteriespannungs Sensor
ADC_MCURRENT_R 
--> Motorstromsensor des rechten Motors
ADC_MCURRENT_L 
--> Motorstromsensor des linken Motors
ADC_LS_L 
--> Linker Lichtsensor
ADC_LS_R 
--> Rechter Lichtsensor
ADC_ADC0 
--> Freier ADC Kanal für eigene Sensoren
ADC_ADC1 
--> Freier ADC Kanal für eigene Sensoren
Hinweis: Die Anschlüsse für die zwei freien ADC Kanäle sind nicht  
bestückt. Hier kann man eigene Stecker im 2.54mm Rastermaß an-
löten   und   evtl.   noch   zwei   kleine   100nF   Kondensatoren   und   einen 
großen   470µF   Elko   hinzufügen   falls   man   Sensoren   anschließen 
möchte die hohe Spitzenströme benötigen wie z.B. IR Abstandssen-
soren   von   Sharp   ...     Sie   sollten   dazu   allerdings   schon   ein   wenig 
Löterfahrung haben! Sonst lieber ein Erweiterungsmodul verwenden!
Beispiele:
uint16_t ubat = readADC(ADC_BAT);
uint16_t iMotorR = readADC(ADC_MCURRENT_R);
uint16_t iMotorL = readADC(ADC_MCURRENT_L);
uint16_t lsL = readADC(ADC_LS_L);
uint16_t lsR = readADC(ADC_LS_R);
uint16_t adc0 = readADC(ADC_ADC0);
uint16_t adc1 = readADC(ADC_ADC1);
if(ubat < 580) writeString_P("Warnung! Batterie fast leer!");
Standardmäßig wird die 5V Versorgungsspannung als Referenz verwendet. Man kann 
aber   die   Funktion   auch   so   umschreiben,   dass   die   interne   2.56V   Referenz   des 
ATMEGA32 verwendet wird (dazu im Datenblatt vom MEGA32 nachlesen). Für die nor-
malen Sensoren des RP6 wird das allerdings normalerweise nicht benötigt.
Es ist sinnvoll mehrere ADC Werte zu messen (z.B. in einem Array speichern) und 
dann zunächst einmal den Mittelwert davon zu bilden oder Minimum/Maximum zu be-
stimmen bevor man die Messwerte des ADCs auswertet. Ab und zu fängt man sich 
nämlich durch Störungen Messfehler ein. Im Falle der Akkuspannung ist es z.B. für 
einen automatischen Stromsparmodus absolut notwendig, ein paar Werte zu mitteln 
denn die Spannung kann sehr stark schwanken - vor allem wenn die Motoren laufen 
und wechselnd belastet werden. 
Wie bei den Bumpern kann man die ADC Messungen automatisieren. Es gibt auch hier 
schon eine kleine Funktion, die uns das Leben etwas erleichtern kann.
- 92 -