Hallo
Inzwischen kenne ich vier Ansätze mit denen man mit einem IR-ACS Rückschlüsse auf die Entfernung zum Hinderniss ziehen kann:
Änderung der Trägerfrequenz:
Funktioniert nicht wirklich, denn der TSOP reagiert zu heftig, wenn sich die Frequenz vom Nennwert entfernt:
https://www.roboternetz.de/community...l=1#post326640
Änderung des Burst:
Ein Burst sind IR-Impulspakete. Ein IR-Empfänger reagiert erst nach einer bestimmten Anzahl von Trägerfrequenzperioden bevor er ein Signal als gültig anerkennt (typisch ca. 6-10 Perioden). Mit zunehmenden Abstand muss der Burst länger sein um erkannt zu werden. Das funktioniert leidlich...
Änderung der Sendeleistung über Vorwiderstände:
Mit größerem Hardwareaufwand verbunden wird hierbei der Strom durch die ACS-LED verändert. Das funktioniert gut und wird z.B. beim RP6 angewand:
https://www.roboternetz.de/community...(mit-Infrarot)
Änderung der duty cycles:
Normalerweise wird das Trägersignal mit 50:50 Impuls zu Pause gesendet. Durch Vergrößerung der Pause (Low-Anteil, kein IR-Licht) kann man sehr feinfühlig den Abstand zum Hinderniss messen. Diese Methode funktioniert sehr gut. Beispiele für die Anwendung:
Der "Klassiger" beim Asuro nach waste:
https://www.roboternetz.de/community...erniserkennung
https://www.roboternetz.de/community...bstandsmessung
Meine Umsetzung mit der bee:
https://www.roboternetz.de/community...l=1#post443546
Mit der Probot-Hardware funktioniert die duty-cycle-Methode auch sehr gut:
Code:
void ACSData(unsigned int *data)
{
UCSRB &= ~(1<<TXEN); // USART TX disable
OCR2=0xff;
DDRD |= (1<<PD1);
PORTD &= ~(1<<PD1); // ACS LED left on
while(PIND & 1)
{
acs=15;
while(acs);
OCR2--;
}
PORTD |= (1<<PD1); // ACS LED left off
data[0]=OCR2;
while(!(PIND &1));
OCR2=0xff;
PORTB &= ~(1<<PB0); // ACS LED right on
while(PIND & 1)
{
acs=15;
while(acs);
OCR2--;
}
PORTB |= (1<<PB0); // ACS LED right off 6
data[1]=OCR2;
while(!(PIND &1));
OCR2=0x91; //36kHz
}
(Aus https://www.roboternetz.de/community...l=1#post423547)
Das Pulse/Pauseverhältniss wird (bei konstantem Burst von 15) schrittweise von 0:255 Richtung 50:50 geändert. Wenn der IR-Empfänger das Signal erkennt (sein Signalpegel geht auf Low) kann man aus dem aktuellen Verhältniss von Puls zu Pause auf den Abstand schliesen.
Das funktioniert gut, scheiterte aber in den von dir gezeigten Beispielen an der Umsetzung auf dem ccpro ;)
Gruß
mic
Lesezeichen