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?
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?
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
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.
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
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
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
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:
nach studium des textes wirst du wohl auch sehen, dass es manchmal sinvoller ist.. den kleinen micro mal direkt anzusprechen.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 ******************************************
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
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
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 !!!!
Wenn der Spannungsteiler richtig dimensioniert ist klappt das, mit den
in der Zeichnung angegebenen Werten könnte man durchaus Zweifel
bekommen.
Gruß Richard
Lesezeichen