PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR_bake_2_0_signal_verstärken



inka
02.01.2015, 15:08
hallo allerseits,

ich habe eine andere, microprozessor unterstützte bake angefangen, verwendet wird der arduino mega 2560, das ganze sieht so aus:
29576


als software wird dieser code verwendet:

/* 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:
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:
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...

Besserwessi
02.01.2015, 16:42
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.

inka
02.01.2015, 17:43
habe vergessen anzugeben - der transistor ist ein 2N2222

Besserwessi
02.01.2015, 18:46
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.

inka
03.01.2015, 09:49
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?


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...


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...


Die Spannung an der Basis sollte per Spannungsteiler auf z.B. 1,5 V reduziert sein. ok


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:

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?

Besserwessi
03.01.2015, 14:26
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.

inka
11.01.2015, 13:34
ich hab jetzt mal alles in eine neue version des stromlaufplns eingearbeitet:
29608

aus dem hier werde ich nicht schlau:

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?



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:


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?

Besserwessi
11.01.2015, 16:58
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.

inka
25.01.2015, 15:39
hier (https://www.roboternetz.de/community/threads/63467-IR-bake?p=611322&viewfull=1#post611322) geht es weiter...