Hi, ich möchte mich etwas zu ADC erkundigen. Also eine kleine Machbarkeitsstudie. Ich möchte probieren ob ich z.B. 2 Spannungen einlesen kann und dann damit rechnen. Das Ergebnis wird wieder als Analogspannung ausgegeben. Ich habe z.b: u1 und u2 Formel : ((u2)^2) / ((u1-u2)^2) Das Ergebnis brauche ich dann wieder Analog. Nun haben aber u1 und u2 einen Bereich von 0-10V. Das kann der AVR ja schon mal nicht, oder? Daher ist mir die Idee gekommen einen I2C ADC Konverter (MAX127) zu verwenden. Dieser kann auch gleich z.B. 8 Analoge Eingänge und auch mit mehr Auflösung (z.B. 12Bit). Das Ergebnis dann halt anders herum einen I2C DAC der die berechnete Spannung wieder ausgibt (MAX5842). Das ganze sollte von alleine laufen. D.H. ich schalte die Versorgung ein und der AVR soll zum Rechnen anfangen. Das sollte sich mit einer Endlosschleife lösen lassen. Nun noch eine Frage zu der Schnelligkeit! Eigentlich war meine Idee das ganze Analog aufzubauen (OPV + AD633). Die Berechnung hängt in einem Regelkreis eines Netzteiles und muss somit schnell und zuverlässig funktionieren. Ansonsten gibt es Probleme mit der Leistungsendstufe ;) Aber das ganze Analog aufzubauen ist ein riesen Aufwand und auch ziehmlich Kostspielig. Kann man irgendwie rausfinden wie lange dann der AVR für einen Durchlauf braucht? Wenn der Analoge Ausgang dann nur alle 500ms aktualisiert wird gibt es sicher Probleme. Hängt warscheinlich von der Taktrate des AVR ab. Würde dazu ein ATiny85 dann auch reichen oder brauche ich dazu einen größeren AVR. Ich weis jetzt nicht ob der ATiny85 überhaupt ein I2C Interface besitzt. Programmieren werde ich mit AVR Studio und GCC. Jetzt schon einmal Danke für Tipps!
Das geht natürlich nur in gewissen Grenzen, wenn u1 und u2 bis zu 10V sein sollen... ((u2)^2) / ((u1-u2)^2) z.B. u2=9V, u1=10V ergäbe 9^2 / (10-9)^2 = 81V... Zitat: "Die Berechnung hängt in einem Regelkreis eines Netzteiles und muss somit schnell und zuverlässig funktionieren. Ansonsten gibt es Probleme mit der Leistungsendstufe ;) (...) Wenn der Analoge Ausgang dann nur alle 500ms aktualisiert wird gibt es sicher Probleme." Vielleicht kannst du mal umgekehrt definieren, wie schnell der Regelkreis sein müsste, damit es keine Probleme gibt.
Hallo Hugo! Prinzipiell spricht nichts gegen Deine Idee. Hier noch ein Paar Gedanken zum Thema: 1) 10V kann ein AVR nicht wandeln. Die obere Spannungsgrenze ist zum einen durch die gewählte Referenzspannung für den ADC begrenzt, zum anderen aber durch die Klemmdioden an den Pins. D.h. wenn Du den Controller mit 5V betreibst werden diese Dioden ab ca 5,6V leitend -> Lösung: Spannungsteiler einbauen und dafür sorgen dass die Eingangsspannung nicht den zulässigen Bereich verlässt. Der MAX127 arbeitet schließlich auch mit einer Referenzspannung und einem SW-gesteuertem Spannungsteiler. Was soll der Vorteil (abgesehen von einer höheren Auflösung) sein, diesen zu nehmen? Ist die hohe Auflösung wirklich notwendig? 2) Rechenaufgabe sollte für einen AVR machbar sein, allerdings sollte man sich ein Paar Gedanken zum Thema "Festkommaarithmetik" machen. 3) Diese Funktion analog zu implementieren sollte aus meiner Sicht auch keinen enormen Aufwand darstellen. Je nach dem wie schnell das ganze wirklich funktionieren soll, würde ich diesen Ansatz nicht gleich verwerfen. 4) Wie lange der Controller für die Berechnung tatsächlich braucht hängt natürlich von der Taktrate ab, die Zeit kann man aber experimentel bestimmen, in dem man z.B. ein mal pro Schleifendurchlauf einen Pin toggeln lässt und die Zeit dann mit nem Oszi misst. Gruß Eugen
Danke schon mal für die Antworten! @Tim R.: klar, 10V * 10V = 100V, kann nicht gehen. Hier würde ich dann wie der AD633 verfahren: x = (u1 * u2) / 10 Somit 10V * 10V = 100V / 10 = 10V Da es sich um einen Spannungsmonitor und Strommonitor handelt (also U*I) kann man dann den Faktor auch gleich so anpassen, damit ein guter Masstab für den Leistungsmonitor heraus kommt. Bei der Formel ((u2)^2) / ((u1-u2)^2) handelt es sich um ein Verhältnis/Faktor. Somit sind Werte von 0..1 als Ergebnis zu erwarten. Ich reche mir sozusagen zuerst P_Forward aus. Dann mit dem Faktor multiplizieren = P_Delivered. P_Reflected =P_Forward - P_Delivered . Also um zuerst P=U*I zu berechnen: 1 STK AD633 Dann um den Faktor zu berechnen: 2 STK AD633 + Dividierer (1 STK AD633 + OPV) Dann die beiden miteinander multiplizieren: 1 STK AD633 Somit kommen hierzu schon 5 STK AD633 zusammen. Das STK kostet ~10,- Um alles auszurechnen brauche 4 analoge Inputs und 3 analoge Ausgänge. Den MAX127 haben wir schon in einer Anwendung. Dieser braucht keine Referenzspannung. Er hat eine interne 4.096V Referenz. Und man kann direkt 0..10V oder sogar -10..10V anlegen. Hier wieder ein extra Spannungsteiler 10V -> 5V zu verwenden bringt mir wieder einen Fehler durch die Bauteiltoleranzen. Es würden auch viele Bauteiltoleranzen wegfallen wenn ich es per AVR und MAX127 umsetze. Denn die AD633 oder auch OPV brauchen auch wieder Widerstände um die Verhältnise anzupassen. Man könnte auch eine Kalibrierstation für den AVR machen. D.h. man steckt ihn auf ein Testboard wo alle Eingangsspannung kalibriert sind. Somit weis man was rauskommen muss und der AVR kann sich selber den Fehler berechnen und im EEPROM ablegen. Vorteil: kein Poti nötig wo wieder irgendeiner etwas herumdreht ;). Auch ob die 10Bit genug wären... Bin mir nicht sicher. Müsste man probieren. Wenn ich nun überlege 12Bit^2: Der Wert wird auf 16Bit erweitert: 65535^2 = 4294836225 Das Ergebnis sollte also in ein UInt32 passen. Danke auch für den Tipp mit Festkommaarithmetik! Werde ich mir gleich einmal ansehen. Vor allem da der Faktor genau berechnet werden soll. Zumindest 2 Kommastellen sollten es schon sein: 0,00 - 1,00 Oder kann man nicht einfach Gleitkommazahlen verwenden? Also Float? Verwendet wird wie gesagt der GCC Kompiler Wegen der Geschwindigkeit: Muss ich morgen nocheinmal überprüfen. Der Regler ist ein analoger PI Regler. Dieser muss dann halt langsam genug sein.
>Hier wieder ein extra Spannungsteiler 10V -> 5V zu verwenden bringt mir >wieder einen Fehler durch die Bauteiltoleranzen. Es würden auch viele >Bauteiltoleranzen wegfallen wenn ich es per AVR und MAX127 umsetze. Denn >die AD633 oder auch OPV brauchen auch wieder Widerstände um die >Verhältnise anzupassen. Im Datenblatt vom MAX127 auf der Seite 9 sehe ich ebenfalls einen Spannungsteiler am Eingang.. Auch wenn dieser schon im Chip integriert ist. Aber wenn Du mit dem Baustein vertraut bist, kannst Du ihn natürlich verwenden. Nur bei dem Stückpreis + Zusatzaufwand für die I2C Kommunikation (-> evtl. erhöhte Laufzeit) würde ich mir doch überlegen den ADC zu verwenden, den der µC mitbringt.. Und bei 10-Bit Auflösung hast Du knapp 10mV pro Digit(!). Würd mich echt mal interessieren was Du da so baust, wenn die Auflösung nicht ausreicht ;-) Gruß Eugen
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.