- 12V Akku mit 280 Ah bauen    Werbung      
Ergebnis 1 bis 10 von 16

Thema: Problem mit Snake Vision

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    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:

    Code:
    // 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
    Geändert von radbruch (11.01.2012 um 22:52 Uhr) Grund: Omniwheelcode entfernt
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    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?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    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
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    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 Bild  
    Was ich gerade mal gesehen habe. Wenn du dir dieses PDF mit dem Schaltplan der Platine anschaust

    http://www.produktinfo.conrad.com/da...uer_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.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    63
    Beiträge
    5.799
    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/r...in/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/T...ndsrechner.htm

    Wie vermutet speichert die Kalibrierfunktion bei Tastendruck die aktuellen Werte als Offset und rechnet diese Werte bei den weiteren Messungen mit ein:
    Code:
    ...
        	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 der SnakeVision-Beispielprogramme)

    Gruß

    mic
    Geändert von radbruch (12.01.2012 um 11:53 Uhr)
    Bild  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    36
    Beiträge
    3.501
    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.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

Ähnliche Themen

  1. Antworten: 82
    Letzter Beitrag: 25.08.2012, 18:52
  2. Projekt: RP6 mit Snake Vision
    Von Thund3r im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 21.09.2011, 19:58
  3. Snake Vision
    Von Mangoon im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 12.05.2010, 17:51
  4. Snake Vision will nicht.
    Von Obi-Wan1234 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 18.06.2008, 13:19
  5. Problem 1 mit Snake-Vision
    Von Danjo00 im Forum Asuro
    Antworten: 45
    Letzter Beitrag: 03.03.2008, 12:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      LiFePO4 Speicher Test