Forum: Analoge Elektronik und Schaltungstechnik Drehspulmesswerk anschliessen


von Thomas A. (tom2jump)


Lesenswert?

Hallo
Es gab hier schon verschiedene Beiträge zu Uhren die mit 
Drehspulmesswerken (3 Stück) betrieben werden.(aber die Links in den 
Beiträgen sind tot)

Nun war ich am Nachbau dieser Uhr:
https://michaelteeuw.nl/post/what-time-is-it-fathers-day

Soweit funktioniert auch alles sehr gut.
Nun ist es aber so das bei dem Drehspulmesswerken Spannungen von 335mV 
bis 5V vom Ausgang des Arduino anliegen.
In dem Moment wo die 5V anliegen und in der nächsten Sekunde wieder die 
335mV anliegen, schlägt der Zeiger des Instrumentes nach links.
Nun ist meine Vorstellung das der Zeiger "sanfter" zurück geht.

Wie kann ich das machen?
Ich dachte an einen Elko parallel zum Instrument.

Ich hoff ich habe es verständlich erklärt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas A. schrieb:
> Uhren die mit Drehspulmesswerken (3 Stück) betrieben werden.
Da könnte man glatt herauslesen, dass die Versorgung der Uhr aus den 
Messwerken kommt...  ;-)

> Nun ist meine Vorstellung das der Zeiger "sanfter" zurück geht.
> Wie kann ich das machen?
> Ich dachte an einen Elko parallel zum Instrument.
Ja, mach noch einen Widerstand in Reihe. Das nennt sich dann Tiefpass. 
Was hast du denn für Messwerke (wieviele mA bzw. µA)? Und wie hast du 
sie angeschlossen? Evtl. ist ja der Widerstand schon drin.

von H. H. (Gast)


Lesenswert?

Lothar M. schrieb:
> Ja, mach noch einen Widerstand in Reihe.

Der ist ja im Messwerkgehäuse schon drin.

Also auch den Kondensator ins Messwerkgehäuse bauen, oder beide nach 
außen.

von Mario M. (thelonging)


Lesenswert?

Warum nicht per Software? Statt PWM von 255 direkt auf 0 zu setzen, kann 
man das in mehreren Stufen mit entsprechendem zeitlichen Abstand machen.

von Andrew T. (marsufant)


Lesenswert?

Lothar M. schrieb:
> Was hast du denn für Messwerke (wieviele mA bzw. µA)?

Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA 
.

von Thomas A. (tom2jump)


Lesenswert?

Mario M. schrieb:
> Warum nicht per Software? Statt PWM von 255 direkt auf 0 zu setzen, kann
> man das in mehreren Stufen mit entsprechendem zeitlichen Abstand machen.

Nun mit dem programmieren vom Arduino kenne ich mich nicht so aus.
Der Sketch sieht so aus:
1
/**
2
 * An Arduino Volt Meter Analog Clock based on a TinyRTC real time clock.
3
 *
4
 * For more info about this project, check out my blog for the full story
5
 * images, and the endresult of the project:
6
 * http://michaelteeuw.nl/post/174972004187/what-time-is-it- fathers-day
7
 *
8
 * LICENSE: Permission is hereby granted, free of charge, to any person
9
 * obtaining a copy of this software and associated documentation files
10
 * (the "Software"). For more info see LICENSE file.
11
 *
12
 * @category   CategoryName
13
 * @package    PackageName
14
 * @author     Michael Teeuw
15
 * @copyright  2018
16
 * @license    https://opensource.org/licenses/MIT
17
 * @link       http://michaelteeuw.nl
18
 */
19
20
#include <Arduino.h>
21
#include <Wire.h>
22
23
#include "RTClib.h" // https://github.com/adafruit/RTClib
24
25
// Define the Pins we are using.
26
#define PIN_BUTTON_HOUR 7
27
#define PIN_BUTTON_MIN 8
28
#define PIN_METER_HOUR 3
29
#define PIN_METER_MIN 5
30
#define PIN_METER_SEC 6
31
32
// Define the minimum and maximum PWM values for all the meters.
33
// These values can be used to calibrate the meters.
34
#define MINIMUM_PWM_VALUE_HOUR 15
35
#define MAXIMUM_PWM_VALUE_HOUR 240
36
#define MINIMUM_PWM_VALUE_MIN 15
37
#define MAXIMUM_PWM_VALUE_MIN 254
38
#define MINIMUM_PWM_VALUE_SEC 15
39
#define MAXIMUM_PWM_VALUE_SEC 240
40
41
// Create the real time clock instance.
42
RTC_DS1307 rtc;
43
44
/**
45
 * Slowly animate one meter to the maximum value and back.
46
 * This animation is used in the start sequence. Not only does it look
47
 * cool. It's also a way to test the meters.
48
 *
49
 * @param uint8_t pin  The pin of the meter.
50
 * @param uint8_t min  The meter's minimum PWM value.
51
 * @param uint8_t max  The meter's maximum PWM value.
52
 */
53
void animateMeter(uint8_t pin, uint8_t min, uint8_t max) {
54
  uint8_t v;
55
  for (v = min; v <= max; v++) {
56
    analogWrite(pin, v);
57
    delay(2);
58
  }
59
  delay(100);
60
  for (v = max; v >= min; v--) {
61
    analogWrite(pin, v);
62
    delay(2);
63
  }
64
  delay(100);
65
}
66
67
/**
68
 * Run the startup sequence by animating all three meters sequentially.
69
 */
70
void startSequence() {
71
  animateMeter(PIN_METER_HOUR, MINIMUM_PWM_VALUE_HOUR, MAXIMUM_PWM_VALUE_HOUR);
72
  animateMeter(PIN_METER_MIN, MINIMUM_PWM_VALUE_MIN, MAXIMUM_PWM_VALUE_MIN);
73
  animateMeter(PIN_METER_SEC, MINIMUM_PWM_VALUE_SEC, MAXIMUM_PWM_VALUE_SEC);
74
}
75
76
/**
77
 * The method to update the time displayed on the the meter.
78
 */
79
void displayTime() {
80
  // Retrieve the time from the real time clock.
81
  DateTime now = rtc.now();
82
83
  // Since the real time clock returns a 24 hour format,
84
  // we need to convert the hour value to 12 hour format.
85
  // For minutes and seconds we can just directly use the
86
  // properties on the 'now' object. No need to store those
87
  // in a temporary variable.
88
  int8_t h = (now.hour() == 0 || now.hour() == 12) ? 12 : now.hour() % 12;
89
90
  // Convert the time values to PWM values by using map ...
91
  // and set that value as the PWM value using analogWrite.
92
  analogWrite(PIN_METER_HOUR, map(h, 1, 12, MINIMUM_PWM_VALUE_HOUR, MAXIMUM_PWM_VALUE_HOUR));
93
  analogWrite(PIN_METER_MIN, map(now.minute(), 0, 60, MINIMUM_PWM_VALUE_MIN, MAXIMUM_PWM_VALUE_MIN));
94
  analogWrite(PIN_METER_SEC, map(now.second(), 0, 60, MINIMUM_PWM_VALUE_SEC, MAXIMUM_PWM_VALUE_SEC));
95
96
  // For debuging purposes, write the time to the
97
  // Serial port as well.
98
  Serial.print(h);
99
  Serial.print(":");
100
  Serial.print(now.minute());
101
  Serial.print(":");
102
  Serial.println(now.second());
103
}
104
105
/**
106
 * The setup method used by the Arduino.
107
 */
108
void setup () {
109
  // Initiate the serial port for debugging purposes.
110
  Serial.begin(9600);
111
112
  // Configure all the pin modes for all connected pins.
113
  pinMode(PIN_BUTTON_HOUR, INPUT_PULLUP);
114
  pinMode(PIN_BUTTON_MIN, INPUT_PULLUP);
115
  pinMode(PIN_METER_HOUR, OUTPUT);
116
  pinMode(PIN_METER_MIN, OUTPUT);
117
  pinMode(PIN_METER_SEC, OUTPUT);
118
119
  // Start the real time clock.
120
  rtc.begin();
121
122
  // If the real time clock is not running,
123
  // for example after the battery was replaced,
124
  // start it by setting the time.
125
  if (!rtc.isrunning()) {
126
    rtc.adjust(DateTime(2018, 6, 17, 0, 0, 0));
127
  }
128
129
  // Initiate the power-on self test by running the start sequence.
130
  startSequence();
131
}
132
133
/**
134
 * The main runloop used by the Arduino.
135
 */
136
void loop () {
137
    // Update the meters by calling the `displayTime()` method.
138
    displayTime();
139
140
    // Check if we pressed the button to adjust the hour ...
141
    // Repeat the following loop for as long as we hold this button.
142
    while (!digitalRead(PIN_BUTTON_HOUR)) {
143
      // Grab the current time.
144
      DateTime now = rtc.now();
145
146
      // Set the RTC time by using the current time and increaing the hour by one.
147
      // By using the % 24, it will automaticly overflow to 0 when it reaches 24.
148
      // The seconds are simply reset.
149
      rtc.adjust(DateTime(now.year(), now.month(), now.day(), (now.hour() + 1) % 24, now.minute(), 0));
150
151
      // Update the display to reflect the changes.
152
      displayTime();
153
154
      // Wait half a second before we check again to see
155
      // if the button is still pressed.
156
      delay(500);
157
    }
158
159
    // Check if we pressed the button to adjust the minutes ...
160
    // Repeat the following loop for as long as we hold this button.
161
    while (!digitalRead(PIN_BUTTON_MIN)) {
162
      // Grab the current time.
163
      DateTime now = rtc.now();
164
165
      // Set the RTC time by using the current time and increaing the minutes by one.
166
      // By using the % 60, it will automaticly overflow to 0 when it reaches 60.
167
      // The seconds are simply reset.
168
      rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), (now.minute() + 1) % 60, 0));
169
170
      // Update the display to reflect the changes.
171
      displayTime();
172
173
      // Wait a quarter of a second before we check again to see
174
      // if the button is still pressed.
175
      delay(250);
176
    }
177
178
    // Wait for 1 second before we start all over again.
179
    delay(1000);
180
}

Mod: bitte c-Tags das nächste Mal selber einfügen. Siehe die 
BEdienungsanleitung über jeder Texteingabebox unter "Wichtige Regeln - 
erst lesen, dann posten!"

: Bearbeitet durch Moderator
von Thomas A. (tom2jump)


Lesenswert?

Andrew T. schrieb:
> Lothar M. schrieb:
>> Was hast du denn für Messwerke (wieviele mA bzw. µA)?
>
> Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA
> .

Die Messwerke sind für 300V. Da ist intern ein Widerstand zwischen "+" 
und Messwerk in Reihe von 115k Ohm verbaut. Zwischen "-" und Messwerk 
eine Diode.
Parallel zum Messwerk ein Elko.
Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V 
zu nutzen.

von Andrew T. (marsufant)


Lesenswert?

Thomas A. schrieb:
> Andrew T. schrieb:
>> Lothar M. schrieb:
>>> Was hast du denn für Messwerke (wieviele mA bzw. µA)?
>>
>> Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA
>> .
>
> Die Messwerke sind für 300V. Da ist intern ein Wider....
> Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V
> zu nutzen.


Der Holländer schreibt 5,6,k um auf 5V Fullscale  zu kommen.
Daher schrieb ich 0,9 mA

von Thomas A. (tom2jump)


Lesenswert?

Andrew T. schrieb:
> Der Holländer schreibt 5,6,k um auf 5V Fullscale  zu kommen.
> Daher schrieb ich 0,9 mA

Das sind Voltmeter. Hat ja nichts mit Ampere zu tun.
Der Holländer hat auch probiert welcher Widerstand passt um die Skala 
bei 5V zu nutzen. Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk. 
Später werde ich die Festwiderstände durch 10Gang Spindel-Widerstände 
ersetzen um bei 5V 100% die Skala zu nutzen. Da haben die Messwerke halt 
eine Toleranz.(China halt)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas A. schrieb:
> Das sind Voltmeter. Hat ja nichts mit Ampere zu tun
Ausnahmslos jedes magnetische Drehspulmessgerät ist ein Strommesser. 
Die Spannung wird durch einen Vorwiderstand in einen passenden Strom 
umgewandelt, der zum gewünschten Ausschlag führt.

> Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk.
Dann mach einfach hinter diesen Widerstand deinen Elko im Bereich um 
100µF.

Thomas A. schrieb:
> Die Messwerke sind für 300V.
Ach so, AC. Und die Diode hat nur 1 Halbwelle durchgelassen. Dann passen 
die 0,9mA wieder zu den 115k.

> Parallel zum Messwerk ein Elko.
Welchen Wert hat der?

Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset 
weg.

: Bearbeitet durch Moderator
von Thomas A. (tom2jump)


Lesenswert?

Lothar M. schrieb:
>> Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk.
> Dann mach einfach hinter diesen Widerstand deinen Elko im Bereich um
> 100µF.
>
Dann bewegt sich der Zeiger nicht mehr.

> Thomas A. schrieb:
>> Die Messwerke sind für 300V.
> Ach so, AC. Und die Diode hat nur 1 Halbwelle durchgelassen. Dann passen
> die 0,9mA wieder zu den 115k.
>
>> Parallel zum Messwerk ein Elko.
> Welchen Wert hat der?
>
47µF
> Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset
> weg.
Ohne Diode sind die 335mV immer noch zu messen. Aber das ist kein 
Problem.

von Mario M. (thelonging)


Lesenswert?

Thomas A. schrieb:
> Nun mit dem programmieren vom Arduino kenne ich mich nicht so aus.
> Der Sketch sieht so aus

Ok, ist der übliche Arduino-delay-Müll, da kommt der Einbau einer 
Decay-Funktion einer Neuprogrammierung gleich. Also besser doch die 
Kondensator-Variante.

Thomas A. schrieb:
> Ohne Diode sind die 335mV immer noch zu messen. Aber das ist kein
> Problem.

Der Offset ist notwendig, um bei den verwendeten DrehEISENmesswerken aus 
dem nichtlinearen Bereich der Skala zu kommen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mario M. schrieb:
> Ok, ist der übliche Arduino-delay-Müll, da kommt der Einbau einer
> Decay-Funktion einer Neuprogrammierung gleich.
Genau das habe ich mir auch gedacht. Wenn ich ein delay(1000) sehe, weiß 
ich sicher, dass so ein Programm ohne Nachdenken kurz mal lieblos 
hingekritzelt und garantiert nicht einfach erweiterbar ist.

Thomas A. schrieb:
> Dann bewegt sich der Zeiger nicht mehr.
Dann hast du irgendwas falsch gemacht. Denn wenn der Zeiger mit den 
bestehenden 47µF an den Anschlag knallt, dann ist es *äusserst 
unwahrscheinlich*, dass er sich mit 100µF gar nicht mehr bewegt.

Thomas A. schrieb:
> 47µF
>> Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset
>> weg.
> Ohne Diode sind die 335mV immer noch zu messen.
Na klar, du gibst die ja auch aus. Aber: der Zeiger schlägt dann schon 
aus, wo er vorher noch links am Anschlag geklebt hat.

Ich würde an dieser Stelle dringend vorschlagen, dass du mal versuchst, 
deine Schaltung wie in der Elektronik üblich in einen Schaltplan zu 
malen. Denn Schaltpläne sind die Sprache der Elektronik.

von H. H. (Gast)


Lesenswert?

Thomas A. schrieb:
> Parallel zum Messwerk ein Elko.
> Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V
> zu nutzen.

Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko 
dazwischen anschließt, dann braucht man weniger Kapazität.

von Mario M. (thelonging)


Lesenswert?

Meine Überschlagsrechnung ergibt, dass das Messwerk einen 
Innenwiderstand von ca. 400 Ohm haben dürfte. Da die vollständige 
Umladung eines Kondensators ca. 5 Tau dauert, ergibt sich bei einer 
Kapazität von 100 uF eine Zeit von rund 0,2 Sekunden, was fast noch 
etwas zu wenig wäre.

von Dietrich L. (dietrichl)


Lesenswert?

Lothar M. schrieb:
> Thomas A. schrieb:
>> Dann bewegt sich der Zeiger nicht mehr.
> Dann hast du irgendwas falsch gemacht. Denn wenn der Zeiger mit den
> bestehenden 47µF an den Anschlag knallt, dann ist es *äusserst
> unwahrscheinlich*, dass er sich mit 100µF gar nicht mehr bewegt.

Vielleicht hat er den Kondensator in Reihe geschaltet?

von Thomas A. (tom2jump)


Angehängte Dateien:

Lesenswert?

so. Habe wieder Zeit mich mit dem Problem zu beschäftigen. Habe leider 
nicht immer die Zeit dafür.
In Bild 1 ist die originale Beschaltung des Messwerkes. Diese hatte ich 
nur soweit geändert indem ich den Widerstand (von 115k zu 4,7k) an die 
Skala angepasst habe (Bild 2). Dann habe ich versucht den 25µF Elko 
durch 100µF bzw. 1000µF zu ersetzen.
Bei 1000µF bewegt sich meiner Meinung nach der Zeiger nicht linear.

Bei der Schaltung Bild 3 habe ich mit den gleichen Werten von Elko 
experimentiert.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Thomas A. schrieb:
> Der Sketch sieht so aus:
> <viele Seiten Quellcode>
> ...

Wichtige Regeln - erst lesen, dann posten!
Längeren Sourcecode nicht im Text einfügen, sondern als DATEIANHANG

Warum programmierst du kein Tiefpassfilter vor die Ausgabe des 
Analogwertes?

: Bearbeitet durch User
von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

Ich habe deine Schaltung mal so abgeändert, wie Herr Hinz das richtiger 
Weise vorgeschlagen hat, dann sind endlich alle Probleme wie 
weggeblasen:

H. H. schrieb:
> Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko
> dazwischen anschließt, dann braucht man weniger Kapazität.

von Thomas A. (tom2jump)


Lesenswert?

Rainer W. schrieb:
> Warum programmierst du kein Tiefpassfilter vor die Ausgabe des
> Analogwertes?

Tiefpassfilter programmieren?
Kenne ich nur Hardware seitig.

Beitrag #7403188 wurde vom Autor gelöscht.
von Thomas A. (tom2jump)


Lesenswert?

Enrico E. schrieb:
> Ich habe deine Schaltung mal so abgeändert, wie Herr Hinz das richtiger
> Weise vorgeschlagen hat, dann sind endlich alle Probleme wie
> weggeblasen:
>
> H. H. schrieb:
>> Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko
>> dazwischen anschließt, dann braucht man weniger Kapazität.

Danke. Versuche ich mal.

von Thomas A. (tom2jump)


Lesenswert?

Gerade mal getestet.
Funktioniert richtig schön.
Dann möchte ich mich mal bei allen Beteiligten bedanken.

von Rainer W. (rawi)


Lesenswert?

Thomas A. schrieb:
> Tiefpassfilter programmieren?
> Kenne ich nur Hardware seitig.

Wurde doch hier gerade ausführlich diskutiert:
Beitrag "Eigenschaften des Moving Avarage Filters"

Um eine ähnliche Wirkung wie mit dem Kondensator zu erzielen, könnte man 
das TP-Filter z.B. alle 50ms aktualisieren und mit dem Ausgangswert den 
PWM-Ausgang füttern.

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
Noch kein Account? Hier anmelden.