Forum: Mikrocontroller und Digitale Elektronik Problem: Pulsstrom bei AVR (ATmega328) Unterschied zu Arduino?


von Jannai F. (ein_geweihter)


Lesenswert?

Hallo,

ich bin bei meinem aktuellen Projekt auf ein Problem gestoßen, trotz 
einiger Stunden des ausprobierens komme ich auf keine Lösung und möchte 
euch um eure Hilfe bitten:

Das Projekt:
Für einen Wohnzimmertisch sollen mehrere "interaktive" Licht-Module 
verbaut werden, die die Bewegung einer Hand usw. erkennen und 
entsprechend LEDs faden. Jedes Modul besteht aus 1 x ATmega368 und 6 
IR/LED-Pixeln
Prinzip: der Controller schaltet einen Transistor, der einen hohen Strom 
durch 3 IR-Dioden jagt. Ein Fototransistor misst die Helligkeit, über 
einen Spannungsteiler bekomt der Controller ein analogwert.
Nun schaltet der Transistor die IR-Dioden aus, der µC misst erneut die 
Spannung am Fototransistor und vergleicht sie mit der vorherigen.
Besteht eine Differenz wird sie in einen pwm-Wert umgerechnet und an 
eine LED ausgegeben.
Ich habe den gesammten Aufbau mit einem Arduino getestet, alles 
funktionierte einwandfrei.

Aus Kostengründen wollte ich in meinen Wohnzimmertisch nicht 10 Arduinos 
verbauen, deshalb entschied ich mich für einen standalone-ATmega328, den 
ich (weil ich damit leichter arbeiten kann) einen 8Mhz-Arduino 
bootloader verpasste.


Das Problem:
Wenn ich in der Standalone-Version die IR-LEDs wie vorher beim Arduino 
verschalte, dann macht der ATmega nichts mehr.
Schaltung: Transistor (2N3904) C an +5V, B über 220Ohm an µC, E an drei 
parallele IR-LEDs (TSHA5202), die über 1 Ohm an GND.
Diese Version macht beim Arduino keine Probleme.
Durch die IR-Dioden fließt ein Stom von je etwa 1 A, laut Datenblatt 
können die das für 1ms ab.

Tausche ich diese Konfiguration an den Stand-alone ATmega, dann reagiert 
die LED nicht mehr auf Annäherung.
Setze ich in den IR-Kreis einen 330 Ohm Widerstand ein, dann 
funktioniert alles wunderbar, nur dass eben die Reichweite durch die 
geringere IR-Helligkeit extrem leidet.
Schließe ich diesen R während des Betriebs kurz (als wäre er nicht da), 
dann "friert" der µC ein, d.h. wenn die gefadete LED leuchtete dann 
behält sie diese Helligkeit bei, verändert sie aber nicht mehr. 
Unterbinde ich diesen Kurzschluss, dann gehts normal weiter, ohne dass 
ein Reset nötig wäre.

Ich verwende eine externe Spannungsquelle mit Elko, der Stomstoß sollte 
kein Problem machen.
Und ich möchte nochmal betonen, dass ich NICHT versuche 3 A durch den 
ATmega zu jagen, der dient nur als I/O-Geber für den Transistor.


Wisst ihr woran es liegen könnte? Einfach einen Widerstand akzeptieren 
fällt aus, da die Reichweite sehr leidet.



Anbei die Quellen, aus denen das Projekt entstanden ist:
Prinzip:
http://www.instructables.com/id/Make-an-Attiny13-based-IR-proximity-sensor-for-2/?ALLSTEPS
http://www.instructables.com/id/Infrared-Proximity-Sensing-Coffee-Table-Module/?ALLSTEPS
ATmega328 Standalone
http://www.instructables.com/file/FP6AIB0H0OIZC72

von Thomas E. (thomase)


Lesenswert?

Jannai Flaschberger schrieb:
> Schaltung: Transistor (2N3904) C an +5V, B über 220Ohm an µC, E an drei
> parallele IR-LEDs (TSHA5202), die über 1 Ohm an GND.
1. Solltest du deinen Transistor in Kollektorschaltung betreiben

Jannai Flaschberger schrieb:
> Durch die IR-Dioden fließt ein Stom von je etwa 1 A, laut Datenblatt
> können die das für 1ms ab.
2. Kann der verwendete Transistor nur 200mA ab

Jannai Flaschberger schrieb:
> ich (weil ich damit leichter arbeiten kann) einen 8Mhz-Arduino
> bootloader verpasste
3. Sind alle Zeiten gegenüber dem 16MHz Arduino doppelt so lang. Oder 
hast du das geändert?

Jannai Flaschberger schrieb:
> Ich verwende eine externe Spannungsquelle mit Elko, der Stomstoß sollte
> kein Problem machen.
4. IST kein Problem wäre eine Aussage. SOLLTE nur eine Vermutung, die 
sich angesichts längerer Einschaltzeiten erst noch beweisen muß.

Wenn etwas nicht funktioniert, liegt es sehr oft an dem, was man auf 
jeden Fall ausschliessen kann.

mfg.

von Tom M. (Gast)


Lesenswert?

Jannai Flaschberger schrieb:
> Das Problem:
> Wenn ich in der Standalone-Version die IR-LEDs wie vorher beim Arduino
> verschalte, dann macht der ATmega nichts mehr.

Und wie ist dein "Standalone" AVR beschaltet? Bricht dem die Spannung 
weg, wenn du die IR Leds befeuerst?

von Hubert G. (hubertg)


Lesenswert?

Das durch eine 2N3904 1A fließen halte ich für ein Gerücht. Lt. 
Datenblatt Ic max 200mA.
Zu anderen, ein Bild (Schaltbild)sagt mehr als viele Worte. Aber so wie 
du es tatsächlich gemacht hast.

von Falk B. (falk)


Lesenswert?

@  Jannai Flaschberger (ein_geweihter)

>Schaltung: Transistor (2N3904) C an +5V, B über 220Ohm an µC, E an drei
>parallele IR-LEDs (TSHA5202), die über 1 Ohm an GND.

Eine Kollektorschaltung, wobei der Basiswiderstand hier eher 
hinderlich bis falsch ist.

>Durch die IR-Dioden fließt ein Stom von je etwa 1 A,

Mit dem Oszi gemessen? 3A sind für einen 2N3904 nicht wirklich drin, der 
ist für 200mA DC ausgelegt, der schafft vielleicht 1A Puls. Dazu braucht 
er aber auch eher 50mA Basisstrom oder mehr.

>Setze ich in den IR-Kreis einen 330 Ohm Widerstand ein,

Wo? zwischen Basis und uC?

>funktioniert alles wunderbar, nur dass eben die Reichweite durch die
>geringere IR-Helligkeit extrem leidet.

>Schließe ich diesen R während des Betriebs kurz (als wäre er nicht da),
>dann "friert" der µC ein, d.h. wenn die gefadete LED leuchtete dann
>behält sie diese Helligkeit bei, verändert sie aber nicht mehr.
>Unterbinde ich diesen Kurzschluss, dann gehts normal weiter, ohne dass
>ein Reset nötig wäre.

Komisch.

>Ich verwende eine externe Spannungsquelle mit Elko, der Stomstoß sollte
>kein Problem machen.

WO sitzt der Elko? Nah am AVR, sagen wir 5cm? OK. Weiter weg? nicht gut. 
Hast du 100nF Keramik am AVR?

>Und ich möchte nochmal betonen, dass ich NICHT versuche 3 A durch den
>ATmega zu jagen, der dient nur als I/O-Geber für den Transistor.

Schon klar. Aber kann dein Transistor 3A? Ach so. Am Arduino geht es ja.

>Wisst ihr woran es liegen könnte? Einfach einen Widerstand akzeptieren
>fällt aus, da die Reichweite sehr leidet.

Klingt so, als ob der Pulsstrom von der Versorgung nicht geliefert 
werden kann, eben weil der Elko zu weit weg ist. Die Zuleitung hat 
zuviel Induktivität.

>http://www.instructables.com/id/Make-an-Attiny13-b...

Fetter Fehler im Schaltplan. Der 2N3904 in Emitterschaltung hat keinen 
Basiswiderstand. Ausserdem werden die IR-Leds dort mit deutlich weniger 
Strom betrieben.

von Jannai F. (ein_geweihter)


Lesenswert?

Danke für die schnelle Antwort!

Stimmt, eigentlich bewege ich mich hier klar über den Spezifikationen 
des Transistors. Anfängerfrage: ist es klug einfach trotzdem mit der 
bestehenden Konfiguration zu fahren (ist ja nur ca. 100µs an), nur weil 
nach einer Woche Dauertest keine Ausfälle erkennbar waren, oder sollte 
ich unbedingt auf andere Transistoren umsteigen?

Trotzdem hat das aber wohl nur indirekt etwas mit der Problemstellung zu 
tun, denn mit dem vollständigen Arduino als Controller funktioniert es 
ja.

Wenn ich statt den drei IR-LEDs parrallel zwei in Serie schalte taucht 
das gleiche Problem auf. Ein Widerstand ab ca. 10 Ohm (deutlich geringer 
als bei der Parallelschaltung!) in macht alles wieder gut, die 
Helligkeit (-> Reichweite) ist aber auch hier natürlich deutlich 
verkürzt.
Auch hier gilt: dem Arduino-Board ist es egal, nur beim stand-alone 
ATmega gibt es Probleme.
Merke: der problematische Zustand scheint ab einm gewissen Strom durch 
den Transistor aufzutauchen.

Ich habe leider kein Oszilloskop, aber mit einem Piezo-Lautsprecher an 
Stelle einer IR-LED konte ich feststellen, dass der Transistor auch im 
"eingefrorenen" Zustand des µC durchschaltet, allerdings ist der Ton 
(=die Schaltfrequenz) deutlich niedriger.

In der Vermutung dass der Spannungsabfall beim durchschalten des 
Transistors irgendwelche versteckten Sicherungsmechanismen des 
Controllers auslöst habe ich einen größeren Elko in die Versorgung 
geschaltet. Keine Veränderung.

von Falk B. (falk)


Lesenswert?

@Jannai Flaschberger (ein_geweihter)

>Stimmt, eigentlich bewege ich mich hier klar über den Spezifikationen
>des Transistors. Anfängerfrage: ist es klug einfach trotzdem mit der
>bestehenden Konfiguration zu fahren (ist ja nur ca. 100µs an), nur weil
>nach einer Woche Dauertest keine Ausfälle erkennbar waren, oder sollte
>ich unbedingt auf andere Transistoren umsteigen?

Man sollte einen anderen Transistor nehmen, einen der wenigstens 1A DC 
kann, der kann dann meist auch 3A Puls. BC337 könnte knapp passen. Ist 
aber im Moment nich das Hauptproblem, denn . . .

>Trotzdem hat das aber wohl nur indirekt etwas mit der Problemstellung zu
>tun, denn mit dem vollständigen Arduino als Controller funktioniert es
>ja.

Eben.

>Wenn ich statt den drei IR-LEDs parrallel zwei in Serie schalte taucht
>das gleiche Problem auf. Ein Widerstand ab ca. 10 Ohm (deutlich geringer
>als bei der Parallelschaltung!) in macht alles wieder gut, die
>Helligkeit (-> Reichweite) ist aber auch hier natürlich deutlich
>verkürzt.

Prüfe mal GENAU deinen Aufbau. Vielleicht sind Emitter und Kollektor 
vertauscht. ODer was anderes.

Naja, man muss erstmal rauskriegen, wie hoch die Flußspannung der LEDs 
bei 1A ist. Messen oder Datenblatt, wobei Messen besser ist. Braucht man 
ein Oszi.

>Auch hier gilt: dem Arduino-Board ist es egal,

Dort sind halt ein paar Elkos drauf. Schau dir den Schaltplan an.

> nur beim stand-alone
>ATmega gibt es Probleme.

Dort fehlen sie wahrscheinlich.

Mal überschlagen.

C = I x t / U

Wenn wir 3A für 100s schalten wollen und dabei nur 0,5V Spannungsabfall 
haben wollen macht das

3A * 100us / 0,5 = 600 uF. Ganz schön viel.

>"eingefrorenen" Zustand des µC durchschaltet, allerdings ist der Ton
>(=die Schaltfrequenz) deutlich niedriger.

Wieviel?

>Controllers auslöst habe ich einen größeren Elko in die Versorgung
>geschaltet.

Wie groß? Wo GENAU?

von Jannai F. (ein_geweihter)


Lesenswert?

entschuldige, du warst mit deiner Antwort schneller...

So, Fehler gefunden:

ich hatte zwar einen großen Elko parallel zu Spannungsquelle geschaltet, 
aber den schnellen, nahen 100nF Kondensator vergessen (saublöder 
Anfängerfehler, mea culpa).

100nF hab ich zwar gerade nicht zur Hand, mit einer zweiten 
Spannungsquelle nur für den µC, (GND natürlich verbunden) klappts 
wunderbar.

>
>>http://www.instructables.com/id/Make-an-Attiny13-b...
>
> Fetter Fehler im Schaltplan. Der 2N3904 in Emitterschaltung hat keinen
> Basiswiderstand. Ausserdem werden die IR-Leds dort mit deutlich weniger
> Strom betrieben.

Ja, der Schaltplan ist etwas dürftig. Das Prinzip ist aber kompakter und 
zügiger zu verstehen als bei dem anderen Link, deshalb .

Wegen der Transistoren: nachdem für meine gewünschten 3A ein so großer 
Basisstrom nötig ist und mir meine ganze tolle Rechnung verhagelt bin 
ich einfach mal so vermessen und lasse alles dabei. In der Konfiguration 
bin ich mit der Reichweite zufrieden, sie hat schon über einen längeren 
Zeitraum funktioniert und außerdem habe ich blauäugig schon 30 Pixel 
fertiggelötet. So wie es gerade für mich aussieht muss der Transistor 
eher <1000mA schalten, und bisher kann er das gut.



Vielen Dank an Falk für die Hilfe, für mich ist das Problem gelöst!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.