Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Problem mit Snake Vision
Hallo,
ich hab mir einen Snake Vision Sensor für den Asuro als Fertigbausatz bestellt. Diesen habe ich vorhin getestet aber irgendwie funktioniert das nicht richtig. Ich versorge den Sensor mit 5V und hab den Anschluss ADC3 und den Anschluss ADC2 an jeweils einen A/D Kanal vom Mega32 geklemmt und mir den A/D Wert mittels Terminal ausgegeben. Der eine Sensor gibt in etwa 0 aus und der Wert erhöht sich je näher ich mit der Hand komme und der andere gibt die ganze Zeit 504-506 aus egal wie nah ich mit der Hand komme.
Was habe ich falsch gemacht?
Danke schonmal für die Hilfe
Hat sich erledigt......ich Depp sollte vielleicht mal auf den Schaltplan gucken......ein 5V Festspannungsregler kann schlecht 5V generieren wenn an Vcc 5V anliegen und dann noch was an den Dioden abfällt sodass weniger als 5V zum Regler kommen -.-
radbruch
10.01.2012, 23:35
Du warst schneller als ich den Beitrag finden konnte:
https://www.roboternetz.de/community/threads/47843-Projekt-RP6-mit-Snake-Vision?p=525640&viewfull=1#post525640
Ja ich habs nun (hoffentlich) endlich am laufen.
Betreiben tu ich den mit 12V ausm Netzteil und dann hat es erst wieder nicht geklappt. Der A/D Wandler hat die ganze Zeit 1023 ausgegeben aber das lag anscheinend daran das ich direkt auf den A/D-Wandler gegangen bin und das GND vom RN-Control nicht mit dem Snake Vision verbunden habe. Nachdem ich auch GND vom RN-Control mit dem Snake Vision verbunden habe und die zwei ADC Ausgänge vom Snake Vision an den A/D-Wandler vom Mega32 geklemmt habe und den ganzen Kram mit 12V betreibe kommen auch sinnvolle Werte raus........
Wenn nichts in der Nähe ist kommen zwei Werte im Bereich 30-70 raus. Wobei der eine Sensor 30 ausgibt und der andere 60+. Kann das an dem Drift der Sensoren liegen?
Ich meine stabil ist die Spannung ja, ich benutze ja die Snake Vision Spannungsquelle ohne da was dran gemacht zu haben.
Besserwessi
11.01.2012, 19:51
Die Spannung vom Sensor ist sehr kleine, da kann es schon zu einem kleinen Offset kommen, denn man wohl in Software berücksichtigen muss. Neben der Drift des Sensors ist auch die Temperatur des Sensors wichtig: wenn man da vorher angefasst hat und der Sensor damit etwas wärmer ist, zeigt der Sensor einen kleineren Wert an.
Der Sensor an sich (also das Sensor IC) kann keinen Offset in dem Sinne habe, einfach aus Gründen der Thermodynamik: ohne Temperaturdifferenz kann da keine Spannung rauskommen. Es könnte ggf. zu einem Offset durch HF-einstrahlung z.B. vom Handy kommen - das trifft aber den Verstärker.
Ok.
Dank dir für die Antwort :)
Noch eine Frage...
Woran liegt es das der eine Sensor deutlich mehr anzeigt als der andere? Ich hab schon geguckt das so gut wie keine Sachen usw. in der Nähe sind.
Und kann man das Problem eventuell so lösen, dass man den Controller am Anfang des Programmes 10 Werte von jedem Sensor einlesen lässt, daraus bildet er dann einen Mittelwert und speichert den Mittelwert jedes Sensors ab und zieht diesen Mittelwert von den neuen Messergebnissen ab um dann festzustellen ob die Wärmequelle mehr links oder mehr rechts ist?
Weil ich würde damit eine Wärmeortung bauen wollen und da ist es doof wenn der eine Sensor deutlich mehr anzeigt als der andere, obwohl nichts in der Nähe ist.
Danke für die Antwort!
radbruch
11.01.2012, 23:44
Hallo
Fertigbausatz? Wenn's ein Bausatz war: Bauteile und Lötstellen kontrollieren. Testweise könntest du mal die ADCs tauschen. Hast du die Spannungen an den ADC-Pins schon mit einem Messgerät nachgemessen? Vielleicht ist es ein Problem des ADCs beim Umschalten des Kanals.
Da ich mein SnakeVision schon lange nicht mehr verwendet habe kann ich mich nicht mehr erinnern, wie sysmetrisch die Werte bei mir waren. Aber ein Blick in meine alten Programme zeigt erstaunliches:
// Teelichtlöschen mit SnakeVision 18.4.10 mic
#include "asuro-probot.h"
// Code für das SnakeVision stammt von hier:
// *******************************************
// * Snakevision für ASURO *
// * Verfolgt eine Wärmequelle *
// * *
// * *
// * *
// * *
// * (c) 2007 Robin Gruber *
// * Details zum Code in: *
// * "Mehr Spaß mit ASURO, Band II" *
// *******************************************
void SnakeData(unsigned int *data)
{
// ThermalData() funktioniert genauso, wie LineData(), ...
// ... nur dass dabei die interne Spannungsreferenz als ...
// ... AD-Wandlerreferenz verwendet wird.
// Prozessorinterne Referenz verwenden
// Multiplexer auf linken Sensor schalten
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
// Wandlung starten
ADCSRA |= (1 << ADSC);
// Warten, bis Wandlung beendet
while (!(ADCSRA & (1 << ADIF)));
// ADCIF zurücksetzen
ADCSRA |= (1 << ADIF);
// ADC-Wert auslesen
data[0] = ADCL + (ADCH << 8);
// Prozessorinterne Referenz verwenden
// Multiplexer auf rechten Sensor schalten
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
// Wandlung starten
ADCSRA |= (1 << ADSC);
// Warten, bis Wandlung beendet
while (!(ADCSRA & (1 << ADIF)));
// ADCIF zurücksetzen
ADCSRA |= (1 << ADIF);
// ADC-Wert auslesen
data[1] = ADCL + (ADCH << 8)-100; // Korrektur der Seiten!
}
int main(void)
{
unsigned int data[2];
Init();
while(1)
{
SnakeData(data);
if(data[0]>data[1]) // Werte werden beim Einlesen korrigiert!
{
MotorDir(RWD,FWD);
MotorSpeed(150,150);
}
else
{
MotorDir(FWD, RWD);
MotorSpeed(150, 150);
}
PrintInt(data[0]);
SerPrint("-");
PrintInt(data[1]);
SerPrint("\n\r");
//Beep(300);
Msleep(300);
}
}Das sind die orginalen Kommentare. Vermutlich gibt es deshalb die Kalibrierfunktion die ich allerdings noch nie genauer untersucht habe.
Gruß
mic
Ja es ist ein Fertigbausatz.
Ich hab da gestern direkt mal drüber geguckt und die Lötstellen sehen alle sehr gut aus. Ich denke also nicht das es daran liegt. Um Probleme beim Umschalten des ADC-Kanals zu vermeiden habe ich nach jedem auslesen eine 200ms Pause eingebaut. Aber das mit dem Nachmessen werde ich trotzdem mal machen.
Würde die Kalibrierung wie ich sie oben im groben beschrieben habe so überhaupt funktionieren bzw. Sinn machen?
radbruch
12.01.2012, 00:00
Besser als die Pause wäre ein zweimaliges Einlesen des selben Kanals und nur das zweite Ergebnisse zu verwenden. Die orginale Funktion verwendet offensichtlich die interne Spannungsreferenz zur Erhöhung der Genauigkeit und der Reproduzierbarkeit der Messungen.
Ich vermute, beim Kallibrieren wird lediglich der Unterschied zwischen den Seiten zur Kalibrierzeit ermittelt und bei allen weiteren Messungen eingerechnet.
Gruß
mic
Ich hab mir gerade dein Programm angeguckt. Du hast in der Routine die den rechten Sensor ausließt eine Korrektur von -100 drin. Scheint also das bei dir auch so ein großer Unterschied zwischen den Werten vorhanden war ;)
Was ich gerade mal gesehen habe. Wenn du dir dieses PDF mit dem Schaltplan der Platine anschaust
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/191374-as-01-de-ASURO_SNAKE_VISION_fuer_ARX_03.pdf
siehst du das der OPV von Sensor 2 eine andere Verstärkung hat als der von Sensor 1. Einmal sind da 1MOhm und 15Ohm in Reihe und das andere mal 1MOhm und 10Ohm. Könnte dies das Problem mit den unterschiedlichen Werten verursachen? Und wenn ja wieso wurde das so gemacht?
Hab es mal ausgerechnet. Beim oberen OPV ist V = 100.001 und beim unteren V = 62.500,93.
radbruch
12.01.2012, 12:22
Hallo
Bei Fragen zu OPV muss ich leider passen. Die unterschiedliche Beschaltung der Kanäle scheint mir auch verdächtig, aber ich mag mich eigentlich nicht tiefer einlesen:
http://www.soselectronic.de/a_info/resource/c/lin/LTC1051.pdf
Mein SnakeVision (Fertiggerät) wurde so bestückt:
R1 - 1M bnswgn (300k)
R2 - 10 bnswsw (7r5)
R3 - 1M brswgn (1M)
R4 - 100 bnswbn (10)
R5 - 1M bnswgn (1M)
R6 - 100 bnswbn (15)
R7 - 20k rtswor (20k)
R8 - 20k rtswor (20k)
http://www.dieelektronikerseite.de/Tools/Widerstandsrechner.htm
Wie vermutet speichert die Kalibrierfunktion bei Tastendruck die aktuellen Werte als Offset und rechnet diese Werte bei den weiteren Messungen mit ein:
...
Init();
// Port D, Pin 6 (die ehemalige Front-LED), auf Eingang ...
// ... schalten und den Pullup aktivieren.
DDRD&=~(1<<6);
PORTD|=(1<<6);
// Motoren immer auf rückwärts
MotorDir(RWD,RWD);
// Offset mit null initialisieren
offset[0]=0;
offset[1]=0;
while(1)
{
// Messwerte einlesen
ThermalData(tdata);
// Wenn Knopf gedrückt, aktuellen Wert als Offset speichern
if ((PIND&(1<<6))==0) {
offset[0]=tdata[0];
offset[1]=tdata[1];
}
// Offset abziehen, aber nur, wenn der Messwert groß ...
// ... genug ist
if (tdata[0]>offset[0]) tdata[0]-=offset[0]; else tdata[0]=0;
if (tdata[1]>offset[1]) tdata[1]-=offset[1]; else tdata[1]=0;
// Die Summe der Werte wird für die Berechnung der ...
// ... Geschwindigkeit genutzt
sum=tdata[0]+tdata[1];
// Signal stark genug?
...
(Aus Weglaufen.c (http://arexx.com/downloads/asuro/ASURO_Programme_Band1_2.zip) der SnakeVision-Beispielprogramme)
Gruß
mic
Ich schau mal heute Mittag nach wie mein Snake Vision bestückt ist. Würde mich nicht überraschen wenn dort auch zwei verschiedene Verstärkungen erzeugt werden. Falls das so ist guck ich mal ob ich die Widerstände beide gleich mache und teste es dann nochmal.
Weil für mich ergibt das keinen Sinn. Warum soll ich unterschiedliche Verstärkungen in Kauf nehmen womit dann zwei Unterschiedliche Ergebnisse raus kommen und dann muss ich diese Differenz mittels Software korrigieren.
Wenn ich jetzt mal meine, anhand des Schaltplanes, ausgerechneten Verstärkungen zu Grunde lege und eine Eingangsspannung von 5mV habe dann kommen da zwei Spannungswerte von 500,005 und 312,5 raus. Und da sieht man ja auch eine starke Differenz von fast 200 die man korrigieren muss und das obwohl die Sensoren beide (theoretisch) den selben Wert ausgeben.
Besserwessi
12.01.2012, 17:47
Ich glaube auch nicht das die beiden Kanäle da absichtlich anders bestückt sind. Eher ist der Schaltplan eine Mischung aus 2 unterschiedlich alten Hardwareversionen. Nach dem Plant ist ein bisschen Offset auch direkt eingebaut (für den Fall das der Sensor Wärmer ist als die Umgebung), aber halt gleich für beide Kanäle.
Die im Plan genanten Verstärker können schon bis zu 5 µV Offset haben. Mit einer 100000 fachen Verstärkung wären das 500 mV am Ausgang, also schon eine ganze Menge. Bei 5 V für ARef. wären das bis zu 100 bei ADC wert. Die genannte Differenz liegt also noch im Rahmen der Toleranzen der OPs. Auch mit der geringeren Verstärkung entsprechend der Abgelesenen Wert bleibt an recht großer Unterschied möglich.
Ja hab es gerade auch nochmal nachgeschaut. Der Plan ist nicht aktuell aber die Widerstände für die Verstärkung sind gleich.
Hab jetzt auch eine Softwareseitige Korrektur eingefügt und nun klappt es wie es soll.
Danke nochmals für die Hilfe!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.