hier kommt immer derselbe Wert bei einer Strommessung raus, das kann aber nicht sein, weil der Strom nicht der gleiche ist. Liegt es an der Meßschaltung oder hängt Vref doch stark von VCC ab (3V / 5V) ?
Langsam, wir kennen deine Aufgabenstellung nicht. Erklär erst mal was du da vorhast und wo der Fehler ist, wir sind in dein Projekt nicht so involviert wie du. Schaltplan? Welcher µC? Was soll gemessen werden? Code?
Huhu, ich sollte mich kürzer fassen: tiny26, 10 bit Messung bei zwei Betriebspannungen, 3V und 5V. Differentiell bezogen auf 2.56V interne Referenz. Die Werte sind gleich, die gemessene Spannung ist es aber nicht -> irgendwas ist falsch: Entweder die Referenz verändert sich mit VCC oder die gemessene Spannung ist irgendwie gestört
Bin mir jetzt nicht ganz sicher, aber ich denke, er kann die interne Referenz von 2.56V bei Vcc=3V nicht aufrecht erhalten. Dreh' die Vcc mal langsam 'runter und schau, bei welcher Vcc die gemessene Spannung wegdriftet. Vermutlich läuft die gemessene Spannung hoch, oder?
Um noch genauer zu sein: Die Spannung wird über einem 0.1 Ohm Meßwiderstand gemessen, der in Serie mit einer LED (3.8V @ 110mA) am Ausgang des Schaltreglers hängt, den das ganze darstellt. Das Erstaunliche ist, daß mit einigen LEDs+Vorwiderstands parallel, bei eine höheren Ausgangsspannung (-12V) und kleinerem Strom (20mA) die Meßwerte mit der Realität fast übereingestimmt haben, und zwar unabhängig von der Versorgungsspannung. Vielleicht habe ich Glück, und du kannst das Phänomen erklären..?
Äh, das macht irgendwie Sinn, ich muss das alles nochmal prüfen.. danke.
Hast du das Signal mal mit dem Oszi angeschaut? Wenn das ein Schaltregler ist, kann es sein, dass da Ziemlich viel Mist (Störungen) auflaufen. Dar AVR misst haltimmer nur den Momentanwert.
Hallo, du kannst die Ref.-Spannung einfach nachmessen. Wenn du die Bits REFS0 und REFS1 im Register ADMUX beide auf 1 setzt, dann erscheint die Referenzspannung an Pin 17 des Tiny26. Da kannst du sie mit einem hochohmigen Multimeter messen. Du kannst Vcc variieren und testen, was mit Vref passiert. Gruß Jan
Ich werde mal versuchen V_ref gegen V_BG zu messen, während ich an der Versorgung drehe.
Die Spannung über dem Shunt habe ich nicht mit dem Oszi messen können, ich weiß nicht warum - aber mit dem ADC habe ich stabile und richtige Werte bekommen. Wird irgendwie mit der Last zusammenhängen, ich habe eben schon die Ausgangskapazität verdoppelt, aber das hat nichts verändert. Danke für die Tips!
Also hier stimmt was nicht (1MR Messinstrument) Vcc Vref 4.9 4.28 3.8 3.6 3 3 2.4 2.8 Die Messung erfolgt alle 99µs für 9µs mit 9.3 Hz, nach umschalten der MUX und dummy readout.
Beim Umschalten des MUX (insbesondere der Betriebsart) unbedingt das Timing beachten! Betriebsartumschaltung (differentiell-singleended) min. 120µs Pause machen. Bei differentiell Kanalwechsel habe ich 40µs als kritische Zeit 'rausgemessen.
AVR120, S. 10 "When using the internal voltage reference with the ADC, the accuracy of this reference must be considered. The internal voltage reference is proportional to the bandgap voltage, which is characterized in the devices’ datasheets. The characteristics show that the bandgap voltage is slightly dependent on supply voltage and operating temperature." Ich versuch's mal ohne alles andere.
>Vcc,Vref-Messwerte
Die Messwerte zeigen doch, dass als Referenz für den Wandler die VCC
eingeschaltet ist und nicht die Referenzspannungsquelle im IC, sonst
würde doch als Vref 2,54 V anstehen.
Daran wird es wohl liegen, so bekomme ich unabhängige 2.77V
1 | int main(void) |
2 | {
|
3 | ADCSR = (1<<ACD) | (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); |
4 | ADMUX = (1<<REFS1) | (1<<REFS0) |(1<<MUX3) | (1<<MUX1) | (1<<MUX0); |
5 | while(1) |
6 | {
|
7 | |
8 | }
|
9 | }
|
Dann weiß ich ja, wo ich suchen muss. Danke!
@ peter-neu-ulm nein, das ist mit sicherheit nicht der fall.
11mV fallen bei 110mA und 0,1ohm als shunt ab. bei 2,56v referenzspannung und 10 bit auflösung macht das 2,5mV/schritt. die 11mV liegen also in etwa im 5. schritt, von offsetfehler usw. einmal abgesehen. nun sagen wir mal, dass durch den offsetfehler die gemessene spannung genau an der unteren grenze vom 5. bit liegt. nun kannst du die spannung um 2,5mV erhöhen, bis du ins 6. bit kommst. das sind satte 23%, um die der strom sich ändern kann, bis du es überhaupt merkst. was könnte man ändern? wenn du den vorwiderstand auf 1 ohm erhöhst, fallen da 0,11 volt ab. damit liegst du im 44. bit. wenn du die spannung um 2,5mv erhöhst, also 112,5mv an den eingang gibst, rutschst du aufs 45. bit. die änderung ist dann nur noch 2,3%, bis dein programm etwas bemerkt. => wenn du die möglichkeit hast, erhöh den vorwiderstand, dass du ne ganze hand voll schritte vom nullpunkt wegkommst. und wenn deine interne referenzspannung stark schwankt, erzeug dir eine externe. so krass, wie du es schilderst, ist die billige lösung mit einer zenerdiode und vorwiderstand schon deutlich zuverlässiger, als die interne variante, aber auch da gibt es raum für verbesserung, stichwort temperaturkompensation usw. usf.
Der tiny26 sollte doch einen integrierten 20x Verstärker haben, der auch differenziell misst. Also klemm beide Enden vom Widerstand an den ADC und miss die Differenz mit 20x. Hast du auch einen Kondensator an Vref gehängt? @peter-neu-ulm Hätte ja nicht gedacht, dass sich hier so schnell noch jemand aus Neu-Ulm findet
Huch, ich dachte, ich hätte gestern noch gepostet. Wohl geschrieben und dann nicht geposted.. Die Referenzspannung ist wohl softwareseitig durchs Umschalten irgendwie durcheinandergeraten, auch wenn ich mir das nicht erklären kann. Jedenfalls war sie gestern abend stabil auf 1/100 bei 2.77V über den Vcc Bereich 3-5V. Der Regler hielt den Strom so, dass gemessenen recht konstant der Sollwert gehalten wurde (@i_h: die Messung ist differentiell mit 20x). Nur, der tatsächliche Strom unterscheidet sich in der Größenordnung 30% vom Meßwert. Ich hatte noch geschrieben, daß der Meßwiderstand an beiden Enden mit einem 1:1 Spannungsteiler nach Vcc hochgezogen wird, aber das kann ja wohl nicht die Ursache sein. Spannungsmäßig liegen die dann nämlich im Bereich der Referenz, aber es wird ja differentiell gemessen.. Dann habe ich tollerweise auch noch eine €8 LED geschrottet, weil wohl ein Wackelkontakt die Spannung im Ausgangskondensator auf unverträgliche 26V gestiegen ist.. Was vielleicht auch merkwürdig ist: mit einer anderen Last stellt sich ein anderer tatsächlicher Strom ein, obwohl die Meßgröße gleich bleibt. Ich nehme deswegen an, daß da doch irgendwas schwingt und die Messung daher Mist ist. Ich probier's mal mit einem größeren Widerstand, nur leider steigt dann auch die Verlustleistung.. Danke jedenfalls für's miträtseln.
Widerstände vom Spannungsteiler groß genug? Sonst fließt über den auch Strom. Bzw. wird der Strom dann recht groß.
10K Ich hatte auch schon mal perfekte Werte, die mit dem Strom sehr gut übereinstimmten. So ist das Leben.. :-(
An das durch die Auflösung im unteren Bereich verursachte Problem habe ich nicht gedacht, danke für den Hinweis nochmal. Hier mal die ersten 32 Werte:
1 | Resolution: 10 bits (1024 steps) |
2 | Gain: 20 |
3 | Reference voltage: 2.56V |
4 | Current sense resistor: 0.1 Ohm |
5 | |
6 | 32 values of 32 total. |
7 | |
8 | ADC U[mv] I[mA] Increase[%] |
9 | 0 0.00 0.00 NaN |
10 | 1 0.13 1.25 Inf |
11 | 2 0.25 2.50 100.0 |
12 | 3 0.38 3.75 50.0 |
13 | 4 0.50 5.00 33.3 |
14 | 5 0.63 6.25 25.0 |
15 | 6 0.75 7.50 20.0 |
16 | 7 0.88 8.75 16.7 |
17 | 8 1.00 10.00 14.3 |
18 | 9 1.13 11.25 12.5 |
19 | 10 1.25 12.50 11.1 |
20 | 11 1.38 13.75 10.0 |
21 | 12 1.50 15.00 9.1 |
22 | 13 1.63 16.25 8.3 |
23 | 14 1.75 17.50 7.7 |
24 | 15 1.88 18.75 7.1 |
25 | 16 2.00 20.00 6.7 |
26 | 17 2.13 21.25 6.3 |
27 | 18 2.25 22.50 5.9 |
28 | 19 2.38 23.75 5.6 |
29 | 20 2.50 25.00 5.3 |
30 | 21 2.63 26.25 5.0 |
31 | 22 2.75 27.50 4.8 |
32 | 23 2.88 28.75 4.5 |
33 | 24 3.00 30.00 4.3 |
34 | 25 3.13 31.25 4.2 |
35 | 26 3.25 32.50 4.0 |
36 | 27 3.38 33.75 3.8 |
37 | 28 3.50 35.00 3.7 |
38 | 29 3.63 36.25 3.6 |
39 | 30 3.75 37.50 3.4 |
40 | 31 3.88 38.75 3.3 |
41 | ADC U[mv] I[mA] Increase[%] |
Allerdings ist das wohl nicht das Problem, weil ich Werte um 25 regeln möchte; da ist die Differenz zwischen anliegenden Stufen nicht so groß. Bei 3V Vcc stimmt es auch, 25 = 33.8mA, gemessen 32.7mA Bei 5V wird auf ADC 25 runtergeregelt, aber trotzdem fließt ein Strom von 54mA Der Fehler liegt also im Signal. So was doofes. Das sieht nämlich so aus..
Was mir noch eingefallen ist: die Toleranzen der Spannungsteilerwiderstände können natürlich einen Offset verursachen. Ansonsten gilt wohl: je größer die Einschaltzeit der Induktivität, desto besser die Messung
eben sah die messung dann so aus. vielleicht hat mein oszi ne macke. trotzdem verstehe ich nicht, warum anscheinend bei einem kleineren tastverhältnis die messung schlechter wird. ich werde wieder versuchen, viele messwerte zu mitteln. hoffentlich vermurkst das nicht die referenzspannung..
Übrigens ist die Last samt Shunt parallel zu einer Kapazität an dem Ausgang des Schaltreglers. Die Last besteht aus 6 roten LEDs a 1.8V. Mit steigender Eingangsspannung wird der Impuls aus dem oben angehängten Bild nur länger, nicht größer. Eingang 3V 5V Ausgang 13.3V 14.5V Tastgrad 25.1% 21% Strom 23mA 41.2mA Impuls 2µs 2.5µs ADC 16 16 (istwert 8 messungen gemittelt seriell ausgelesen) Vref 2.778V 2.84V Rechnerisch ergibt sich aus dem ADC-Wert die Größenordnung 23mA 15 2.03 20.29 7.1 16 2.16 21.64 6.7 17 2.30 22.99 6.3 18 2.43 24.35 5.9 Versteht das jemand?
Poste doch mal die Schaltung und den Code. Alles andere hat keinen Sinn.
Hast ja recht, war schon in Arbeit! Schaltung: {pre] VCC | .-----. ^ | | --- '------. .-. | .-------+ +--------. | | | | | VCC | .---------|<------' | |10K | | | | - '-' | | | | ^ -> | | | C| --- | diff- .-. | C| --- 6 LEDs .-. | | /+\ C| | - | | |10K ( ) | | ^ -> |10K '-' \-/ | | | '-' | | | | '-------| diff+ | | | .-. .-. | | | | | | | | | | | | |10K | | | '-' 0.1 '-' | | | | | '------------------------------------|--------------------' GND (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de) [/pre] code: tiny26 4MHz intern
diff- geht an pin 19, PA1 (ADC1) diff+ geht an pin 20 PA0 (ADC0) momentan ist die referenz noch nach aussen geschaltet, damit ich messen kann. (die hängt in der luft).
Wie genau sind deine 10k Widerstände ? Selbst bei 0,1% ergibt sich worst case ein Messfehler von +/-60mA (wenn ich richtig gerechnet habe) ! Außerdem hat ACD nichts im ADCSR Register zu suchen...
Zum Glück ist das dieselbe Bitnummer wie ADEN .. was ein D ausmachen kann.. Das ist wohl der Knackpunkt, ich hatte angenommen, daß sich da nichts verschiebt. Die müssten 1% haben. Dann ist die Toleranz pro Teiler aber auch nur 1%, d.h. der Maximalwert unterscheidet sich vom Minimalwert um 2% Bei 5V ist die maximale Differenz 0.05V, bei 3V 0.03, das sind tatsächlich 60% AHA! Vielen Dank! Wie kann ich das verhindern, außer mit einem relativ feinen Poti?
Hast du schonmal versucht, die Widerstände ganz wegzulassen ? Laut Datenblatt liegt der Eingangsspannungsbereich bei GND bis Vcc.
Am Ausgang ist die Spannung negativ, das geht leider nicht. Ich versuch's erstmal mit nem Poti. Oder man mißt die Eingangsspannung als Korrekturfaktor. Na mal sehen, ich werde jetzt erstmal wieder am Programm rumdoktorn. Vielen Dank für die Hilfe!
Also, habe eben einen zusätzlichen 5K Spindeltrimmer zwischen die bestehenden 10K Widerstände eingebaut und zwar an dem Spannungsteiler für ADC0, der positiven Seite. Habe schon ein langes Gesicht gemacht, weil es nichts gebracht hat, an den Grenzen den Strom auf den tatsächlichen Wert zu stellen. Aber in der Mitte bei 4V eingestellt, hält er den Wert jetzt auf ein paar mA genau. Juchu. Leider ist das alles eine sehr heikele Angelegenheit - wenn ich den Trimmer am Kunststoffgehäuse anfasse gibt's schon starke Veränderungen im Strom. Alternativ könnte man den Schaltregler so aufbauen, dass er nicht invertiert, und anstelle der Masse Vcc als Bezugspunkt benutzt wird. Also vielen Dank nochmal Benedikt!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.