-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Problem: Pulsstrom bei AVR (ATmega328) Unterschied zu Arduino?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2013
    Beiträge
    6

    Problem: Pulsstrom bei AVR (ATmega328) Unterschied zu Arduino?

    Anzeige

    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 schickt. Ein Fototransistor misst die (IR) Helligkeit, über einen Spannungsteiler bekomt der Controller einen entsprechenden 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. Der µC nutzt seinen internen Oszillator, an ihm sind keine externen Komponenten verbaut.


    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 hinter die Dioden 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? Im Prinzip müsste die Lösung durch einen Vergleich mit dem Arduino Uno ersichtlich sein, denn dort funtioniert es ja. Wie gesagt, µC und Code sind gleich.
    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-b...
    http://www.instructables.com/id/Infrared-Proximity...
    ATmega328 Standalone
    http://www.instructables.com/file/FP6AIB0H0OIZC72

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Jannai,

    ich denke schon, dass der hohe Strom den µC aus dem Takt bringt. Hast du 100nF Block-Kondensatoren parallel zur Spannungsversorgung direkt am µC mit kürzestem Weg verbaut?
    Wenn das schon so ist oder nicht hilft würde ich testweise probieren den µC mit einer anderen Spannungsquelle zu versorgen. z.B. ein 9V-Block mit einem 7805 nur für den µC. Die Massen der beiden Spannungsquellen dann natürlich verbinden.

    Viele Grüße
    Andreas

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2013
    Beiträge
    6
    Hey,

    danke für die schnelle Antwort!
    Ich hatte leider gerade keine Kondensatoren in diesem Bereich zur Hand, also habe ich mal die zweite Spannungsquelle ausprobiert. ES FUNKTIONIERT!

    Eigentlich ja ein echt blöder Anfängerfehler, man sehe mir meine fehlende Bildung in Etechnik nach.
    Wollte ich eine gemeinsame Spannungsquelle nutzen, welchen Kondensatorwert sollte ich wählen? Die besagten 100nF oder eine Kombination verschiedener?

    Und noch eine Frage: mir ist erst nach dem Erhalt der Transistoren aufgefallen, dass der verwendete Transistor (2N3904) laut Datenblatt nur für einen Dauerstrom von 200mA ausgelegt ist. Schadet es ihm mit der Zeit, wenn ich ihn so hoch pulse? (ca. 2-3 A für 50µs)?

    vielen Dank für die Hilfe,
    Jannai


    edit: wie füge ich denn nachträglich dieses "[gelöst]" suffix ein?
    Geändert von Jannai (04.01.2013 um 22:10 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo Jannai,

    ich verwende immer 100nF und hatte noch nie Probleme. Allerdings hatte ich auch noch nie so hohen Pulsströme wie du. Ausprobieren würde ich sagen! Mehr kann man dir nicht raten, da du nicht geschrieben hast wie die "externe Spannungsquelle mit Elko" genau aussieht.

    Der Dauerstrom für den Transistor ist bestimmt wegen der Erwärmung angegeben. (Ich habe mir das Datenblatt jetzt nicht angesehen). Zu den Spitzen-Strömen sollte aber auch etwas drin stehen. Aber solange nichts warm wird würde ich mir keine Sorgen machen.

    Viele Grüße
    Andreas

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2013
    Beiträge
    6
    Gut, die Kondensatoren müssten Montag kommen.
    Die Transistoren schalten wohl doch eher nur ca. 1 A, ich habe bei meiner blauäugigen Rechnung vergessen dass natürlich auch der Basisstrom deutlich ansteigt. So oder so: warm werden sie nicht.

    Danke und beste Grüße,
    Jannai

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2013
    Beiträge
    6
    UPDATE

    So, ich habe ein bisschen weitergelötet und bin derweil ein gutes Stück weiter gekommen und bei einem weiteren Problem gelandet. Die einzelnen Module funktionieren mit dem 100nF - Kondensator einwandfrei, hier ein Eindruck davon:
    http://www.youtube.com/watch?v=AbrhO0wr51A

    Das neue Problem besteht darin, dass die einzelnen Module (1 ATmega mit 6 Pixeln) ganz eigenartige Dinge machen wenn ich sie verbinde.
    Wenn zwei Module, die einzeln wunderbar funktionieren parallel an die Spannungsquelle angeschlossen werden, dann passiert folgendes:
    Alle Pixel leuchten von Anfang an, jedes mit einer anderen Helligkeit, teilweise flackern/blinken sie.
    Die Annäherung einer Hand wird weiterhin detektiert, allerdings mit stark verminderter Reichweite. Vergleiche folgendes Video:
    http://www.youtube.com/watch?v=2KBWKq_3Txs (Minute 1:50)

    Nach einem Reset der Controller zeigt sich das gleiche Bild. Ich habe auch ein stärkeres Netzteil als im Video (5A Nennstrom) getestet, gleiches Ergebnis.
    Die ATmega sind auf der Platine fast "nackt" verbaut, einzig ein 100 uF Elko und einen 100nF Keramik-Kondensator (2 mm vom Controller) sind zwischen Vcc und GND eingesetzt.

    Meine Theorie:
    Wenn im Programm das Setup anläuft sind die Controller ja noch voll im Takt. Durch das gleichzeitige Durchschalten der Transistoren fällt die Spannung ein Stück ab, die Referenz-Spannungsdifferenz "diff0", fällt dadurch zu gering aus, wodurch die im Loop berechneten Differenzen zu groß ausfallen, also die LEDs heller leuchten als sie sollten. Das flackern ließe sich mit der normalen Variation der Werte im Betrieb erklären, die jetzt auffallen weil der Buffer (Code Zeile 40 "-5") schon ausgeschöpft ist.

    Was meint ihr, klingt das logisch, oder gibt es einen ganz anderen Grund für dieses Verhalten?
    Falls ich recht habe: wie gehe ich am besten damit um? Soll ich die Controller im Setup durch irgendwelche Spielereien (klassisches Delay * Zufallswert) dazu bringen nacheinander den inertialen Spannungswert einzulesen?
    Oder ist es klüger einen Kondensator/Induktivität einzufügen um die Module zu entkoppeln? Wenn ja wäre das klasse, denn die Controller sind schon programmiert
    Dafür welches Bauteil wo einbauen?

    Mir fehlt dahingehend als Maschinenbauer (beschämender Weise) einfach das Grundwissen in dem Bereich. Um so mehr interessiert mich natürlich warum sich die Module so verhalten und wie sich eine Lösung darstellt.

    Vielen Dank für die Hilfe!
    Jannai

    Code (gerne weiterverbreiten, ich erhebe keine Urheberansprüche)
    https://dl.dropbox.com/u/59379713/IR...Code_final.ino

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Hallo,

    hast du mal gemessen wie stark die Spannung am Atmel einbricht? Die Leitungen sehen für den Strom von 1A schon recht dünn aus. Eventuell hast du da dann trotzdem zu hohe Verluste. Hast du mal versucht dickere Leitungen für die Versorgung zu verwenden?
    Alternativ hilft es vielleicht für die Versorgungsspannung 4 Leitungen zu verwenden. Jeweils 2 Stück (+ und -) für die Versorgung des Atmels und dann noch mal 2 Stück (auch + und -) für die Power. Am Netzteil kannst du alle + und alle - Leitungen verbinden.

    Viele Grüße
    Andreas

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Das ist ein tolles Projekt, sowas steht auch auf meiner ToDo-Liste.

    Zu deinem Problem: Wie viel Strom ziehen deine LEDs? Als Daumenregel setzt man je Ampere eine Kondensatorkapazität von 1000µF an, damit sollte man auf der sicheren Seite sein. Die Ursache für das beobachtete Verhalten liegt aber vermutlich eher in einer wechselseitigen Beeinflussung der einzelnen Controller. Im Einzelbetrieb ist immer nur genau eine IR-LED zur Messung aktiv, bei mehreren Modulen zusammen kannst du darüber aber keine Aussage treffen. Die Module übersprechen, das Ergebnis hat mehr einen Zufallscharakter. Um diesen Effekt zu unterdrücken wäre eine Synchronisierung der Module untereinander erforderlich, damit benachbarte Sensoren keine Messungen durchführen.

    Ach ja: Du könntest das Projekt öffentlich dokumentieren (github würde sich anbieten um auch den Quelltext sauber unterzubringen), andere hätten daran bestimmt auch Interesse.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für eine zuverlässige Finktion sollte schon der Mega328 alleine 2 der kleinen 100 nF Kondensatoren haben: je einer für die beiden GND/VCC (bzw. AGND/AVCC) Paare. Der Kondensatorwert ist nicht kritisch, so etwa 10 nF - 1 µF sollten gehen.

    2 der IR LEDs könnte man ggf. auch noch in Reihe schalten, das gibt dann mit dem gleichen Strom mehr Licht. Der Strom wird vermutlich durch den Transistor 2N3904 begrenzt, z.B. durch den Basisstrom, und gar nicht 1 A erreichen. Für 1 A ist der Transistor einfach zu klein, da wäre so etwas wie BC635 angebracht, bzw. für 500 mA ein BC338. Gegen die Störungen sollte man die Versorgung für die LEDs noch einmal extra Puffern und per Widerstand/Induktivität entkoppeln. Geeignet wäre da z.B. mit ein 100 µF low ESR Elko und einem 1 µF Keramikkondensator (gibt als SMD Form, lässt sich aber noch gut löten), und dann Ein Widerstand von z.B. 10 Ohm oder eine Induktivität, die auch ruhig etwas Widerstand habe darf. Die Entkopplung ist nicht nur für eine zuverlässige Funktion von Vorteil, sondern hilft auch Funkstörungen zu reduzieren.

    Die Störungen bei mehreren Einheiten könnten über die zufällig gleichzeitige Messung, oder auch über die Versorgung kommen.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    04.01.2013
    Beiträge
    6
    Wow, danke für die schnellen Antworten!

    @Bumbum:
    ja, die Leitungen sind etwas dünn, das stimmt. Durch den Pulsstrom ist die Gesammtleistung aber trotzdem sehr gering, die Litzen an sich sind also nicht gefärdet. Die Verluste waren mir in diesem Fall eher egal, schließlich ist das ganze Projekt an sich ja schon eine Form von Dekadenz
    Warum habe ich mich für die dünnen Litzen entschieden? Es gab sie bei ebay in schon zugeschnittener, abisolierter und verzinnter Form, 1000 Stück für 11€. D.h. ich habe mir diese Fusselarbeit genau 2 x 5 x 60 = 600 mal erspart...
    Das mit den getrennten Leitungen ist eine gute Idee. Generell wäre natürlich eine Lösung, bei der ich einfach nur einen Kondensator einlöte angenehmer, denn nachdem die Einzelmodule so tadellos funktionierten habe ich die 10 µC-Sockel schon fertiggelötet, jetzt noch groß etwas zu ändern geht natürlich, ist aber eher zeitaufwändig.
    Sollte markusjs Vorschlag mit den Kondensatoren nicht funktionieren werde ich es aber sofort ausprobieren!

    @markusj:
    Du meinst je 1000µF an die Spannungsversorgung der Leds pro Modul, richtig? Spielt es eine Rolle wenn bei den Kondensatoren ein deutlich höherer Spannungswert (25V, mein System: 5V) angegeben ist oder beschreibt das nur das maximal zulässige?

    So wie ich dich verstehe meinst du, dass Pixel X z.B. gerade die Dunkelhelligkeit misst, während Pixel Y die IR-Leds leuchten lässt und Pixel X dadurch einen verfälschten Wert einliest? Nun ja, generell besteht das Problem. Wenn man mit einer Kamera (die IR nicht herausfiltert) bei Dunkelheit von oben auf das Plexi sieht, dann erkennt man deutlich die einzelnen IR-Lichtkegel. Diese haben bei einem Abstand zwischen Plexi und IR-Leds von 80mm immer noch 2-3 cm Distanz zueinander, falls das die Messung tatsächlich beinträchtigt dann nur für unmittelbar benachbarte Pixel.
    Wenn man jetzt davon ausgeht, dass das z.B. bei jeder 10. Messung eines Pixels deutlich passiert, dann wird dieser Effekt ohne Probleme in der Fade-Funktion (Ende des Codes) mit dem Fadefaktor 100 untergebuttert und fällt nicht mehr ins Gewicht.

    @Besserwessi:
    Die Schaltung mit Leds und Transistor (2N3904 stimmt) ist etwas suboptimal und weit weg von dem eigentlich möglichen, da hast du absolut Recht. Allerdings funktioniert es in der jetzigen Form zufriedenstellend, und fertiggelötet sind die Pixel auch schon. Bei eventuellen Folgeprojekten werde ich deinen Rat beherzigen!
    Der zusätzliche 100nF-Kondensator an AGND und AVCC ist notiert. Dem in Post#1 verlinkten stand-alone-tutorial folgend habe ich AVCC offen gelassen, der Funktion der einzelnen Module tat das keinen Abbruch. Sollte ich auch dort die 5V anlegen und den Kondensator einlöten?

    Dieses Entkoppeln ist mir neu. Die Controller-Platine habe ich mit einer Streifenraster-Platine realisiert. 5V, GND und Reset laufen von links nach rechts durch, Verbindungen gehen zum Controller und zu den einzelnen Pixeln, ich habe also eigentlich nur einen "Spannungstopf" von dem aus alles abzweigt. Soll nun der Controller vom Rest durch die Induktivität/Widerstand entkoppelt werden oder die Led-Versorgung? Wenn egal wäre es für den Controller einfacher umzusetzen. Einen 100µF Elko und einen 1µF Keramikkondensator an die Led-Verorgung, verstanden.


    Ich nehme mal an der Wert vonn 100µF (Besserwessi) für den Elko an den Leds ist besser als 1000µF (Markus), weil die Transistoren eh nicht so viel Strom wie oben geschätzt durchlassen? Tut es weh wenn ich einfach 1000µF nehme? (Preis annähernd gleich)

    Eine Dokumentation werde ich sollte ich Zeit haben machen sobald das Projekt fertig ist. Allerdings ist das ja nicht ganz allein mein Werk, eigentlich habe ich nur die in Post #1 angegebenen Instructables zusammengeführt und auf Kosteneffizienz getrimmt.


    Edit #1: dass das lustige Verhalten der zusammengeschalteten Module daher kommt, dass die Pixel einzelner Module schon bei der Initialisierung interferieren und somit den fehlerhaften Wert von "diff0" sorgt kann ausgeschlossen werden, ich habe Schüsseln über einzelne Pixel gestülpt und sie somit optisch isoliert. Keine Veränderung

    Edit #2: Ich habe mir das Layout der Controller-Platine nochmal genauer angesehen. Es wäre recht aufwändig und vor allem unübersichtlich dort diese Entkoppelung nachträglich einzulöten. Ich möchte deshalb auf den Vorschlag von Bumbum wieder mit in die Diskussion einbringen. Wie müsste ich die Entkopplung auslegen, wenn ich sie für die beiden Stränge der Versorgung ausführe? Ist eine doppelte Ausführung von GND überhaupt notwändig? Die Kondensatoren an den Leds lieber zentral für alle Module oder auf jeder einzelnen Platine?
    Geändert von Jannai (27.01.2013 um 13:46 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. SainSmart uno r3-atmega328
    Von Droggelbecher im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 18
    Letzter Beitrag: 04.01.2013, 12:57
  2. Schreib Problem bei AVR-DOS
    Von Robo19 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 06.04.2009, 21:55
  3. Unterschied AVR MC zu AT89S8252 MC
    Von mkRE im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 04.01.2006, 17:24
  4. Problem bei Bascom AVR
    Von Moritz f. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.10.2005, 19:20
  5. Unterschied bei Spannungswandlern
    Von A.T.I.R im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 12.06.2005, 11:11

Stichworte

Berechtigungen

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