-         

Ergebnis 1 bis 9 von 9

Thema: IR_bake_2_0_signal_verstärken

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344

    IR_bake_2_0_signal_verstärken

    Anzeige

    hallo allerseits,

    ich habe eine andere, microprozessor unterstützte bake angefangen, verwendet wird der arduino mega 2560, das ganze sieht so aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	2015_01_02_breadbord_mit_verstaerker.jpg
Hits:	27
Größe:	50,8 KB
ID:	29576


    als software wird dieser code verwendet:
    Code:
    /* Code to pulse pin 3 with a modulated signal
    * Can be used to drive an IR LED to keep a TSOP IR reciever happy
    * This allows you to use a modulated reciever and a continious beam detector
    * By Mike Cook Nov 2011 - Released under the Open Source licence
    */
     volatile byte pulse = 0;
     int i, j, x, y;
    
    ISR(TIMER2_COMPB_vect)
    {  // Interrupt service routine to pulse the modulated pin 3
        pulse++;
      if(pulse >= 8) 
      { // change number for number of modulation cycles in a pulse
        pulse =0;
        TCCR2A ^= _BV(COM2B1); // toggle pin 3 enable, turning the pin on and off
      }
    }
    
    void setIrModOutput()
    {  // sets pin 3 going at the IR modulation rate
      pinMode(3, OUTPUT);
      TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
      TCCR2B = _BV(WGM22) | _BV(CS22);
      OCR2A = 54; // defines the frequency 51 = 38.4 KHz, 54 = 36.2 KHz, 58 = 34 KHz, 62 = 32 KHz
      OCR2B = 27;  // deines the duty cycle - Half the OCR2A value for 50%
      TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
    }
    
    void setup()
    {
      setIrModOutput();
      TIMSK2 = _BV(OCIE2B); // Output Compare Match B Interrupt Enable
     pinMode(13, OUTPUT);
     pinMode(12, OUTPUT);
     //pinMode(4, OUTPUT);
     //pinMode(5, OUTPUT);
     Serial.begin(9600);
    }
    
    void loop()
    {
    
      digitalWrite(13, HIGH); // Port 13 wird high geschaltet
      digitalWrite(12, HIGH);
      delay(165);//165-165=2hz, 215/165=3hz
      digitalWrite(13, LOW); // Port 13 wird low geschaltet
      digitalWrite(12, LOW);
      delay(165);
      
      /*
      analogWrite(4, HIGH); // Port 13 wird high geschaltet
      analogWrite(5, HIGH);
      delay(165);
      analogWrite(4, LOW); // Port 13 wird low geschaltet
      analogWrite(5, LOW);
      delay(165);
      */
    }
    im ersten teil wird das signal auf 36kHz moduliert, im zweiten kann die blinkfrequenz eingestellt werden, momentan sind es ca. 3Hz...

    der stromlaufplan sieht so aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IR_bake_2_0_schaltplan.jpg
Hits:	22
Größe:	50,4 KB
ID:	29577
    die IR-diode ist jetzt (nach mehreren versuchen) ohne vorwiderstand aufgebaut, weil sie durch den blinkbetrieb nicht zu hoch belastet wird

    der aufbau mit fritzing sieht so aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IR_bake_2_0_aufbau.jpg
Hits:	18
Größe:	113,0 KB
ID:	29578
    als spannungsquelle dienen 4 AA /2500mAh accus, angeschlossen an Vin und GND

    nun wird das signal zwar verstärkt (und auch der empfang am RP6 klappt tadellos), allerdings ist die verstärkung nicht groß genug, die reichweite beträgt knapp 40cm. Ich möchte jetzt nicht unbedingt der arduino schrotten, deshalb die frage - wie kann ich das ändern? Eine reichweite von 4-5 metern wäre wünschenswert...

    wäre für jeden tipp dankbar...
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Versrogung für die IR Diode sollte man zusätzlich auf dem Steckbrett puffern: also einen eher kleinen Widerstand (z.B. 2-10 Ohm) von den 5 V (oder besser gleich direkt von den Akkus), dann ein etwa 100-470 µF Low ESR Elko nach GND und dann erst die IR LED. Die Intensität wird damit nicht so leicht durch eine schwache Versorgung oder Widerstände der Zuleitungen beeinflusst. Vor allem verhindert es Störungen von den IR LEDs zur Schaltung.

    Bei 5-6 V könnte man 2 IR LEDs in Reihe schalten

    Die direkte Ansteuerung ohne Vorwiderstand, nur mit der Strombegrenzung über den Basisstrom kann man für ein Einzelstück eventuell noch machen. Man sollte aber den Transistor ausmessen und ausreichend Kühlen, weil der Strom bei heißem Transistor leicht zunimmt. Der Strom ließe sich über den Basis Widerstand anpassen. Der gezeigte Transistor ist eventuell etwas klein. Ggf. ist die IR Diode oder der Transistor auch schon durch Überstrom geschädigt.
    Besser wäre ein Widerstand (z.B. 2-4 Ohm) am Emitter zur Strombegrenzung. Die Spannung an der Basis sollte per Spannungsteiler auf z.B. 1,5 V reduziert sein.

    Am besten reduziert man auch noch das Tastverhältnis etwas aus z.B. 25%. Das gibt zwar erst einmal etwa 30% weniger Intensität, erlaubt aber den fast doppelten Strom und damit etwa 30% mehr Intensität. Bei 25% Tastverhältnis darf der Strom für die üblichen IR LEDs bis etwa 400 mA hoch gehen, zumal ja noch die 2. Modulation mit je 8 Zyklen an / aus drauf ist. Bei der Zahl der Zyklen je Puls könnte man auch noch auf etwa 10 oder 12 hoch gehen - je nach Empfänger bringt das noch ein bisschen.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    habe vergessen anzugeben - der transistor ist ein 2N2222
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der 2N2222 hat eine Verstärkung zwischen etwa 30 und 300. Mit etwa 4 mA Basisstrom gibt das zwischen 120 mA und 1,2 A - ganz so schlimm wird es nicht werden, aber über 500 mA könnten es schon werden. So ganz schlecht ist der Transistor nicht gewählt, aber bei Begrenzung nur über den Basis-Widerstand müsste man dan schon an den individuellen Stromverstärkungsfaktor anpassen. Also den Strom messen und den Widerstand verkleinern, wenn der Strom noch nicht zu hoch ist. Dabei muss man aufpassen: beim Programm oben brennt die LED schon nur etwa 1/4 der Zeit, beim reduzierten Tastverhältnis sogar nur etwa 1/8.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    der eigentliche hintergrund meiner ursprünglichen frage war ob z.b. der pin12 gefährdet ist wenn ich an dem basiswiderstand des Q1 herumbastle. Die 40mA max.- können die dabei überschritten werden?

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Die Versrogung für die IR Diode sollte man zusätzlich auf dem Steckbrett puffern: also einen eher kleinen Widerstand (z.B. 2-10 Ohm) von den 5 V (oder besser gleich direkt von den Akkus), dann ein etwa 100-470 µF Low ESR Elko nach GND und dann erst die IR LED.
    ok...

    die getrennte versorgung des arduino und der IR ist eine gute idee, dann würde ich auf 6xAA gehen, per Vin kann ich ja bis 12V einspeisen...

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Bei 5-6 V könnte man 2 IR LEDs in Reihe schalten.
    Da habe ich schon bei der analogen bake die erfahrung gemacht, dass ich mit diode + vorwiderstand flexibler bin...

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Die Spannung an der Basis sollte per Spannungsteiler auf z.B. 1,5 V reduziert sein.
    ok

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Am besten reduziert man auch noch das Tastverhältnis etwas aus z.B. 25%.
    meinst Du damit das tastverhältnis der 36kHz oder die an- und abschaltzeiten für die IR-LED?

    wenn wir schon beim code sind:
    Code:
    void setIrModOutput()
    {  // sets pin 3 going at the IR modulation rate
      pinMode(3, OUTPUT);
      TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
    ich verstehe hier eines nicht: hier wird von pin3 und 11 gesprochen - die kommen doch im folgenden code garnicht mehr vor?
    gruß inka

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das Testverhältnis von 25% bezieht sich auf die 36 kHz, also im Code den Wert in OCR2B anpassen (ob kleiner oder größer müsste man noch kontrollieren) . Man könnte aber auch bei der Modulationsstufe darüber also die abwechselnd 8 Perioden PWM oder aus auf ein kleineres Tastverhältnis gehen - das ist dann mehr ein Frage von Strom sparen, was mit Batterien ja nicht so falsch ist.

    Den Basiswiderstand kann man schon noch kleiner machen. Mit dem 1 K Widerstand kommt man auf gut 4 mA an Strom vom IO Pin. Bis etwa 20 mA kann man da gehen - viel mehr liefert der IO Pin ggf. nicht einmal. Eine Möglichkeit für die Ausgangsstufe wären z.B. 1,5 bis 2 Ohm am Emitter. Und je 270 Ohm vom IO Pin zur Basis und der Basis nach GND.

    Direkt von den Batterien hätte ggf. Vorteile, wenn man dadurch eine LED mehr nutzen kann und weniger Störungen zum µC kommen. Auf den Extra Elko sollte man aber trotzdem nicht verzichten. Der darf auch größer werden.

    Für erste Test ist der Arduino ggf. noch OK, später würde auch eine Tiny13 als IC ausreichen.

    Der Pin 3 sollte sich auf den Anschluss des Arduino beziehen. Pin 11 könnte der Pin für das 2. PWM Signal von Timer2 sein, der hier nicht genutzt wird.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    ich hab jetzt mal alles in eine neue version des stromlaufplns eingearbeitet:
    Klicke auf die Grafik für eine größere Ansicht

Name:	2015_01_11_ir_bake_2_0.jpg
Hits:	10
Größe:	33,5 KB
ID:	29608

    aus dem hier werde ich nicht schlau:
    Zitat Zitat von Besserwessi Beitrag anzeigen
    Den Basiswiderstand kann man schon noch kleiner machen. Mit dem 1 K Widerstand kommt man auf gut 4 mA an Strom vom IO Pin. Bis etwa 20 mA kann man da gehen - viel mehr liefert der IO Pin ggf. nicht einmal. Eine Möglichkeit für die Ausgangsstufe wären z.B. 1,5 bis 2 Ohm am Emitter. Und je 270 Ohm vom IO Pin zur Basis und der Basis nach GND.
    der 270 ohm widerstand zwischen basis und GND, ok, aber der andere 270? Da habe ich doch den spannungsteiler und die 47 ohm?


    Zitat Zitat von Besserwessi Beitrag anzeigen
    Der Pin 3 sollte sich auf den Anschluss des Arduino beziehen. Pin 11 könnte der Pin für das 2. PWM Signal von Timer2 sein, der hier nicht genutzt wird.
    hier muss ich noch einmal nachhaken, damit ich das verstehe. in dem code für den timer wird der pin3 so definiert:

    Code:
    pinMode(3, OUTPUT);   
    TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
    der output Pin3 wird aber nicht verwendet (ist nicht angeschlossen), trotzdem funktioniert die 36kHz modulation, wieso?
    gruß inka

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wie die Pins des µC beim Arduino nach außen gehen, weiss ich nicht. Das Signal sollte jeden falls am Ausgang OC2B = PortH.6 = im TQFP Pin 18 des µC anliegen.

    Der Schaltplan so wie gezeichnet kommt noch nicht ganz hin - hilft aber als Ausgangspunkt:
    Die Widerstände R4 und R7 können ganz entfallen. R6 sollte man durch 0 Ohm ersetzen.
    R1 kann man ggf. später noch überbrücken für noch mehr Strom. Sonst könnte man den Widerstand auch mit R5 zusammenfassen (wären dann die anderen 270 Ohm).

    R3 könnte wohl noch etwas größer, damit die Sichbare LED nicht zu hell wird.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hier geht es weiter...
    gruß inka

Berechtigungen

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