- LiFePO4 Speicher Test         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: Strom messen mit Atmega

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.08.2009
    Ort
    SFB
    Beiträge
    60

    Strom messen mit Atmega

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Gibe es eine möglichkeit strom zu messen mit dem Atmega32 oder 8

    Hat das jemand eine lösung.

    Spannung 12 - 15 V und Strom bis 2A

    der Atmega soll die Spannung regeln.

    geht das?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, ja die giebt es und zwar über einen Shunt, da kannst du dann den Spannungsabfall messen und mit Hilfe des Ohmschen Gesetzes den STrom ausrechnen. Ich hatte mal sowas in Planung: https://www.roboternetz.de/phpBB2/viewtopic.php?t=37578
    In dem Beitrag hab ich auch die Schaltung zum Strom messen, es ist der 2. Anhang von mir. Da ist in der rechten Hälfte der Shunt mit einem Operationsverstärker den du dir so einstellen kannst dass du am ADC-Eingang eine Spannung von 0-5V hast. Die Werte müssen gegebenenfalls angepasst werden.

    Gruß Kalle

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Du kannst auch einen Stromsensor verwenden, wenn Du den Messtrom vom Rest der Schaltung galvanisch trennen willst.
    Beispiel: Den ACS 750 von der Firma Allegro.
    Auf unserer Homepage:
    http://www.toeging.lednet.de/flieger...t/lipovolt.htm
    findest Du einen Schaltplan mit diesem Sensor.
    Der Teil mit den beiden Operationsverstärkern ist nur da um einen 2ten Meßbereich mit besserer Auflösung zu haben.
    Der Sensor ist im Schaltplan oben Links zu finden.

  4. #4
    Benutzer Stammmitglied Avatar von Johnes
    Registriert seit
    07.12.2007
    Ort
    Neu Wu
    Beiträge
    45
    Mit dem M32 lassen sich Differenzspannungen mit Gain messen! Daher ohne exteren Bauteile, eine Spannungsverstärkung erreichen, sodass die Auflösung steigt.

    Ich messe mit dem M32 über einen 0R1/5W, Ströme bis 3A mit einer Auflösung bis zu 0,1mA!

    Im Datenblatt ist die Einstellung für den Multiplexer gut beschrieben.

    MfG

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hey

    Guttes Thema hier da bin ich auch grade am überlegen wie ich so etwas aufbauen kann.

    @Johnes

    Könntest du mir einmal ein Bascom Quellcode zeigen wie man die Diff Eingänge einstellt? Hab das im Datenblatt glaub ich soweit verstanden weiß nur nich wie ich Bascom das klar machen soll -.-

    Danke

    lg dämmi

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hey

    Also ich konnte mich nach langer zeit endlich wieder an mein Projekt setzen.
    Allerdings bekomme ich es immer noch nicht hin das der Atmega32 den ADC0 Eingang mit einem X10 Gain benutzt.

    Ich muss doch dafür das Register ADMUX = &B00001000 setzen oder seh ich das falsch?

    und kann ich dann nicht einfach über getadc(0) den ADC0 Eingang einlesen?

    lg Dämmi

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    hallo dämmi,

    eigentlich ist eher zufall dass ich dir etwas schreibe.
    ich wollte mal ne frage zu Bascom posten und bin dann über diesen thread gestolpert.
    ich war sehr verwirrt, da er lt. liste sehr alt war und dann trotzdem oben gelistet war.

    nachdem ich den inhalt des threads dann gelesen habe, komme ich auf die idee etwas dazu zu schreiben, ohne zu behaupten , dass meine meinung gut sein muss.

    1. wie schon "Hannes Lux" im microcontroller.net mal jemand beschrieben hat, ist die getadc-funktion ja verwendbar aber nicht unbedingt brauchbar.
    mir ist es z.b. noch nie gelungen über den GETADC den adlar zu setzten.

    da ich aber derzeit nicht den link zum beitrag von HANNES LUX zur hand habe , poste ich mal den inhalt:

    Code:
    ****************** 1***************************
    
    > Was Assembler befehle angeht bin ich leider völliger neuling....
    
    Es geht nicht um Assembler-Befehle, es geht um das Benutzen des
    System-Register ADMUX, ADCSRA, ADCSRB, ADCL und ADCH, ferner auch noch
    DIDR0.
    
    Das sind nämlich die Schnittstellen zum ADC, in denen einzelne Bits
    bestimmte Schalterwirkung haben, andere Bitgruppen Zahlen
    repräsentieren. Um das zu verstehen, brauchst Du kein ASM zu lernen
    (obwohl das keinesfalls schaden würde), sondern nur im Datenblatt die
    Funktion des ADC und besonders seiner (oben aufgezählten) Register
    nachzulesen (und zu verstehen).
    
    Bascom bietet zwar die Funktion GETADC(), die taugt aber im Alltag nix,
    da sie zuviel Zeit vertrödelt. Denn sie muss:
    
    - den zu messenden Kanal einschalten (Kanalnummer und Referenzquellen-
      Nummer in ADMUX schreiben)
    - den ADC starten (ADEN und ADSC im Steuerregister ADCSRA setzen, sowie
      den Vorteiler in ADCSRA einstellen)
    - warten, bis das Bit ADIF in ADCSRA gesetzt ist, was das vereinbarte
      Zeichen ist, dass der ADC fertig ist und ein Ergebnis hat
    - das Ergebnis aus ADCL und ADCH auslesen und dem aufrufenden Programm
      zurückgeben.
    
    Das Problem dabei ist, dass die Programmabarbeitung solange warten muss,
    bis das Ergebnis vorliegt, das ist nunmal bei "Funktionsaufruf" so. Es
    verlangt aber keiner, dass Du diese Funktion benutzt. Stattdessen kannst
    Du die Handgriffe selbst in Programmcode formulieren und zur rechten
    Zeit ausführen.
    
    Angenommen, Du brauchst nur einen ADC-Eingang 8-bittig zu messen. Dann
    schreibst Du Die Mess-Quelle schon bei der Initialisierung in ADMUX. Im
    Register ADMUX findest Du (beim Mega644) 2 REFS-Bits, 5 MUX-Bits und das
    Bit ADLAR. Die REFS-Bits bestimmen die Referenzspannungsauswahl, siehe
    Tabelle 21-3 des Datenblatts. ADLAR bestimmt die Ausrichtung des
    Resultats, bei gesetztem Bit wird linksbündig ausgerichtet, die oberen 8
    Bits stehen dann in ADCH, was das Auslesen des 8-Bit-Messwertes
    erleichtert und beschleunigt (der ADC misst aber trotzdem 10-bittig, die
    unteren 2 Bit liegen dann in ADCL und verfaulen, weil sie keiner
    abholt). Mit den MUX-Bits wird angegeben, welcher Kanal gemessen werden
    soll, siehe Tabelle 21-4 des Datenblatts. Du baust Dir nun das
    gewünschte Bitmuster zusammen und schreibst es in ADMUX. Das erfordert
    keinerlei missverständlichen CONFIG-Kram, sondern nur eine einfache
    Zuweisung. Da Bascom leider nur die Registernamen kennt, nicht aber die
    Bitnamen, musst Du auf die symbolischen Bitnamen verzichten und das
    Bitmuster numerisch angeben (was den Code gegenüber ASM oder C
    unübersichtlich macht und oftmals Protest aus der C-Liga bewirkt...).
    ADC0 gegen AVcc 8-Bittig gemessen ergibt dann folgende Initialisierung
    für ADMUX:
    
     ADMUX = &b01100001
                  ^^^^^--- Mess-Quelle 0 laut Tabelle 21-4
                 ^-------- linksbündige Ausgabe (ADLAR)
               ^^--------- AVcc als Referenz laut Tabelle 21-3
    
    Du hast also mit einer einzigen Zuweisung Referenz, Kanal und Format
    eingestellt. Ist das nicht viel eindeutiger als das Config-Geraffel?
    
    Ebenso gehst Du mit ADCSRA vor, das enthält den Vorteiler und weitere
    Bits zum Schalten und Steuern. Mit einer Zuweisung konfigurierst und
    startest Du den ADC. Wird nur eine Quelle gemessen, dann lohnt sich der
    Freerun-Mode, also das Setzen von ADATE (heißt bei älteren AVRs ADFR),
    dann klappert der ADC nach dem Starten im Hintergrund vor sich hin und
    kann irgendwann mal nebenher ausgelresen werden, ohne dass das Programm
    dabei warten muss. Für ADC0 gegen AVcc 8-Bittig gemessen ergibt dann
    folgende Initialisierung für ADCRSA:
    
     ADCSRA = &b11100110
                     ^^^--- Vorteiler 64 (Tabelle 21-5)
                    ^------ kein Interrupt aktivieren
                   ^------- Interrupt-Flag ist hier nicht relevant
                  ^-------- Free-Run, siehe ADCSRB
                 ^--------- ADC starten
                ^---------- ADC einschalten
    
    Der Vorteiler hängt von der Taktfrequenz des AVRs ab, er soll so gewählt
    werden, dass der ADC mit 50kHz bis 200kHz getaktet wird. Er braucht
    (ohne Umschaltung der Quellen) 13 Takte für eine Wandlung, hat also
    Vorteiler mal 13 Takte ein neues Ergebnis, das so lange in ADCL und ADCH
    verfügbar ist, bis es vom nächsten Ergebnis überschrieben wird. Un nun
    das neueste Ergebnis zu erfahren, muss dein Programm es nur auslesen:
    
     wert = ADCH
    
    Wobei "wert" als Byte dimensioniert sein sollte. Da dies wieder nur eine
    einfache Zuweisung ist, kostet das keinerlei Wartezeit. Und solltest Du
    (durch ungünstige Programmplanung) den Wert zu oft abfragen, dann
    bekommst Du den alten Wert eben nochmal, solange noch kein neuer
    ermittelt wurde.
    
    Ähnliches wie beim ADC wirst Du bei den Timern entdecken. Die Timer der
    neueren Controller können viel mehr als Bascom per Config-Geraffel
    bietet. Schau Dir das Datenblatt an, das ist verbindlich, verzichte auf
    den Config-Kram und greife durch einfache Zuweisungen auf die interne
    Peripherie der AVRs zu, Du wirst sehen, dass damit das Programmieren
    auch in Bascom bedeutend einfacher und stressfreier wird.
    
    ...
    
    
    ****************************** 2 ******************************************
    nach studium des textes wirst du wohl auch sehen, dass es manchmal sinvoller ist.. den kleinen micro mal direkt anzusprechen.
    dann kannst du auch deine gains etc. einstellen.

    dann kanst du es ja mal versuchen und berichten. es würde mich interessieren.


    eine andere alternative zur strommessung, die leider wenig beachtung findet, ist bei mir schon seit jahren im einsatz. es handelt sich um eine idee aus dem AN32 von national-semi.

    hier der link:

    www.national.com/an/AN/AN-32.pdf

    auf der seite 11 ganz unten findest du den "current monitor"

    interessant an der schaltung ist die zugehörige berechnungsformel.
    ... da wir ja bei atmels gerne verschiedene referencespannungen für adc
    haben, bietet diese schaltung den ultimativen vorteil,
    ein poti für "R3" einzusetzen. (als regelwiderstand und nicht als teiler)

    da kann man dann locker z.B. 2 Amp. durch den shunt jagen und am poti so lange drehen bis aus dem adc etwa 1000 (1023 ist max) herauskommen. .. und schon ist alles geeicht. (9turn timmer helfen natürlich)

    die ausgangspannung der schaltung ist nahezu linear zum strom.
    (ausser bei kleinen strömen)

    die idee einen jfet haben zu müssen (sind ja mitlerweile selten und teuer)
    ist falsch. (gibts aber noch bei csd elec...) 2sk..

    ein bc 546 oder ein BS .. mos transi geht genausogut.
    man muss nur den + und - vom opv vertauschen!!!
    die linearität im ganz unteren messbereich leidet dann etwas aber das ist zu verkraften.

    wichtig ist natürlich die auswahl des OPV. ein 358 wird nicht funktionieren
    ein 1458 aber schon.

    ************************************************** *****
    ************************************************** *****

    jetzt bist du wieder gefragt.
    entweder die lösung finden oder..
    deine schaltung mal posten, damit man dir weitere tips geben kann

    gruss klaus

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.07.2008
    Beiträge
    49
    Hey

    Danke für die Super Erklärung. Habe damit den ADC recht gut verstanden. Ich habe es auch geschaft ganz normal ADC0 mit interner ref 10bittig auszuwerten.

    Allerdings klappt das mit der 10 fachen verstärkung noch nicht ganz. Ich bekomme zwar einen Messwert allerdings ist der nur halb so groß wie er sein sollte. z.B. bei 256mV keine 1023 sondern nur 511. Wenn ich dann am Poti eine ander Spannung einstelle hängt sich der µC auf.

    Meinen Versuchsaufbau hab ich angehängt. Dieser ist auch nicht wirklich umfangreich will eben nur einmal testen.

    Der Current Monitor gefällt mir schon sehr gut allerdings wollte ich wenns geht mit wenig externer Beschaltung den Strommessen.

    Wenn das allerdings mit meiner billigen Versuchsschaltung gehen würde würd ich die nehmen. Dazu ist es doch auch ganz gut zu wissen wie die Gain ADC Eingänge funktionieren.

    Gruß Dämmi
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken versuch_170.jpg  

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    und wie sieht jetzt im moment deine software aus ?


    und noch wichtiger: GIBST DU ETWA WIRKLICH 24VOLT AUF DEN ADC EINGANG ? DAS GEHT NICHT UND KILLT IHN !!!!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Wenn der Spannungsteiler richtig dimensioniert ist klappt das, mit den
    in der Zeichnung angegebenen Werten könnte man durchaus Zweifel
    bekommen.

    Gruß Richard

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen