Ergebnis 1 bis 3 von 3

Thema: Frage zur Funktionsweise eines Anti Collision System (mit Infrarot)

  1. #1

    Frage zur Funktionsweise eines Anti Collision System (mit Infrarot)

    Hallo, ich hab eine Verständnis Frage zu dem ACS des RP6.

    Das ACS besteht aus einem IR Empfänger und 2 IR LEDs.Klicke auf die Grafik für eine größere Ansicht

Name:	desktop.jpg
Hits:	8
Größe:	12,6 KB
ID:	22489

    Woran erkennt jetzt der IR Empfänger von welcher IR LED der Strahl reflektiert wird?
    Liegt es an der Frequenz oder an etwas anderem?

    Schon mal Danke für Antworten.

  2. #2
    RN-Premium User Robotik Visionär Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung/Bayern
    Alter
    61
    Beiträge
    9.089
    Hallo!

    Zitat Zitat von emty Beitrag anzeigen
    Woran erkennt jetzt der IR Empfänger von welcher IR LED der Strahl reflektiert wird?
    Am einfachsten wäre, falls möglich, die IR LED's abwechselnd einschalten.
    Geändert von PICture (05.06.2012 um 16:51 Uhr)
    MfG
    Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) Entwickler braucht Träume, aber Träumer nix reales entwickeln. Entwickeln = bekanntes ausnutzen und Glück hat nur der Suchende. Ich könnte nur bei für mich verständlichem Problem helfen ! (Ich)

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    50
    Beiträge
    5.491
    Blog-Einträge
    8
    Hallo

    Ein Blick in den Schaltplan (Seite 2) der Base offenbart es:



    Die ACS-LEDs können getrennt angesteuert werden:
    Code:
    /**
     * Disables the ACS task.
     * ACS and IRCOMM Transmissions/Receptions will not work anymore.
     */
    void disableACS(void)
    {
    	acs_state = ACS_STATE_IDLE;
    	TIMSK &= ~(1 << OCIE2);
    	IRCOMM_OFF();
    	PORTB |= ACS_L;
    	PORTC |= ACS_R;
    	obstacle_right = false;
    	obstacle_left = false;
    }
    
    /**
     * Enables the ACS task.
     */
    void enableACS(void)
    {
    	TIMSK &= ~(1 << OCIE2);
    	IRCOMM_OFF();
    	PORTB |= ACS_L;
    	PORTC |= ACS_R;
    	obstacle_right = false;
    	obstacle_left = false;
    	acs_state = ACS_STATE_IRCOMM_DELAY;
    }
    
    /**
     * Turn ACS Power off.
     *
     * Example:
     *
     *			setACSPwrOff();
     *
     */
    void setACSPwrOff(void)
    {
    	DDRD &= ~ACS_PWR;
    	PORTD &= ~ACS_PWR;
    	DDRB &= ~ACS_PWRH;
    	PORTB &= ~ACS_PWRH;
    	PORTB &= ~ACS_L;
    	PORTC &= ~ACS_R;
    }
    
    /**
     * Set ACS Power low.
     *
     * Example:
     *
     *			setACSPwrLow();
     *
     */
    void setACSPwrLow(void)
    {
    	DDRD |= ACS_PWR;
    	PORTD |= ACS_PWR;
    	DDRB &= ~ACS_PWRH;
    	PORTB &= ~ACS_PWRH;
    }
    
    /**
     * Set ACS Power medium.
     *
     * Example:
     *
     *			setACSPwrMed();
     *
     */
    void setACSPwrMed(void)
    {
    	DDRD &= ~ACS_PWR;
    	PORTD &= ~ACS_PWR;
    	DDRB |= ACS_PWRH;
    	PORTB |= ACS_PWRH;
    }
    
    /**
     * Set ACS Power high.
     *
     * Example:
     *
     *			setACSPwrHigh();
     *
     */
    void setACSPwrHigh(void)
    {
    	DDRD |= ACS_PWR;
    	PORTD |= ACS_PWR;
    	DDRB |= ACS_PWRH;
    	PORTB |= ACS_PWRH;
    }
    (Aus RP6RobotBaseLib.c)

    Mit ACS_PWR und ACS_PWRH kann man R8 und R9 in unterschiedlichen Kombinationen ansteuern und so den Strom durch die ACS-LEDs und die Leuchtstärke beeinflußen.

    Gruß

    mic


    [Edit]

    Ach ja, ganz vergessen, die Kathoden liegen an ACS_L/ACS_R. Die Leds leuchten, wenn sie auf low liegen und über R8/9 ein high ausgegeben wird:


    [Noch ein Edit]
    Bei der Suche nach dem Urheber der 36kHz-Trägerfrequenz für das ACS habe ich die getrennte Ansteuerung der ACS-LEDs gefunden:

    Code:
    // -------------------------------
    
    /**
     * Timer 2 Compare ISR
     * ACS & IRCOMM
     *
     * WARNING: DO NOT CHANGE THIS!
     * NEVER try to control the IRCOMM by your own routines if you do not
     * know what you are doing!
     *
     */
    ISR (TIMER2_COMP_vect)
    {
    	static uint8_t ircomm_pulse;
    	if(acs_state < 2) { // If ACS is not active, perform IRCOMM transmissions
    		if(ircomm_pulse) { // Do we have IR pulses to send?
    			if(ircomm_pulse < 60) { // Bi-Phase encoding...
    				if(ircomm_data & 0x4000) // check current bit
    					PORTD ^= (1<<PIND7); // Toggle IRCOMM port
    				else
    					PORTD &= ~(1<<PIND7); // deactivate IRCOMM port
    			}
    			else if(ircomm_data & 0x4000) // The same as above, but the other way round:
    				PORTD &= ~(1<<PIND7); // deactivate IRCOMM port
    			else
    				PORTD ^= (1<<PIND7); // Toggle IRCOMM port
    			ircomm_pulse--;
    		}
    		else if(ircomm_send) { // Do we still have data?
    			PORTD &= ~(1<<PIND7);
    			ircomm_data <<= 1; // Next Bit!
    			ircomm_pulse = 120;
    			ircomm_send--;
    		}
    		else 
    			PORTD &= ~(1<<PIND7); // no more pulses - IR LEDs off!
    	}
    	else if(acs_pulse) { // Send ACS IR pulses?
    		if(sysStatACS.channel == ACS_CHANNEL_LEFT) // which channel?
    			PORTB ^= ACS_L; 
    		else 			
    			PORTC ^= ACS_R; 
    		acs_pulse--;
    	}
    	else { // no more pulses - IR LEDs off!
    		PORTB |= ACS_L;
    		PORTC |= ACS_R;
    	}
    }
    (Ebenfalls aus RP6RobotBaseLib.c)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken rp6_acs_detail.png   rp6_acs_detail2.png  
    Geändert von radbruch (05.06.2012 um 17:28 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Funktionsweise eines brushless Motors
    Von sky2 im Forum Motoren
    Antworten: 5
    Letzter Beitrag: 24.12.2008, 09:09
  2. IS471F Infrarotsensor? Frage zu funktionsweise...
    Von -C3P0- im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 24.07.2007, 13:44
  3. Roboter Sicherheit bzw. Funktionsweise eines Kleberoboters
    Von Surfacing im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 8
    Letzter Beitrag: 01.06.2007, 13:19
  4. Funktionsweise eines Bootloaders
    Von Zeroeightfifteen im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 21.03.2007, 20:44
  5. Verständnisprobleme über die Funktionsweise eines Interrupts
    Von electrofux im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.10.2006, 16:14

Berechtigungen

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