Moin, ich würde gerne den Wert eines 10k Poti mit einem Arduino einlesen. Leider funktioniert das nur bedingt. Zunächst einmal verwende ich ein 5 V Schaltnetzteil von Meanwell und versorge damit über den VIN-Pin meinen Arduino. Die 5 V wollte ich auch dem Poti bereitstellen. Wenn ich den Poti jedoch betreibe erscheint z.B. bei der hälfte statt 1023/2 = 511 der Wert 800. Wenn ich den Poti direkt am 5V Pin vom Arduino anschließe, läuft alles wunderbar. Jedoch wollte ich die 5 V überall auf meiner Platine über das Netzteil zur Verfügung stellen und eigentlich müsste dann am Arduino Pin auch mein Wert 2,5V über den Poti ankommen, auch wenn von Extern mit 5V versorgt. Oder irre ich mich? -- Betreff korrigiert -rufus
:
Bearbeitet durch User
V+ und V- (5V Netzteil) direkt an der Arduni VIN und GND. Vom Netzteil V+ und V- außerdem direkt auf die Protoplatine. Aber ich bekomme immer den Wert 800 statt 511. Wenn ich den Poti am 5V Pin des Arduino anschließe, geht es ...
Vin geht an einen 5V Festspannungsregler. Der erwartet natürlich Vin > Vout und da du mit 5V rein gehst kommen <5V raus. Angenommen du nutzt Vdd als Vref für den ADC und die externen 5V für das Poti sind alle ADC Werte höher als angenommen, da Vref niedriger ist als du annimmst. Die externen 5V kommen an den 5V Pin des Arduino und nicht Vin.
10k Poti mit Arduino schrieb: > Zunächst einmal verwende ich ein 5 V Schaltnetzteil von Meanwell und > versorge damit über den VIN-Pin meinen Arduino. Dort werden aber mindestens 7V benötigt. > Wenn ich den Poti jedoch betreibe erscheint z.B. > bei der hälfte statt 1023/2 = 511 der Wert 800 Das ist logisch, denn dein Mikrocontroller bekommt zu wenig Versorgungsspannung, nämlich ca. 3V. Deswegen sind die Messwerte höher als erwartet. 3V / 1024 = 3mV 2,5V / 3mV = 833 -> Passt ungefähr Außerdem darf die Spannung am analogen Eingang nie höher sein, als die Versorgungsspannung des Mikrocontrollers. Lösungsvorschlag: a) Verwende ein Netzteil mit mindestens 7V an Vin. Außerdem sol das Poti an GND und 5V angeschlossen erden, nicht ans Netzteil. b) Schließe das Netzteil stattdessen an den +5V Pin an
Wollte dich jetzt nicht veräppeln. Was hast du denn für einen Arduino ? Wenn es einer mit 3,3 V ist dann würde der Wert nämlich passen.Bei VCC 3,3V wären 2,5V ungefähr der Wert 800. Eingang richtig konfiguriert....ach ne dann würde der Fehler nicht auftauchen, wenn du das vom Board direkt versorgst. Darum messe mal deine Spannung am RAW Eingang bzw VCC.....
Ok, V+ an 5V Anschluss vom Arduino geklemmt und an das Poti. FUnktioniert trotzdem nicht
Den 3,3 V Anschluss verwende ich nur für den Temperatursensor in Kombination mit VREF, damit der Wert etwas genauer ist ... Arduino Uno R3
10k Poti mit Arduino schrieb: > Ok, V+ an 5V Anschluss vom Arduino geklemmt und an das Poti. > FUnktioniert trotzdem nicht Welche Spannungen misst du am 5V Pin und am analogen Eingang? Zeige auch deinen Quelltext, da könnte nämlich auch ein Fehler sein.
Stefanus F. schrieb: > Welche Spannungen misst du am 5V Pin und am analogen Eingang? 5,1V ist keine Antwort auf die Frage.
10k Poti mit Arduino schrieb: > UNd an AREF 3,3 Aha. Dann müsste dein Messwert jetzt 1023 (nicht 800) sein. Denn du hast eine Referenz-Spannung von 3,3V, das wäre die maximal messbare Spannung. Wo kommen die 3,3V denn her? Wenn dein Mikrocontroller mit 5V versorgt wird, muss da irgendwo noch eine 3,3V Quelle sein. Welchen Arduino verwendest du? Arduino Uno R3 wird es wohl kaum sein, denn der hat mit 3,3V nichts zu tun.
Hab das Problem gefunden, aber noch keine Lösung. Ich verwende ja für meinen Thermistor 3,3V. Von den 3,3V geht ein Strang auf AREF. Das war ein Lösungsvorschlag von der Adafruit-Webseite, um die Genauigkeit zu erhöhen. Schließe ich 5V an VREF funktioniert es. Jetzt bleibt die Frage, wenn ich an VREF nichts anschliesse, wieso es dann nicht geht. Muss ich an VREF stets eine Spannungsquelle anschließen, wenn ich andere Bauteile von extern betreibe?
10k Poti mit Arduino schrieb: > Ich verwende ja für meinen Thermistor 3,3V. Zeige deinen Schaltplan und den Quelltext. benenne alle verwendeten Bauteile. Ich habe keine Lust mehr, dir jedes relevante Detail einzeln aus der Nase zu ziehen - vor allem wenn die Wahrheiten erst kommen, nachdem ich bewiesen habe, dass deine Infos falsch/unvollständig sind.
Schaltplan war dieser hier: https://learn.adafruit.com/thermistor/using-a-thermistor Da ich an VREF jedoch 3.3 V angehängt habe, bekam ich beim Poti den Wert 800. Ich werde einfach die 5V verwenden statt 3.3V. Die Messfehler beim Thermistor beziehen sich eher auf die Versorgung per USB.
Das ist kein Schaltplan, vor allem nicht deiner. Der Quelltext fehlt immer noch. Zwinge uns nicht dazu, Scheiße zu raten!
10k Poti mit Arduino schrieb: > Ich werde einfach die 5V verwenden statt 3.3V. Pack dein Poti einfach zwischen Aref und GND. Dann ist es egal, wie deine Referenzsspannung konfiguriert ist und ob deine Versorgungsspannung schwankt, du kannst immer aus dem ADC-Wert auf die Poti-Stellung schließen.
Εrnst B. schrieb: > Pack dein Poti einfach zwischen Aref und GND. Dann ist es egal, wie > deine Referenzsspannung konfiguriert ist nö Wenn er die Aref intern erzeugt, darf er sie nicht extern belasten. Deswegen sind Schaltplan und Quelltext wichtig.
1 | // 3-Pin Ventilator
|
2 | const int motorPin_Fan1 = 3; |
3 | int speed_Fan1; //Variable to store Speed, by defaul 0 PWM |
4 | int flag_Fan1; |
5 | const int potiPin_Fan1 = A2; |
6 | const int tachoPin_Fan1 = 2; // Pin des Tachosignals des Lüfters |
7 | // Variablen
|
8 | int fanSpeed_Fan1 = 0; // Variable für die Lüftergeschwindigkeit |
9 | int fanMin_Fan1 = 50; |
10 | int potiVar_Fan1 = 0 ; // Variable zum speichern des Potentiometereingangs |
11 | int abfrZeit_Fan1 = 1000; // Zeitabstand für die Abfragen des Tachosignals |
12 | long tachoMillis_Fan1 = abfrZeit_Fan1; // Zeitabstand für Pulse Stretching Funktion |
13 | float rps_Fan1 = 0; // Variable mit Kommastelle zur Berechnung der Umdrehungen pro Sekunde |
14 | int rpm_Fan1 = 0; // Variable für die gemittelte Drehzahl |
15 | float umdrZeit_Fan1 = 0; // Variable mit Kommastelle für die Zeit pro Umdrehung des Lüfters |
16 | float flankenZeit_Fan1 =0; // Variable mit Kommastelle für die Zeit pro Puls des Lüfters |
17 | |
18 | // 3-Pin Ventilator
|
19 | pinMode(motorPin_Fan1, OUTPUT); //Set pin 3 as an OUTPUT |
20 | pinMode(potiPin_Fan1, INPUT) ; // Setzt den LEDPin als Ausgang |
21 | pinMode(tachoPin_Fan1, INPUT); // Setzt den Tacho Pin als Eingang |
22 | |
23 | TCCR2B = (TCCR2B & 0b11111000) |0x01; // funktioniert noch nicht so, läuft ruckartig an. |
24 | |
25 | Serial.begin(9600); //Init serial communication |
26 | |
27 | void loop() |
28 | {
|
29 | int temp, fan1; |
30 | fan1 = Fan3Pin_out(); |
31 | LCD_out(temp, fan1); |
32 | |
33 | }
|
34 | |
35 | |
36 | // Lüfter 1 mit 3 Pin Anschluss
|
37 | int Fan3Pin_out() { |
38 | potiVar_Fan1 = analogRead(potiPin_Fan1) ; // Liest das Potentiometer aus |
39 | fanSpeed_Fan1 = map(potiVar_Fan1, 50, 1023, fanMin_Fan1, 255); // Verteilt den PWM Wert über den Messbereich des Potis |
40 | Serial.println("potiVar_Fan1"); |
41 | Serial.println(potiVar_Fan1); |
42 | // Unterer Potenziometerbereichs (0-50) = Lüfter aus
|
43 | if(potiVar_Fan1 < 50) |
44 | {
|
45 | fanSpeed_Fan1 = 0; |
46 | }
|
47 | |
48 | analogWrite(motorPin_Fan1, fanSpeed_Fan1); // Gibt die Variable mit PWM aus |
49 | |
50 | // Alle 2000ms pulse_stretch starten um die Drehzal auszulesen
|
51 | if((millis() - tachoMillis_Fan1) >= abfrZeit_Fan1) |
52 | {
|
53 | pulse_stretch_Fan1(); |
54 | }
|
55 | |
56 | delay(100); |
57 | return speed_Fan1; |
58 | }
|
Merkwürdig nur, dass wenn ich 5V an VIN anschließe und am 5V Pin des Arduino die 5V für den Poti nehme, geht es wunderbar. Oder Wenn ich VREF komplett abklemme ...
Du agierst planlos. Zeige Quelltext und Schaltplan. Und wenn du misst, zeichne ein, wo du was gemessen hast. An den Vin Pin musst du wie gesagt mindestens 7V anschließen, weil der Arduino sonst nur etwa 3V Spannungsversorgung hat. Wenn du dann das Poti an den 5V Pin anschließt, hat das auch nur 3V. Ich würde Dir empfehlen, das Programm auf ein Minimum zu reduzieren, wo das Problem noch gerade erkennbar und nachvollziehbar ist. Das hilft Dir, den Überblick nicht zu verlieren. So oder so kommst du nicht umhin, einen Schaltplan zu zeichnen. Du verzettelst dich sonst, und uns auch.
Kann ein Mod bitte Betreff und Name richtigrum drehen? Schon da scheint es beim TO ja zu scheitern. wendelsberg
Ich gehe nochmals alles Schritt für Schritt durch und werde mich melden, wenn ich alles sauber niedergeschrieben habe.
Gute Entscheidung. Folgende Spannungen sind hier relevant: Der ADC vergleicht seine Eingangsspannung mit Aref. Aref kann wahlweise von extern zugeführt werden, oder intern erzeugt werden (ist programmierbar). Sowohl die Spannung an Aref als auch am analogen Eingang darf nicht höher als die Stromversorgung des Mikrocontrollers sein, welche du am +5V Pin messen kannst. Der Spannungsregler auf dem Board benötigt mindestens 7V an Vin, um daraus 5V zu erzeugen.
Hi >Ich gehe nochmals alles Schritt für Schritt durch und werde mich melden, >wenn ich alles sauber niedergeschrieben habe. Dann korrigiere gleich den Fehler ADC value = Vi * 1023 / Varef in Datenblatt konformes ADC = VIN * 1024/VREF MfG Spess
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.