# data[].attributes.attachment_link.provider_name
SPS-Forum - Automatisierung und Elektrotechnik

# data[].attributes.attachment_link.readable_text
Hallo zusammen:

Ich bin neu hier, und ich hoffe dass ich mit meinen Fragen überhaupt am richtigen Ort gelandet bin.

Also,
Ich möchte mir gerne eine Art SPS bauen, für den Heimbereich. Für mein Hobby benötige ich etwas mit möglichst vielen Ein-und Ausgängen. Ich benötige weiterhin ca. 8 analoge Ein-und Ausgänge. Zusätzlich bräuchte ich mindestens 4 Eingänge für Pulsgeber.

Nun die grosse Frage:

Da eine richtige SPS wie z.B eine Siemens s7 sehr teuer ist, hatte ich die Idee das ganze über meinen PC zu steuern. Nun frage ich mich:

- Ist dies überhaupt möglich?
- Wo bekomme ich die nötige Hardware (z.B Conrad)
- Kann ich all diese Karten an meinem PC anschliessen?
- Wie funktioniert das im Detail?
- Was für eine Software benötige ich da? Irgendwie muss ich dem PC ja mitteilen können welchen Ausgang er auf einem bestimmten Modul setzen muss. (Beispiel)

- Was kostet mich das ganze?

Seit gnädig mit mir, ich bin ein absoluter Neuling auf diesem gebiet, aber ich fand die Idee recht gut und wollte diese nur mal prüfen.

Besten Dank: mauro

Im Prinzip ist das möglich. Das ganze bezeichnet man dann als "Soft-SPS".
Bei der Hardware ist folgendes zu bedenken:
Wenn Du externe Elektrik/Elektronik anschließt, solltest Du eine Potentialtrennung vorsehen, um Deinen PC und auch Dich zu schützen.
Die einfachste Möglichkeit, etwas anzuschließen, ist über den Parallelport (Druckeranschluß). Dafür existieren eine Menge Vorschläge im Internet.
Leider ist es auf 8 - 12 I/O-Leitungen beschränkt.
Viel eleganter geht das mit einem USB-IC, weil Du dann weitere Schaltungen an denselben BUS hängen kannst. Die c't hatte dafür innerhalb der letzten 24 Monate einen Vorschlag. Siehe
http://www.heise.de.
Auch die Zeitschrift "elrad" (auch heise-Verlag) könnte ein heißer Tip sein.
Nun zur Software:
Unter Windows hast Du ein Problem. Dort laufen gewöhnlich mehrere Programme und nutzen die Rechenzeit abwechselnd. Wenn du nunn einen Motor einschaltest und ein Förderband bis zum Endschalter fährst, kann es gut sein, das der PC sich mit was anderem beschäftigt und den Endschalter überfahren läßt (Windoze meditiert vielleicht gerade über das fransenlose rendern (ausmalen) von true type fonts?).
Die Fähigkeit, auf eine Anforderung eines externen Prozesses innerhalb einer genau bestimmbaren Mindestzeit zu reagieren, heisst "Echtzeitfähigkeit". PC-Betriebssysteme können das nicht.

Unter Win 95 bis ME,2nd Edition hast Du keine Chance. Selbst teure Spezialsoftware wie BECKHOFF TwinCat ( www.beckhoff.de, wenn Du dir die Sachen leisten kannst, haben die auch gute Hardware für Deinen Zwecke) läuft dort meines Wissens nach nicht gut.
Für NT und Nachfolger kann man im Prinzip Kernel-Treiber schreiben, die eine Ausführung zu bestimmten Zeiten garantieren. Möglicherweise kann man so etwas als fertige DLL finden (Preis?).

Du kannst es mit DOS probieren. Da kannst Du zum Beispiel dein Steuerprogramm mit jedem Timer-Interrupt (alle 55 ms) ausführen lassen. Das kommt einer SPS schon einigermaßen nahe. Probleme könnte es mit DOS-USB-Treibern geben.

Alle diese Sachen können KEINE schnellen Impulse (>10 -50Hz, kürzer 100-20 ms) verarbeiten. Wenns ein bischen schneller wird, hat auch eine S7 Schwierigkeiten und braucht teure Spezialbaugruppen mit eigenem Prozessor.

Es gibt eine echtzeitfähige Erweiterungen des Betriebssystems LINUX (RTLinux, RTAI). Die geben in einer Demo deltamodulierte Sprache über den PC-Lautsprecher aus. Dazu müssen sie in die Größenordnung von ca.100 us Auflösung vorstossen. Früher gab es mal eine Demo im Netz, mit der Du Deinen Rechner booten konntest, ohne extra (RT)Linux zu installieren. Kann sie aber gerad nicht finden.

Hallo Zottel,

Vielen, vielen Dank für Deine Tips und Warnungen.

Also das Netz überrascht mich immer wieder. Da gibts doch wirklich noch Leute die sich die Zeit nehmen um solche Fragen wie meine zu beantworten.

Nochmals, vielen Dank.

Zur Hardware:

Werde mich in der nächsten Zeit mal nach solchen USB Geräten umsehen.
Die Idee fand ich echt toll.

Zur Software:

Ich kann mir schon vorstellen dass ein normaler PC da nicht mit halten kann.
Du erwähnst Linux oder DOS als mögliche Basis.

Eigentlich hatte ich eh vor mir einen zweiten, vollig leeren PC zu bauen und diesen anschliessend mit der passenden Soft zu bestücken.

Ich hätte da noch eine andere Idee: Wie wäre es mit Assembler?

Eventuell wäre ja das eine geeignete Basis.

Besten Dank und hoffentlich hast Du noch etwas Zeit um meine Fragen zu beantworten.

Gruss: Mauro

Selbstverständlich ließe sich ein PC mit einem Assemblerprogramm ohne Betriebssystem betreiben.
Aber dann must Du eben wirklich alles selbst machen:
Grafik initialisieren, falls Du was sehen willst.
Wenn deine CPU mehr leisten soll als den 8086 Befehlssatz ein bischen schneller abzuarbeiten als das Original und mehr als 1Mb Speicher zur Verfügung haben soll, protected mode initialisieren
Falls einer der folgen Punkte funktionieren soll, Interruptcontroller
initialisieren
Tastatur bedienen
USB bedienen
Serielle Schnittstelle bedienen.
Festplatte bedienen.
Am Ende hast Du ein recht grosses Programm. Wenn du keinen Mechanismus zum dynamischen Einbinden neuer Programmteile vorsiehst (schon das Laden und Ausführen einer .exe oder .com-Datei ist solch ein Mechanismus), mußt Du jedesmal alles kompilieren und den Rechner damit booten.
Wenn Du Fehler suchen willst, must Du Dir den Debugger selbst bauen, weil die vorhandenen ein Betriebssystem erwarten.
Wenn Du Beispielcode für all diese Dinge suchst, kannst Du gleich die Quellen des LINUX Kernels anschauen. Als Beispiel mögen die älteren besser(einfacher sein) ( www.kernel.org).

also ich weiß ja nicht was du vorhast, aber wenn du nur ein wenig damit rumspielen willst und sowieso noch nicht allzuviel davon verstehst würde ich es am anfang mal nicht so übertreiben...

assembler? naja wers braucht...
also du solltest von vorne weg wissen was du willst, wenn du das nur so zum spass machen willst soll es ok sein, wenn du dadurch aber mehr über sps lernen willst würde ich das nicht so machen, weil eine herkömmliche pc-steuerung nicht viel mit einer sps zu hat, nicht nur von der programmiersprache her, sondern auch vom ablauf...

günstige gebrauchte sps-steuerungen bekommst du ebay

vieleicht mal vorab ein paar dinge.
was hast du damit vor? nur zum spass oder praktischen einsatz, welchen?
was kannst du den schon? programmiersprachen?

es gibt auch softwaresteurungen zb WINAC von siemens, diese laufen auf einem normalen pc, und lassen sich uasi handeln wie eine sps. brauch natürlich auch perepherie (profibus) aber das wäre villiecht noch interessant...
dafür gibts auch schönen visualisierungssysteme wie WINCC und PROTOOL. such mal mit google nach diesen sachen, villleicht ist es ja was für dich...

Schau doch mal unter MAT auf sourcforge.net nach. Vielleicht ist das nach deinem Geschmack.

Günter

matPLC
http://mat.sourfecorge.net ist ein Projekt, um eine Soft-SPS als freie Software unter Linux zu erstellen.
Gegenüber einer "normalen" SPS fehlen folgende Dinge:
1. Die Echtzeitfähigkeit. LINUX hat zwar solche Reaktions- und Taskwechselzeiten, dass ein Steuerprogramm, das auf einer SPS mit Zykluszeiten um die 20ms laufen würde, auch auf matPLC laufen würde. Aber um beim Beispiel des Motors zu bleiben, der beim Erreichen des Endschalters gestoppt werden soll: Selbst wenn es 10000 mal klappt, gibt es keine Garantie und keinen theoretischen Beweis, der ausschließt, daß es beim nächsten mal versagt, weil der Rechner anderweitig beschäftigt ist.
2. Remanenter Speicher.
3. Die Möglichkeit, während der Laufzeit Code zu ändern.

S5`en gibt`s bei ebay wirklich günstig ! einfach mal schauen

Und zum Programmieren brauchst du auch kein teueres PG

S5`en gibt`s bei ebay wirklich günstig ! einfach mal schauen

Und zum Programmieren brauchst du auch kein teueres PG
Mfg

Hat jemand etwas davon gehört das die S5 "nachgebaut" werden soll ?
mal unabhängig von der rechtlichen Seite kann ich mir das Marktpotential
hierfür nicht so recht vorstellen...

Es soll aber wohl, u.a. für Export..., ernsthaft in Betracht gezogen worden sein !
von wem ???

S5
vielleicht hat ja Siemens die Rechte an der S5 an VIPA verkauft *g* Nein aber mal im Ernst.. es gibt da viele Trittbrettfahrer. Hab da auch schon vor ca nem Jahr gehört dass ein Roboterhersteller jetzt mit ner integrierten SPS auf S5-basis auf den Markt gehen will. Solange man nur mit Bits arbeitet machts sicher kaum nen Unterschied.

MfG
André Räppel

halorenzen schrieb:

> Hat jemand etwas davon gehört das die S5 "nachgebaut" werden soll ?
Sowas gibts.

sps-concept schrieb:

> vielleicht hat ja Siemens die Rechte an der S5 an VIPA verkauft *g*
> Nein aber mal im Ernst.. es gibt da viele Trittbrettfahrer. ...
Das Teil ist eine Eigenentwicklung.

Gast:
hier ist ein Link auf eine S5 "kompatible" CPU (natürlich VIPA).
http://www.vipa.de/de/pro/pro_de200v20.html#300

Dies soll keine Werbung sein.

# data[].attributes.attachment_link.description
Hallo zusammen: Ich bin neu hier, und ich hoffe dass ich mit meinen Fragen überhaupt am richtigen Ort gelandet bin. Also, Ich möchte mir gerne eine Art SPS bauen, für den Heimbereich. Für mein Hobby benötige ich etwas mit möglichst vielen Ein-und Ausgängen. Ich benötige weiterhin ca. 8 analoge...

# data[].attributes.attachment_link.readable_text
Parallele Schnittstelle einer Hauptplatine
(25-polige D-Sub-Buchse)

Parallele Schnittstelle an einem Peripheriegerät
(36-polige „Centronics"-Buchse)

Schnittstellenkarte für den XT-Bus mit 25-poliger D-Sub-Buchse und Gameport

Als Parallele Schnittstelle wird ein digitaler Eingang oder Ausgang eines Computers oder eines Peripheriegerätes bezeichnet. Bei der Datenübertragung über eine parallele Schnittstelle werden mehrere Bits parallel übertragen, im Gegensatz zur seriellen Schnittstelle, bei der die Bits nacheinander übertragen werden.

HP C4381A CD-Writer Plus 7200 Series, mit Parallelports zum Einschleifen zwischen Computer und Drucker

In Bezug auf Peripheriegeräte ist mit „parallele Schnittstelle" heutzutage meist ein Anschluss nach IEEE 1284 gemeint, welcher nach seiner Verwendung auch als Druckerschnittstelle bzw. Druckerport (englisch line printing terminal, kurz LPT), bezeichnet wird; meist wurde dem noch die Anschlussnummer angehängt, also zum Beispiel LPT1 oder LPT2. Die LPT-Schnittstelle verfügt über 25 Pins.

Zunächst war nur unidirektionale Kommunikation mit Geräten möglich ( Centronics-Schnittstelle), was die Anwendung auf Drucker beschränkte oder spezielle Treiber für einzelne Anwendungen wie z. B. Scanner erforderte. Dagegen umfasste der IEEE-1284-Standard von 1994 auch bidirektionale Datenübertragung über den Parallelport und erlaubte so z. B. den Anschluss entsprechender CD-ROM-Laufwerke und CD-Brenner, die zwischen Computer und Drucker eingeschleift wurden. Die erreichbare Datenrate liegt bei 2 MB/s pro Richtung, bei Verwendung mindestens des EPP-Modus.

Mit der Entwicklung und guten Verfügbarkeit von Geräten für den USB ab etwa 1999 (USB1.1) sowie FireWire werden parallele Schnittstellen praktisch nur noch für ältere Peripheriegeräte bzw. von älteren Rechnern verwendet und somit als veraltete Schnittstelle, engl. legacy port, geführt.

Kontrollbausteine für parallele Schnittstellen

Das Bindeglied zwischen der anzuschließenden Peripherie und dem im Gerät verwendeten Mikroprozessor oder Mikrocontroller ist ein für diesen Verwendungszweck speziell optimierter Baustein, der zumeist als PIO (englisch: parallel input/ output) oder PPI (englisch: programmable peripheral interface) bezeichnet wird. Zu seinen wichtigsten Aufgaben zählt neben der Steuerung der Datenübertragung und dem Zwischenspeichern der Daten auch häufig die Anpassung der Signalpegel. Bausteine für parallele Schnittstellen sind in vielen Formen und Varianten anzutreffen. Je nach Hersteller war das Anschlussschema der Bausteine so beschaffen, dass sie sich besonders leicht an eine bestimmte Prozessor-Familie, in der Regel die des Herstellers, zum Beispiel Zilog ( Z80-PIO für die Z80-CPU) oder Intel ( 8255 für die 8080/ 8086-Familie) anschließen ließen.

Standards auf Platinen-Ebene

Bus-Standards:

Kommunikation mit Kabellängen 0,1-20 m

# data[].attributes.attachment_link.description
Als Parallele Schnittstelle wird ein digitaler Eingang oder Ausgang eines Computers oder eines Peripheriegerätes bezeichnet. Bei der Datenübertragung über eine parallele Schnittstelle werden mehrere Bits parallel übertragen, im Gegensatz zur seriellen Schnittstelle, bei der die Bits nacheinander übertragen werden.

# data[].attributes.attachment_link.readable_text
Newsletter abonnieren

Werden Sie zukünftig noch 32-Bit Windows als Zielplattform einsetzen?

Intelligente EtherCAT-
Automatisierung

Der leistungsfähige Kithara EtherCAT Master ist seit über zehn Jahren weltweit erfolgreich im Einsatz und ideal geeignet für hochgradig anpassbare Echtzeit-Automatisierung. Mit niedrigen Zykluszeiten im Mikrosekundenbereich, Kabelredundanz, Hot Connect sowie flexibler Programmierbarkeit integrieren Sie EtherCAT optimal in Ihre Gesamtlösung.

Intelligente EtherCAT-
Automatisierung

Der leistungsfähige Kithara EtherCAT Master ist seit über zehn Jahren weltweit erfolgreich im Einsatz und ideal geeignet für hochgradig anpassbare Echtzeit-Automatisierung. Mit niedrigen Zykluszeiten im Mikrosekundenbereich, Kabelredundanz, Hot Connect sowie flexibler Programmierbarkeit integrieren Sie EtherCAT optimal in Ihre Gesamtlösung.

# data[].attributes.attachment_link.description
Erfahren Sie, wie sich Echtzeiteigenschaften mit dem weltweit bekanntesten Betriebssystem verknüpfen lassen.

# data[].attributes.attachment_link.readable_text
Measures 21 parameters related to voltage, current and power. Suitable for AC and DC.

Last Modification: May 21, 2014

Fig. 1: Prototype of the Arduino wattmeter.

It is difficult or sometimes even impossible to measure power and energy with ordinary multimeters. To carry out such a measurement reliable and accurate, a special wattmeter is required. Because these meters are very expensive, a cheaper solution is presented here as a DIY wattmeter based on a Arduino Nano board.

Parameters

This wattmeter measures the real power, apparent power, reactive power, phase and energy. Beside that, the wattmeter measures also the mean, RMS, standard deviation, maximum, minimum and frequency of both the voltage and current. And it can measure the area of the voltage (flux) and current (charge) and keeps track of the measure time. Depending on the used display two or four parameter can be read simultaneous.

As an ideally instrument should do; it makes no distinction between AC or DC. It all boils down by choosing the right parameter which all are mathematically justified calculated. The bandwidth is approximately 1.8 kHz for the voltage, current, real and apparent power. The bandwidth for reactive power and phase is limited to 50~60 Hz mains frequencies.

Accuracy

Considering that an Arduino isn't the most accurate board, still a reasonable measurement instrument can be made with it. When the prescribed components are used and after calibration an accuracy of 0.2 % over a temperature range of 10 °C can be achieved.

Code

The Arduino code for this wattmeter is available as a text file: arduino-wattmeter-code-v1.0.

Circuit

To keep the circuit and construction as simple as possible, one sacrifice had to be made: The meter has fixed ranges for the voltage and current inputs. On the other hand, only a single amplifier is used, this to keep the burden voltage of the current measurement as low as possible.

Fig. 2: Circuit diagram of the Arduino wattmeter. The voltage and current range can be customized by changing R1 and R3. In this example the range is ±50 V, ±5 A.

General description

The voltage is measured between the "COM" and "V" terminal. A voltage divider R1 and R2 reduces this voltage so it can be measured with the analog input A4 of the Arduino. The diodes D1, D2 protect the Arduino against overvoltages. The current to be measured flows from the "A" terminal through the fuse F1 and the shunt resistor R3 to the "COM" terminal. The current through R3 causes a voltage drop across it that is proportional to the current. Because this voltage is very small (±50 mV full range) it is amplified by IC1 with R4,5 before providing it to a analog input A5. The diodes D3,4 protect the electronics against voltage spikes.

In order to make it possible to measure positive as well as negative voltages, the "COM" voltage must lie at half the reference voltage. The used internal Arduino reference voltage is 1.1 V, so the "COM" voltage must be approximately 0.55 V. The impedance of this voltage must be reasonably low compared to R2. Because the Arduino reference voltage can handle only small loads, the half reference voltage is derived from the 5 V power supply with the voltage divider R6 & R7. This voltage may vary over time but will not influence the accuracy because it is also measured (input A6) and used in the calculations.

The measured parameters can be read from the 16*2 (or 16*4) character LCD-module that is connected by a 4 bit databus and 3 control signals to the Arduino. These parameters are selected by the four switches S1...4. The LED D7 is a overflow indicator and will light up if the voltage or current input is overloaded and the measurement isn't accurate anymore. The wattmeter is powered by a 9 VDC adapter connected to the Arduino VIN and GND. The current draw is approximately 75 mA.

Voltage & current range

Fig. 3: The analog input section of the wattmeter. Partial build underneath the Arduino board.

The voltage and current ranges are fixed and therefore the input circuitries must be adapted to the application wherein the wattmeter is used. When choosing a range, anticipate to higher peak values rather than the nominal value. For instance: when the wattmeter is used for a 12 V PV-system, the battery voltage can reach over 14 V and the open terminal voltage of a PV-panel could be high as 18 V. For the current values this could become much worse due to inrush currents. Keep in mind that the selected range concerns peak values. The peak value of a 100 V eff sinusoidal alternating voltage will be √2 higher: 141 V.

Voltage input attenuator

The voltage input attenuator is determined by the resistors R1 and R2. This resistor network will divide the input voltage so that the Arduino measures half reference voltage, 0.55 V, at maximum range. The resistor R2 has a fixed value of 10 kΩ, and the range is set by R1 and is calculated as:
[Ω].
If for instance a 50 V range is required, R1 must be 899 kΩ. Because this value isn't a standard value, the closest higher E12 value is 1 MΩ. The value for R1 is may never be chosen lower than 10 kΩ to retain the overvoltage protection. Therefore the lowest possible range is ±1.1 V.

Current range

The current range is determined by the resistive value of the shunt R3, the amplification and the analog input sensitivity. Because the Arduino input sensitivity is fixed at ±0.55 V and the amplification is also fixed at 10 times, the voltage drop across R3 at full range is ±55 mV. So the range is set by the value of R3 and can be calculated as:
[Ω]
If a 5 A range is required, R3 must be 0.011 Ω, and is rounded to 0.01 Ω.

Shunt resistor properties

Fig. 4: The advised Vishay-Dale shunt resistor.

The shunt resistor is a critical component and needs some special attention. The resistive value of resistors are subject to temperature changes. Not only by the ambient temperature, but also by self heating. To reduce the self heating of the shunt resistor, the allowable power dissipation must be quite overdimensioned. The specified power dissipation must be approximately 10 times higher than the real maximum dissipation. In the given circuit the shunt resistor dissipates 5 A · 50 mV = 0.25 W, so a 3 W type is suitable. If the shunt resistor has a temperature coefficient of 50 ppm/°C than a tolerance of 0.1% is feasible within a 20 °C temperature range. This is including the self heating of the shunt resistor and the temperature rise within the instrument casing. If a shunt resistor is used with a higher temperature coefficient it will become dominant. The initial tolerance is of less importance: this is compensated by the calibration.

The burden voltage across the shunt is chosen very small (50 mV max.), therefore the resolution is 50 μV at a four digit display. The consequence of this is that thermoelectric voltages at junctions with different metals become noticeable if there are temperature differences between both terminals. These temperature differences can easily occur due to different power dissipations of components surrounding the shunt. Even small differences in the solder joints on the shunt resistor can cause temperature differences. Most resistors generate significant thermoelectric voltages and are useless in this application. The advised resistor for the shunt is the VISHAY-DALE - WSL3637R0100FEA who has excellent properties.

Amplifier

The LTC1050 is a special rail-to-rail opamp with a low input offset voltage (5 μV) and a low input bias current (10 pA). Don't replace the opamp with any other type with unknown or worse specification.

Components analog section

All the resistors used in the analog section, R1, 2 and 4...7, are 0.25 W metal film types with a tolerance of 1 % and a temperature coefficient of 100 ppm/°C or better. The protection diodes D1...6 must have a very low reverse leakage current. However the specified 1N4184 isn't the most suitable type, it normally performs well. There is a fairly large spread in the reverse leakage current, therefore it is advisable to measure this leakage current. To do so, connect the diode in reverse direction in a series circuit with a voltmeter (Ri=10MΩ) and a 9 V battery. The voltage measured may not exceed 100 mV, what corresponds to 10 nA leakage current.

Build

The wattmeter prototype shown in this article is build as a single PCB-unit to avoid external wirering to connectors. Only the fixed mounted riser board for the four push button switches is a kind of exception. It can be build on a Perfboard 80*100 mm large and is straight forward. Only the following needs special attention:

Fig. 5: Connections to the shunt.

The current is measured by a four point measurement to the shunt resistor R3. The resistor has four terminals for that reason: I+ & I- wherethrough the current flows, and S+ & S- whereof the burden voltage is sensed. this is shown in the photo beside. Observe the star point connection in the circuit diagram at the sense terminal S- on the "COM" side. All the connections to this artificial "null" may only be made at this point to avoid measurement errors. The last thing is the distinction between the digital ground used for the switches and display, and the analog ground used for the analog input circuit. Don't connect these two grounds together, the Arduino has an internal connection between these two grounds.

After soldering clean the circuit board and also the Arduino Nano board thoroughly with Isopropyl alcohol. This to eliminate leak currents due to the flux residue.

Table 1 shows the part list for the wattmeter. Note that the values for R1 and R3 depends on the desired voltage and current range. The carbon film resistors may be replaced by metal film resistors, but don't replace the metal film resistors by carbon film types.

Fig. 6: Layout and connection. Bigger version.

Calibrating

To let the software know for what voltage and current range the hardware is build, a conversion factor for both inputs ranges must be specified. The conversion factor for the voltage range is calculated by:

and the conversion factor for the current range is:

With the component values in the given circuit shown in figure 2, the conversion factor for the voltage range will be 1 MΩ + 10 kΩ / 10 kΩ = 101, and for the current range it is 1 kΩ / (10 mΩ · 10 kΩ) = 10. Both number must be filled in the code under "Calibration & Hardware Data" as shown in the code section below. Also the used display type is specified here.

/*********** Calibration & Hardware Data ***********/ float Vdiv = 101.0; // Voltage conversion factor float Cdiv = 10.0; // Current conversion factor const byte LCDlines = 2; // LCD: Number of lines const byte LCDwidth = 16; // LCD: Number of character per line /***************************************************/

The meter will now measure with a basic tolerance of ±10 %. This poor accuracy is mainly due to the tolerance of the internal reference voltage of the Arduino. But this can be improved to ±0.2 % by calibrating and adjusting the wattmeter.

Adjusting

To calibrate the wattmeter, a reliable multimeter and a stable adjustable power supply is needed. Be sure that the code with the raw conversion factors as calculated above is uploaded to the Arduino. Power up the wattmeter, power supply and multimeter and let them warm up for 30 minutes. Connect the power supply to the wattmeters voltage input and connect the multimeter in parallel at the wattmeter terminals. Set the voltage of the power supply at a value near the higher end of the voltage range and read the value on the multimeter Vref and wattmeter Vread. The new voltage conversion factor is calculated as:

Replace the Vdiv value in the code with this number.

Next the current range is calibrated and adjusted. Set the power supply in current limiting mode, first at 0 A. Connect the power supply, multimeter (current range) and wattmeter in series. Use the wattmeters current input. Set the power supply current at a value near the end of the wattmeters current range and read the multimeter Iref and wattmeter Iread. The new current conversion factor is calculated as:
.
Replace the Cdiv value in the code with this number.

Disconnect the wattmeter and upload the modified code. After this adjustment, calibrate the voltage and current range again to confirm the accuracy. Now the wattmeter will read voltage and current values with a much greater accuracy. Because the internal voltage reference and other components still changes with temperature, the accuracy will be 0.2 % within a 10 °C temperature range.

Fig. 7: Calibrating the voltage range.

Fig. 8: Calibrating the current range.

Safety
Never use this wattmeter to measure on the mains grid or high voltage sources!

Fig. 9: Input terminals with safety banana sockets.

However it is strongly discouraged to use this wattmeter directly on mains voltages, it is unavoidable that people will still do so, I want to give some instructions to limit the risks:

First of all: don't use an external adapter. The low-voltage power cord isn't suitable insulated to handle mains voltages. Also the bare metal connector can easily be touched and is therefore a serious safety risk. Build the power supply with the wattmeter inside a plastic enclosure, or use batteries.

Use push-buttons with a long plastic shaft, so the touchable parts are at least at 6 mm distance from the conductive parts.

Place the display behind an acrylic plate glued to the inside of the plastic enclosure.

The resistor R1 can't withstand mains voltages. Replace R1 by two resistors in series with a equal resistive value who have the same total resistance as calculated.

And finally use safety banana sockets for all three inputs terminals.

Usage

Fig. 10: Circuit diagram of the wattmeter connected to a power source and load.

The circuit diagram in figure 10 shows how the wattmeter is connected to a voltage source and the load. Figure 11 shows the same connection in a real life situation. Connect the voltage terminal to the point whereof the power must me measured, eg. voltage source or load, to eliminate measurement errors due to voltage drops across wires.

The polarity of the connections has a influence on the measurement results. If the voltage and current have the same polarity, the measured power is positive. If the polarities are opposite, the measured power is negative.

Fig. 11: Connecting the wattmeter to a power source and load.

Control buttons

Each display line holds one parameter. The parameters are freely selectable with the use of the control buttons. With the left button the line is selected, the display shows "....." at the parameter name placeholder. Now the parameter can be selected with the second button (parameter down) and third button (parameter up). Some parameters are resettable, see table 2. This reset function has a little protection to avoid accidentally resetting the values. To reset the parameters: hold down the fourth button (reset) and press the first button (line select).

Measuring

The wattmeter is suitable for measurements on DC as well as AC systems. The real power and energy are always correctly measured without setting the instrument for a specific source. The same goes for measuring voltage and current and the selected parameter determines which property of the voltage or current is measured.

The mean values measures the average value and is mainly used for DC-applications

The sdev values measures the RMS value over the AC only portion. It is used for measuring on AC voltage sources and can also be used for measuring noise and ripple levels on DC systems.

The RMS values measures the RMS-value over the total signal (AC+DC). It is used for impulse shaped AC & DC applications.

Fig. 12: Overloading the voltage input with the corresponding indicators.

kWh & Ah

The wattmeter measures the energy in the SI-unit: Joules (J), or Watt*seconds (Ws). To get the energy in kWh, the read energy in joules must be divided by 3600000 (3.6*10^6). Something similar is happening with the charge measurement. It is measured in the SI-unit Coulomb (C), or Ampere*seconds (As). To convert this in the common used Ampere*hour (Ah), divide the reading by 3600.

Voltage and current input overload

If a voltage or current is out of range the overload indication D7 will light up. At the same time an indicator "^" at the affected parameter is shown between the value and unit. The measured values are unreliable if there is an overload indication.

Measured parameters

The wattmeter samples each input, the voltage , current and null , with 4808 samples per second. The null-value is subtracted from the measured voltage and current so the ADC-values can become positive as well as negative. The averaging of the input signals is done over Ns = 3200 samples and the time constant is 0.67 seconds. The conversion from the raw ADC-values to the real voltage and current values is done with a scale factor: For voltages this is V scale = ADCsense * Vdiv, and for current C scale = ADCsense * Cdiv. ADCsense is the ADC sensitivity: 1.1 V / 1024.

Software

Download the Arduino wattmeter code here: arduino-wattmeter-code-v1.0.

ADC & multiplexer

The driving part of the program is the ADC-interrupt routine. The ADC-interrupt routine is called by the Analog to Digital Converter each time a conversion is finished and the results are available. To get a high bandwidth, the sample frequency is chosen as high as possible. Considering the amount of calculations that is performed by the interrupt routine, the sample frequency is set at 19231 Hz. This is not feasible with the standard Arduino analogRead function. Therefore the ADC is configured in free running mode. This ensures also that there is enough processing time left for the main program.

Multiplexer

The ADC measures three inputs: the input voltage, the current and the null-reference. Because the Arduino processor has only one ADC and can only perform one conversion at a time, the inputs must be sampled in sequence. The selection of the inputs is done by the multiplexer set in the ADMUX register. Every time the ADC is ready and the interrupt routine is called, the next channel is selected. Note that when the ADC-interrupt routine is called the next conversion already is started. So, the new selected channel will only be handled at the next following conversion. The result of that conversion stands ready the interrupt after that. This implies that the ADC-result is that of two interrupt later than the MUX is set.

Fig. 13: ADC interrupt timing diagram. It shows the delay between writing the multiplexer and the conversion ready for that channel. Eg.: the interrupt routine that select analog input A7, processes the current (A5).

Program and data flow

The ADC interrupt routine does the first processing of the measured voltage and current. It calculates the square values for the RMS calculation and the product of the voltage and current for the power calculation. All these results and the voltage and current values are added a fixed number of times to obtain a first averaging. Beside this, the waveform period is detected and the number of periods and period time is counted for the frequency measurement. Also the button debouncing controlled by this interrupt routine. Altogether a quite large task considering the routine is called 19 thousand times per second. Therefore the tasks are divided over four interrupt calls.

All these results are transferred to the main program. Here a secondary averaging takes place. This secondary averaging is done with an array to get a more flowing presentation of the measured parameters. Four times per second all the parameters are calculated as floating point numbers from the averaged and directly from the ADC obtained values and put in the result array. Simultaneously the values are corrected for the sensitivity and calibration data. From these final results the presented values are picked to be displayed.

Fig. 14: This chart represents the data flow within the program. Larger version.

Loading comments, please wait ...

# data[].attributes.attachment_link.title
Arduino wattmeter :: Electronic Measurements

# data[].attributes.attachment_link.description
This DIY wattmeter is build around an Arduino nano board. It measures 21 parameters from the voltage and current inputs and the derived power.

# data[].attributes.attachment_link.readable_text
Wieder mal ich...
Hallöle

Ich möchte nun strom messen:
Spannung 0-20V
Strom 0-10A
Auflösung 10-100mA je nach dem was möglich ist...
Gleichspannung

Was ist da der beste weg?
Ich hab was von shunt gelesen.. Ist das für diese anwendung geeignet?
Shunt ist (wenn ichs richtig verstanden habe) ein sehr geringer widerstand mit dem über das ohmsche gesetz der strom errechnet wird?! Richtig?

In einem späteren projekt (viel später) soll ca 100A bei ca. 60V

Nun bitte ich euch um eure meinung... Ps

Bitte möglichst günstig;)

Meine Ausstattung:
Arduino Mega2560

Gleichstrom oder Wechselstrom?

Ein Shund hat den Nachteil, daß der Spannungsabfall klein gehalten werden muß und Du darum eine Verstärkung brauchst. Außerdem ist der Meßstromkreis vom Leistungsstromkreis nicht isoliert. Shund können sinnvoll fast nur gegen Masse geschatet werden.

Bei Wechselstrom einen Stromtrafo mit integrierten sekundärseitigen Shund zB: http://www.watterott.com/de/Wechselstrom-Messwandler-100A-max Der Meßstrom wird mit einem Kabel durch das Loch geführt.

Bei Geleichstrom einen Hall-Stromsensor zB ACS725 Stromsensor Breakout - Watterott electronic

Es gibt beide Typen für verschiedene maximal-Strome. Beide haben einen Ausgangsspannung die proportional zum Strom ist und sind galvanisch vom Strommeßpfad isoliert.

Grüße Uwe

Danke es geht bei beidem um gleichspannung...

Krigt man das noch billiger gemessen? Also bis ca. 6A ?

Strom - Watterott electronic

Strom: ACS724 Stromsensor Breakout - ACS725 Stromsensor Breakout

Also nur die hall sensoren...

Oki thx hab gleich mal 2 bestellt...

Edit
Hab den gekauft: ACS724 Stromsensor Breakout - Watterott electronic

Seh ich es richtig das er von 0-1A, 66 unterteilungen macht? Sprich eine empfindlichkeit von 15 mA?

DraycD:
Hab den gekauft: ACS724 Stromsensor Breakout - Watterott electronic

Seh ich es richtig das er von 0-1A, 66 unterteilungen macht? Sprich eine empfindlichkeit von 15 mA?

Nein.

1A übersetzt der Stromsensor in 66mV.
Offset ist VCC/2. Wenn kein Strom fließt gibt der Sensor eine Spannung aus, die die Hälfte der Versorgungspannung ist. Bei 5V Versorgungsspannung also 2,5V. Pro A ist die Ausgangsspannung 66mV höher oder niedriger.
Die Auflösung (kleinste Unterteilung des Meßwerts) hängt vom Analog-Digital-Wandler ab bzw von einer eventuellen Verstärkung.
Grüße Uwe

Nochmal für dumme...

Auf die 2,500V kommen je Ampere 0.066V ? Sprich 1A strom = 2,566V ?
2A strom = 2,632V usw?

Was kann dr arduino ohne verstärker über den analog eingang messen? Wie genau?

DraycD:
Nochmal für dumme...

Auf die 2,500V kommen je Ampere 0.066V ? Sprich 1A strom = 2,566V ?
2A strom = 2,632V usw?

ja richtig.

DraycD:
Was kann dr arduino ohne verstärker über den analog eingang messen? Wie genau?

bei 5V refeferenz (default) hat der ADC 1024 steps also pro step (5/1023)V das sind etwas weniger als 5mV.

Das ist wenig Auflösung aber Du kannst 30A messen.

Grüße Uwe

Also eine genauigkeit von ca. 77mA

Richtig?

Cool dann hab ich das verstanden.. danke

Wie kann man das verfeinern?

DraycD:
Wie kann man das verfeinern?

1. Verstärker und Subtrahierer eventuell andere Referenzspannung.

2. anderer analog/digital Wandler mit größerer Auflösung.

3. anderer Stromwandler mit kleinerem Bereich (abgestimmt auf Maximalstrom) oder ein Modell das nur 0 bis Maximalstrom mißt.

Grüße Uwe

Was muss ich machen wenn ich nen versterker bauen möchte? Ist es sinnvoll?
Was würdest du tun uwe?

Welchen Meßbereich möchtest Du haben?
Grüße Uwe

DraycD:
Was muss ich machen wenn ich nen versterker bauen möchte? Ist es sinnvoll?
Was würdest du tun uwe?

Die Frage ist doch, welche Genauigkeit du erreichen willst bzw. musst. Warum du nun einen Sensor gekauft hast der von minus 30 A bis +30 A messen kann weiß ich auch nicht, ich dachte du misst keine entgegengesetzt gerichteten Ströme.

Eine genauigkeit von 10-20mA wäre ... Praktisch...

Und 5 A sind zu wenig.... Darum der 30er

Ich wollte möglichst viele optionen offen haben...

Erst mal wird er eingesetzt um um die solarpanels zu untersuchen... Bzw. Messen

Später einmal möchte ich für meinen e roller n bissle mehr anzeigen... Und sensor daten....

Hallo,

offenbar gibt es jetzt beim WATTEROT neuere Wandler, z.B. ACS724 Stromsensor Breakout 20A (DC). Der macht 20 Amp. "in eine Richtung" mit 200 mV/A. Das würde ja passen. Ich habe sowas (Solarmessung) auch realisiert, an Stelle des im Arduino integrierten A/D-Wandlers habe ich einen ADS1115 genommen. Der macht eine Auflösung von 16 Bit und ist nach meinen Messungen sehr genau (gemessen mit FLUKE 8050), ich war echt überrascht. Der hat 4 Eingänge, damit kannst dann 1. die Solarspannung, 2. die Spannung vom ACS, 3. die Vcc (5V) vom Arduino und 4. noch sonst was messen. Ich habe bei mir die ACS712 im Einsatz, die bringen ja Vcc/2 wenn kein Strom fließt. Deshalb messe ich die Vcc und ziehe diesen Wert x 0,5 ab, damit muss ich keinen festen Wert im Programm vorgeben. Dies klappt recht gut, stabil und genau.
Und noch was: Wenn alles über USB vom Rechner gespeist wird ist die Sache recht unstabil und ungenau. Sobald ich extern über einen kleinen Step-Down-Wandler mit stabilen 5 V einspeise (ich habe hier eine NODEMCU am laufen) oder über die Buchse am Arduino ca. 7-8 V ist das Ding absolut stabil.

So, ich hoffe ich habe nichts vergessen......

Ja, habe ich gerade auch bemerkt. Ich meinte der war oben, habe nicht aufs Datum geschaut.
Aber vielleicht kann's noch jemand brauchen......

DraycD:
Also nur die hall sensoren...

Oki thx hab gleich mal 2 bestellt...

Edit
Hab den gekauft: ACS724 Stromsensor Breakout - Watterott electronic

Seh ich es richtig das er von 0-1A, 66 unterteilungen macht? Sprich eine empfindlichkeit von 15 mA?

Ich habe die Bidirektionalität noch nicht ganz verstanden.
Gibt der ACS714 unterschiedliche Spannungswerte aus ob nun +10A oder -10A fließen?

Ich brauche einen Stromsensor als Blockierschutzüberwachung am Schiebetor.

Das Teil liefert - wenn ein Strom durchfließt - 2,5 V (Vcc/2) am Ausgang. Fließt ein Strom von IP+ nach IP- geht die Spannung hoch bis 4,5 V, fließt der Strom von IP- nach IP+ geht die Spannung runter bis 0,5 V.
Und pro Amp. ändert sich die Spannung um 66 mV. Jetzt kommt es darauf an wie genau du diese Spannung messen kannst.

# data[].attributes.attachment_link.title
Bester weg strom mit dem arduino zu messen

# data[].attributes.attachment_link.description
Wieder mal ich... Hallöle 😉 Ich möchte nun strom messen: Spannung 0-20V Strom 0-10A Auflösung 10-100mA je nach dem was möglich ist... Gleichspannung Was ist da der beste weg? Ich hab was von shunt gelesen.. Ist das für diese anwendung geeignet?

# data[].attributes.attachment_link.description
Erfahre mehr über zwei der Grundprinzipien der digitalen Signalverarbeitung: die Analog-Digital-Wandlung (AD) und die Digital-Analog-Wandlung (DA).