Ich habe ein Problem. Ich muss ein PWM Signal in ein Signal was 5 bis 255Hz hat umwandeln. Ich habe es, zum Testen, so aufgebaut gehabt das ich das PWM Signal über einen Optokoppler (PC817) laufen lasse und geschaut habe was für ein Wert am Display ausgegeben wird. Der Ausgegebene Wert bleibt bei DC 0-99 gleich erst ab DC 100 geht er auf 0. Nun habe ich dann noch die Möglichkeit gehabt die Hz des PWM Signals zu ändern und habe dann festgestellt das der niedrigste Wert, der mir angezeigt werden muss, 5Hz hat und der max Wert 255Hz. Nun wäre es ideal wenn ich mit dem DC des PWM Signals die Hz ändern könnte also 0 DC=1HZ und 99DC=255Hz. Ich habe schon etwas im Netz gesucht aber irgendwie nicht so richtig das gefunden was ich Suche oder aber es nicht verstanden. Könnt ihr mir da weiter helfen wie ich das Problem lösen kann?
Das PWM-Signal durch einen Tiefpass jagen und dann damit einen VCO a la 4066 steuern. Formeln zur Berechnung gibt's im Internet zur Genüge. Oder die Gleichspannung per uC auswerten und dann per Timer einen entsprechenden Takt generieren.
Voltage controled oszillator Oder du steckst ein wenig hirnschmalz in den code und hast die freie Auswahl mit welcher Frequenz (hz) und welchem puls pausen Verhältnis dein signal herumschwabbelt.
Danke für die schnellen Antworten! Ich habe mal etwas auf der Seite https://www.elektronik-kompendium.de/public/schaerer/vco.htm gestöbert und bin im Datenblatt vom MC14046BCL fündig geworden. Dort steht wenn VCOin = VDD, C1 50nf, R1 5k, R2 offen ist und 5V anliegen 0,5Mhz ausgegeben werden. Nun habe ich mal gerechnet. 10,2V/200pF*5k=0,255Mhz. 0,2V/200pF*5k=0,005Mhz. Ist jetzt auf die Minimumausgabe gerechnet. Passt das so? Welcher Tiefpass sollte da genommen werden und den PC817 muss ich ja dann nicht mehr verbauen? Der MC14046BCL kann ja bis +18V ab? Ich gehe dann vom Tiefpass auf VCOin und VDD?
Andreas M. schrieb: > 0,255Mhz Andreas M. schrieb: > 0,005Mhz Ich dachte du willst 5 Hz bis 255 Hz? 0,255 MHz sind aber 255 kHz - da liegt Faktor 1000 zu deinen 255 Hz dazwischen.
Andreas M. schrieb: > Welcher Tiefpass sollte da genommen werden DAS hängt von den Anforderungen an deine Regelgeschwindigkeit, Phasenrauschen durch Restripple und ähnlichem ab. Andreas M. schrieb: > Der MC14046BCL kann ja bis +18V > ab? Naja... laut absolute Maximum rating ja. Da ist dann aber kein Spielraum mehr für Fehler; ich würde ihm eher eine niedrigere Spannungsversorgung bspw. via Festspannungsregler verpassen.
Analog frickelt man sich da wirklich einen ab (untere/obere Frequenz, Linearität). Auch die Temperaturabhängigkeit wird kein Spaß. Ich nehme mal an, das Vorhaben ist auch irgendwo im KFZ Bereich angesiedelt... Das ist daher eine sehr typische Anwendung für einen Mikrocontroller. Auch die Reaktionsgeschwindigkeit ist wesentlich besser (1 PWM-Cycle).
:
Bearbeitet durch User
Stefan S. schrieb: > Andreas M. schrieb: >> 0,255Mhz > > Andreas M. schrieb: >> 0,005Mhz > > Ich dachte du willst 5 Hz bis 255 Hz? > 0,255 MHz sind aber 255 kHz - da liegt Faktor 1000 zu deinen 255 Hz > dazwischen. Oha da hab ich einmal 1000 vergessen. 10,2/400pF*0,010k=0,000255Mhz 255Hz 0,2/400pF*0,010k=0,000005Mhz 5Hz Stefan S. schrieb: > Andreas M. schrieb: >> Welcher Tiefpass sollte da genommen werden > > DAS hängt von den Anforderungen an deine Regelgeschwindigkeit, > Phasenrauschen durch Restripple und ähnlichem ab. > > Andreas M. schrieb: >> Der MC14046BCL kann ja bis +18V >> ab? > > Naja... laut absolute Maximum rating ja. Da ist dann aber kein > Spielraum mehr für Fehler; ich würde ihm eher eine niedrigere > Spannungsversorgung bspw. via Festspannungsregler verpassen. Als Maximalwert liegen 14,4V an. Das sollte eigentlich klappen. Von welchen Regelgeschwindigkeiten kann man denn ausgehen? Der Wert sollte sich schon innerhalb von 1s verändern. Joe F. schrieb: > Analog frickelt man sich da wirklich einen ab (untere/obere > Frequenz, > Linearität). > Auch die Temperaturabhängigkeit wird kein Spaß. > Ich nehme mal an, das Vorhaben ist auch irgendwo im KFZ Bereich > angesiedelt... > Das ist daher eine sehr typische Anwendung für einen Mikrocontroller. Ja ist im KFZ Bereich. Arduino Nano und Duemilanove sind auch vorhanden. So wie ich das gelesen habe ist das mit den Frequenzen dort aber nicht so einfach zu lösen. Ich habe ja noch eine weitere PC817 Schaltung um ein weiteres Signal auszuwerten. Ziel soll es dann sein beide Sachen auf einer Platine zu vereinen.
Andreas M. schrieb: > Arduino Nano und Duemilanove sind auch vorhanden. > So wie ich das gelesen habe ist das mit den Frequenzen dort aber nicht > so einfach zu lösen. Ausgangsseitig (5-255 Hz) kein Problem. Welche Frequenz hat denn die eingangsseitige PWM?
Joe F. schrieb: > Andreas M. schrieb: >> Arduino Nano und Duemilanove sind auch vorhanden. >> So wie ich das gelesen habe ist das mit den Frequenzen dort aber nicht >> so einfach zu lösen. > > Ausgangsseitig (5-255 Hz) kein Problem. > Welche Frequenz hat denn die eingangsseitige PWM? Die kann ich einstellen 0-255Hz 12V.
0 macht ja wenig Sinn. D.h du kannst die PWM z.B. auf 250 Hz einstellen (damit das System schnell reagiert), und das Puls-Pausenverhältnis variiert dann zwischen 0% und 100%. Daraus möchtest du dann bei 0% ein Ausgangssignal mit 5 Hz machen, und bei 100% soll 255 Hz rauskommen? Puls-Pausen-Verhältnis des Ausgangs wäre dann immer 50%. Soweit korrekt?
:
Bearbeitet durch User
Ja das ist so korrekt. Ich konnte das Puls-Pausen-Verhältnis (DC?) des Ausgangs von 0-99% verändern was bei dem Angezeigten Wert keine Änderung ergab. Das sollte dann mit 50% passen.
Moin, Ohje, das wird schon wieder so eine Spezialsalami. Naja, wurscht - hier mein Vorschlag: Mit dem PWM Signal wird ein hoeherfrequentes, konstantes Taktsignal (ein paar MHz) ge"gated" (also UND verknuepft). Das resultierende Signal kommt in einen Frequenzteiler, der durch so einen Faktor teilt, dass die Ausgangsfrequenz dann halt 255 Hz hat, wenn das PWM Signal immer high ist. Gruss WK
Also. Vom Prinzip her denke ich, dass das ganz locker mit einem Arduino zu machen wäre. Du würdest die PWM auf 51 Hz einstellen, und mit dem Arduino dieses Signal mit 5100 Hz abtasten (100-fache Überabtastung, für die 5100 Hz einen Timer-Interrupt verwenden). Dieses abgetastete Signal fütterst du in einen (Software-)Tiefpass mit einer Grenzfrequenz von sagen wir mal 20 Hz. Den Ausgangs-Wert des Tiefpasses (0..5100) skalierst du dann auf 1020..20 (dafür gibts ja diese schöne "map()" funktion...) und benutzt diesen Wert dann, um die Ausgangs-PWM zu steuern. Die Ausgangs-PWM kannst du im gleichen Timer-Interrupt erzeugen, der auch den Eingang abtastet, denn 5100 Hz / 1020 = 5 (Hz) und 5100 / 20 = 255 (Hz).
:
Bearbeitet durch User
Andreas M. schrieb: > Nun wäre es ideal wenn ich mit dem DC des PWM Signals die Hz ändern > könnte also 0 DC=1HZ und 99DC=255Hz. Ich habe schon etwas im Netz > gesucht aber irgendwie nicht so richtig das gefunden was ich Suche oder > aber es nicht verstanden. Das PWM-Signal zu einer Gleichspannung filtern und anschließend die Ausgangsfrequenz mit einem Spannungs/Frequenz-Wandler erzeugen: http://mino-elektronik.de/Generator/takte_impulse.htm#bsp6
m.n. schrieb: > Andreas M. schrieb: >> Nun wäre es ideal wenn ich mit dem DC des PWM Signals die Hz ändern >> könnte also 0 DC=1HZ und 99DC=255Hz. Ich habe schon etwas im Netz >> gesucht aber irgendwie nicht so richtig das gefunden was ich Suche oder >> aber es nicht verstanden. > > Das PWM-Signal zu einer Gleichspannung filtern und anschließend die > Ausgangsfrequenz mit einem Spannungs/Frequenz-Wandler erzeugen: > http://mino-elektronik.de/Generator/takte_impulse.htm#bsp6 Das sieht schon sehr gut aus. Ich brauche ja keine 5khz bei 5V. Würde es auch funktionieren wenn man anstatt #define F_MAX 5.0e3 // 5 kHz bei ADC-Eingang = Vcc das sagt? #define F_MAX 255 // 255Hz bei ADC-Eingang = Vcc Gleichspannung filtern dann wieder mit einem Tiefpass? Welcher wäre da dann schnell genug?
Andreas M. schrieb: > Das sieht schon sehr gut aus. Ich brauche ja keine 5khz bei 5V. Würde es > auch funktionieren wenn man anstatt > #define F_MAX 5.0e3 // 5 kHz bei ADC-Eingang = Vcc > > das sagt? > > #define F_MAX 255 // 255Hz bei ADC-Eingang = Vcc Ja. > Gleichspannung filtern dann wieder mit einem Tiefpass? Welcher wäre da > dann schnell genug? Das hängt von Deinen Anforderungen ab, ob ein Filter 2. oder 3. Ordnung reicht. Natürlich kann der µC die Pulsweite auch selber messen, wie es zuvor schon erwähnt wurde. Mit einem pin-change-interrupt bekommt man jeden Flankenwechsel und muß dazu den Timer lesen, um die Pulsweiten für '0' und '1'-Pegel des Signals zu messen. Dazu habe ich nichts Fertiges, bei den tiefen Frequenzen ist die Auswertung aber auch nicht sonderlich schwierig.
Habe gerade keinen Arduino hier, aber das hier könnte funktionieren. PWM muss auf 51 Hz eingestellt sein, input_pin und output_pin musst du dir noch entsprechend anpassen. Die Frequenz ändert sich in 101 Stufen, ich hoffe das reicht aus.
1 | #include "TimerOne.h" |
2 | |
3 | int input_pin = 13; |
4 | int output_pin = 14; |
5 | |
6 | uint8_t sample_cnt = 0; |
7 | uint8_t sample_sum = 0; |
8 | uint8_t pwm_step = 0; |
9 | |
10 | uint16_t freq_out_cnt = 0; |
11 | |
12 | uint16_t duration_table[101] = { |
13 | 16320, 10880, 8160, 6528, 5440, 4663, 4080, 3627, 3264, 2967, |
14 | 2720, 2511, 2331, 2176, 2040, 1920, 1813, 1718, 1632, 1554, |
15 | 1484, 1419, 1360, 1306, 1255, 1209, 1166, 1126, 1088, 1053, |
16 | 1020, 989, 960, 933, 907, 882, 859, 837, 816, 796, 777, 759, |
17 | 742, 725, 710, 694, 680, 666, 653, 640, 628, 616, 604, 593, |
18 | 583, 573, 563, 553, 544, 535, 526, 518, 510, 502, 495, 487, |
19 | 480, 473, 466, 460, 453, 447, 441, 435, 429, 424, 418, 413, |
20 | 408, 403, 398, 393, 389, 384, 380, 375, 371, 367, 363, 359, |
21 | 355, 351, 347, 344, 340, 336, 333, 330, 326, 323, 320 |
22 | };
|
23 | |
24 | |
25 | void timer_int() |
26 | {
|
27 | // sample PWM input
|
28 | if (digitalRead(input_pin)) |
29 | sample_sum++; |
30 | |
31 | sample_cnt++; |
32 | if (sample_cnt >= 100) |
33 | {
|
34 | pwm_step = sample_sum; |
35 | sample_sum = 0; |
36 | sample_cnt = 0; |
37 | }
|
38 | |
39 | // output
|
40 | freq_out_cnt += 16; |
41 | if (freq_out_cnt >= duration_table[pwm_step]) |
42 | {
|
43 | digitalWrite(output_pin, 1); |
44 | freq_out_cnt -= duration_table[pwm_step]; |
45 | }
|
46 | else if (freq_out_cnt > duration_table[pwm_step]/2) |
47 | {
|
48 | digitalWrite(output_pin, 0); |
49 | }
|
50 | }
|
51 | |
52 | void setup() |
53 | {
|
54 | pinMode(output_pin, OUTPUT); |
55 | pinMode(input_pin, INPUT); |
56 | Timer1.initialize(196); // 5102 Hz |
57 | Timer1.attachInterrupt(timer_int); |
58 | }
|
59 | |
60 | void loop() |
61 | {
|
62 | }
|
:
Bearbeitet durch User
Stefan S. schrieb: > Ich dachte du willst 5 Hz bis 255 Hz? > 0,255 MHz sind aber 255 kHz - da liegt Faktor 1000 zu deinen 255 Hz > dazwischen. Es ist erschreckend zu sehen, dass der TE nicht einmal in der Lage ist, die Aufgabe vollständig zu beschreiben. Es fehlt entweder die Angabe über die Eingangsfreuqenz der PWM oder die der Ausgangsfrequenz, je nachdem wie man es liest.
Joe F. schrieb: > Habe gerade keinen Arduino hier, aber das hier könnte > funktionieren. > PWM muss auf 51 Hz eingestellt sein, input_pin und output_pin musst du > dir noch entsprechend anpassen. > Die Frequenz ändert sich in 101 Stufen, ich hoffe das reicht aus. > Danke! Das werde ich mal testen.
Habe mir mal nen Arduino Uno besorgt und etwas rumgebastelt. Anbei der Code für 2 Kanäle. Auf Pin 3 sollte ein 5100 Hz Rechteck zu sehen sein, wenn die Frequenz nicht 5100 Hz ist, muss
1 | Timer1.initialize(98); // 5102 Hz |
entsprechend angepasst werden. Beschaltung: PWM Inputs: Pin 8 und 9 (Eingangsfrequenz sollte so um die 51 Hz liegen) Freq Outputs: Pin 12 und 13 (5..255 Hz) Debug Output: Pin 11 (5100 Hz) Wenn man das "EMULATE_PWM_SOURCE" define aktiviert, ist auf Pin 3 eine PWM, die durch loop() erzeugt wird. Die kann man zum Testen hernehmen. Duty-cycle wird durch "PWM_EMULATION_ON_TIME" eingestellt. Viel Spaß damit.
Gaspedalstellung vs Motordrehzahl? Die Frequenz ist Motordrehzahlbahängig, die Pulsweite abhängig von der Gaspedalstellung, wie dein Oberes Linkes MAPFilezu zeigen scheint. Möchtest Du "Injektor5" anzapfen und prozentual ausgeben, um irgendwie die Motorleistung in Prozent darzustellen?
Joe F. schrieb: > Habe mir mal nen Arduino Uno besorgt und etwas rumgebastelt. > > Anbei der Code für 2 Kanäle. > Auf Pin 3 sollte ein 5100 Hz Rechteck zu sehen sein, wenn die Frequenz > nicht 5100 Hz ist, mussTimer1.initialize(98); // 5102 Hz > entsprechend angepasst werden. > > Beschaltung: > PWM Inputs: Pin 8 und 9 (Eingangsfrequenz sollte so um die 51 Hz liegen) > Freq Outputs: Pin 12 und 13 (5..255 Hz) > Debug Output: Pin 11 (5100 Hz) > > Wenn man das "EMULATE_PWM_SOURCE" define aktiviert, ist auf Pin 3 eine > PWM, die durch loop() erzeugt wird. Die kann man zum Testen hernehmen. > Duty-cycle wird durch "PWM_EMULATION_ON_TIME" eingestellt. > > Viel Spaß damit. Noch eine Verständnisfrage. Da ich ein +12V PWM Signal habe der Arduino aber nur +5V erkennen kann sollte ich das PWM Signal über einen Spannungsteiler auf max. +5V bringen? Das ausgegebene Frequenzsignal sollte dann wieder über den Optocoppler laufen oder direkt an das Display angeschlossen werden? Äxl (geloescht) schrieb: > Gaspedalstellung vs Motordrehzahl? > Die Frequenz ist Motordrehzahlbahängig, die Pulsweite abhängig von der > Gaspedalstellung, wie dein Oberes Linkes MAPFilezu zeigen scheint. > Möchtest Du "Injektor5" anzapfen und prozentual ausgeben, um irgendwie > die Motorleistung in Prozent darzustellen? Ja so in etwa.
Andreas M. schrieb: > Da ich ein +12V PWM Signal habe der Arduino > aber nur +5V erkennen kann sollte ich das PWM Signal über einen > Spannungsteiler auf max. +5V bringen? > > Das ausgegebene Frequenzsignal sollte dann wieder über den Optocoppler > laufen Bei diesen relativ niedrigen Frequenzen und generell im KFZ Bereich ist eine galvanische Trennung durch Optokoppler eine sehr gute Idee. Ich würde das sowohl Eingangs- als auch Ausgangsseitig machen. Jeweils eine anti-parallele Diode an dein Eingangs-Optokopplern schützt diese auch vor negativen Transienten.
:
Bearbeitet durch User
Beitrag #5523278 wurde vom Autor gelöscht.
Ich würde es jetzt mit dem Optokoppler so testen. Wie sollte ich da noch eine anti-parallele Diode verwenden?
Andreas M. schrieb: > Wie sollte ich da noch eine anti-parallele Diode verwenden? Da, wo die LED des Optokopplers angeschlossen ist.
Beitrag #5524319 wurde vom Autor gelöscht.
s.o. Der 3.3K Pulldown am Eingang des Arduinos ist evtl. ein bisschen zu niederohmig. Da kann man auch 10K...33K nehmen.
:
Bearbeitet durch User
Ich bin nun mal dazu gekommen es zu testen. Mit der gezeigten Schaltung, oben, funktionierte es nicht. Das Display zeigte mir schon ohne Arduino entweder den vollen Wert oder 0 an. Ich habe es jetzt so angeschlossen wie ich es auch getestet hatte doch leider wurde nichts angezeigt. Ich habe dann mal mit Pin3 getestet > Wenn man das "EMULATE_PWM_SOURCE" define aktiviert, ist auf Pin 3 eine > PWM, die durch loop() erzeugt wird. Die kann man zum Testen hernehmen. > Duty-cycle wird durch "PWM_EMULATION_ON_TIME" eingestellt. Da zeigt mir mein Display dann schön den Wert an den ich einstelle. Also funktioniert die Ausgangsseite schon einmal. Nun habe ich mal das PWM Signal mit meinem Multimeter gemessen. Wenn ich das PWM Signal gegen Masse messe habe ich bei DC1 0,17V und bei DC99 0V. Dann habe ich das PWM Signal gegen +12V gemessen da habe ich bei DC1 10,70V und bei DC99 12,10V gemessen. Ich glaube mein Steuergerät gibt nicht wirklich ein PWM Signal raus sondern nur ein getaktetes Massesignal. Joe F. schrieb: > s.o. > Der 3.3K Pulldown am Eingang des Arduinos ist evtl. ein bisschen zu > niederohmig. > Da kann man auch 10K...33K nehmen. Kann es an dem Pulldown liegen das der Arduino nichts erkennt? Ich habe das gerade erst gelesen das ich 10k oder 33K nehmen soll. Getestet habe ich es mit 3.3K
Andreas M. schrieb: > Ich glaube mein Steuergerät gibt nicht wirklich ein PWM Signal raus > sondern nur ein getaktetes Massesignal. Das nennt sich dann "Open-Collector" Ausgang. Versuchs mal so wie im Anhang. Und: was für einen Optokoppler hast du verwendet?
:
Bearbeitet durch User
Joe F. schrieb: > Und: was für einen Optokoppler hast du verwendet? Sharp PC817
:
Bearbeitet durch User
Ich habe es jetzt mit 10k, 20k und 30k versucht. Leider gibt der Arduino keinen Wert aus. Es scheint als würde er das Signal nicht erkennen. Zum testen an Pin3 angeschlossen da wird mir ein Wert angezeigt.
Ist es jetzt so angeschlossen wie hier? Beitrag "Re: PWM Signal in Hz Umwandeln" Was misst dein Multimeter jetzt zwischen a) KFZ_OUTPUT und KFZ_GND und b) zwischen ARDUINO_INPUT und ARDUINO_GND bei verschiedenen PWM Stufen? Hast du die PWM Frequenz auf ca. 50 Hz eingestellt? Ist die zusätzliche Schutzdiode am Optokoppler evtl. falsch herum eingebaut?
:
Bearbeitet durch User
Ist es jetzt so angeschlossen wie hier? Beitrag "Re: PWM Signal in Hz Umwandeln" Ja. a) KFZ_OUTPUT und KFZ_GND 0,20V und 11,90V bei 1%DC und 99%DC b) zwischen ARDUINO_INPUT und ARDUINO_GND 0.0V und 4,90V je nach DC mit 10K Widerstand Signal steht auf 50HZ Schutzdiode ist so wie eingezeichnet drin. Arduino Output zu GND 0,80V egal welche DC Arduino Pin3 Test Pin zu GND 1,20V
:
Bearbeitet durch User
Andreas M. schrieb: > a) KFZ_OUTPUT und KFZ_GND 0,20V und 11,90V bei 1%DC und 99%DC > b) zwischen ARDUINO_INPUT und ARDUINO_GND 0.0V und 4,90V je nach DC > mit 10K Widerstand Das ist schon mal ein sehr gutes Zeichen. Dann funktioniert der Optokoppler schon mal richtig. Andreas M. schrieb: > Arduino Pin3 Test Pin zu GND 1,20V Wieso Pin 3? Die Pinbelegung bei mir war 8 und 9 -> PWM inputs 12 und 13 -> freq outputs 11 - test PWM output An welchen Pin hast du den Optokoppler denn angeschlossen? Oder hast du an der Pinbelegung etwas geändert.
Du hast oben geschrieben > Wenn man das "EMULATE_PWM_SOURCE" define aktiviert, ist auf Pin 3 eine > PWM, die durch loop() erzeugt wird. Die kann man zum Testen hernehmen. > Duty-cycle wird durch "PWM_EMULATION_ON_TIME" eingestellt. Das ist jetzt aktiviert und ich habe am Pin 3 1,20V gemessen und das Display zeigt mir dann auch einen Wert an. >Die Pinbelegung bei mir war >8 und 9 -> PWM inputs >12 und 13 -> freq outputs >11 - test PWM output >An welchen Pin hast du den Optokoppler denn angeschlossen? >Oder hast du an der Pinbelegung etwas geändert. Ich habe nur EMULATE_PWM_SOURCE aktiviert der Rest ist so wie du es geschrieben hast. Die LED des Arduino blinkt eigentlich permanent wenn ich den Input an Pin9 stecke hört sie auf mit blinken. Wenn ich den Input an Pin8 stecke blinkt sie weiter permanent. Output habe ich an Pin12.
wg. Pin 3, ja, war zu doof meinen eigenen Code zu lesen. Ich glaube im Code ist noch ein Fehler: ersetze mal in setup()
1 | for (ch=0; ch<2; ch++) |
2 | {
|
3 | pinMode(output_pin, OUTPUT); |
4 | pinMode(input_pin, INPUT); |
5 | }
|
durch
1 | for (ch=0; ch<2; ch++) |
2 | {
|
3 | pinMode(output_pin[ch], OUTPUT); |
4 | pinMode(input_pin[ch], INPUT); |
5 | }
|
Joe F. schrieb: > wg. Pin 3, ja, war zu doof meinen eigenen Code zu lesen. > > Ich glaube im Code ist noch ein Fehler: > > ersetze mal in setup() > for (ch=0; ch<2; ch++) > { > pinMode(output_pin, OUTPUT); > pinMode(input_pin, INPUT); > } > > durch > for (ch=0; ch<2; ch++) > { > pinMode(output_pin[ch], OUTPUT); > pinMode(input_pin[ch], INPUT); > } Genau das war es! Nun funktioniert es. Super! Kann man es noch so einstellen das wenn kein PWM Signal anliegt auch kein Wert ausgegeben wird? Jetzt ist es so wenn PWM 0 ist mir das Display noch einen Wert anzeigt. Anscheinend muss der kleinste Wert nicht 1Hz sein sondern 0Hz.
Andreas M. schrieb: > Kann man es noch so einstellen das wenn kein PWM Signal anliegt auch > kein Wert ausgegeben wird? Klar kann man das machen. > Jetzt ist es so wenn PWM 0 ist mir das > Display noch einen Wert anzeigt. Anscheinend muss der kleinste Wert > nicht 1Hz sein sondern 0Hz. Ursprünglich war die niedrigste Frequenz mal 5 Hz (so ist es auch implementiert). Wie soll es nun sein? a) PWM 0%..99% -> Ausgang 0..255 Hz oder b) PWM 0% -> Ausgang 0 Hz PWM 1%..99% -> Ausgang 1..255 Hz
Hallo Ich bin jetzt dazu gekommen es ausgiebiger zu Testen und mir ist aufgefallen das ich nach ca. 10min Laufzeit den Input Dc erhöhen muss um den gleiche Output angezeigt zu bekommen. Als Beispiel: In den ersten 10min ist Input Dc5 immer der Wert 10, nach 10min muss ich den Input eigentlich permanent erhöhen um die 10 angezeigt zu bekommen. Wenn ich den Arduino neu starte kann ich dann wieder ca. 10 mit DC5 den Wert 10 anzeigen lassen und muss dann wieder den Dc erhöhen. Könntest du da noch einmal drüber schauen?
Die Software kann eigentlich nicht "driften". Was passiert denn, wenn du statt deiner externen PWM-Quelle die vom Arduino selbst erzeugte PWM als Input nimmst (#define EMULATE_PWM_SOURCE)? Driftet es dann auch? Wird irgendwas in deiner Schaltung aussergewöhnlich warm? Was für Vorwiderstände hast du für die Optokoppler genommen?
(#define EMULATE_PWM_SOURCE)? Damit habe ich es noch nicht getestet, werde ich am We dann mal machen. Widerstände sind so wie auf dem Bild. 1k am Input, 10k Arduino Input zu Gnd und 220 bei Arduino Output.
Ich habe es heute mit (#define EMULATE_PWM_SOURCE) getestet und es dauert ca.20 min bis dann 0 oder kein Wert mehr angezeigt wird. Nach einem Neustart des Arduino dauert es dann wieder ca. 20min. Die Bauteile haben alle eine normale Temperatur.
Das ist ja höchst seltsam. Hast du ein Oszilloskop, mit dem du die PWMs mal vor und hinter dem Ausgangs-Optokoppler (Arduino -> KFZ) messen könntest? Du könntest mal statt 220 Ohm auch einen etwas größeren Widerstand ausprobieren (z.B. 470, 680 Ohm). Evtl. wird die LED im Optokoppler mit der Zeit warm.
:
Bearbeitet durch User
Ich habe jetzt mal den 680 Ohm getestet. Als mir dann wieder 0 angezeigt wurde hat der Reset des Arduino dann aber keine Änderung mehr gebracht. Es blieb dann bei der Anzeige 0. Ein Oszilloskop habe ich, aber noch nie wirklich genutzt. Das werde ich am Mittwoch dann mal machen.
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.