Forum: Analoge Elektronik und Schaltungstechnik Pulsbreite des NE555 mit Arduino verändern


von Bastian S. (bastian_s)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!
Normalerweise ist ja die SuFu von Mikrocontroller.net ausreichend, um 
99% aller Probleme zu klären, was ich auch immer gern genutzt habe. 
Allerdings habe ich mir jetzt eine Schaltung ausgedacht, bei der ich mir 
nicht sicher bin, ob diese so funktioniert. Also habe ich mich mal 
angemeldet um eure sehr geschätzten Meinungen zu hören:

Mein Projekt ist die Erneuerung einer Regelung für einen 
Holzvergaserkessel. Realisiert habe ich das Ganze mit einem Arduino MEGA 
(ATmega2560). Anzusteuern sind ein Lüfter mit veränderbarer Drehzahl und 
eine Umwälzpumpe. Mein Problem liegt nun in der Drehzahlregelung des 
Lüfters.

Da er einen Kondensatormotor(230V) besitzt, fiel ein Frequenzumrichter 
nach Recherche hier im Forum von vornherein aus und ich habe mich für 
die Wellenpaketsteuerung per SSR entschieden. Die Ansteuerung des SSR's 
erfolgt per integriertem Optokoppler durch den Arduino.
Und da fangen meine Probleme an: Aufgrund des recht umfangreichen Codes 
auf dem Arduino entstehen Zykluszeiten jenseits alles Guten, was die 
Steuerung des SSR's selbst mit Timer-Interupts äußerst unruhig werden 
lässt.
Daraufhin habe ich mir die obige Schaltung ausgedacht. Darin wird das 
Relais über einen NE555 angesteuert, dessen Pulsbreite vom µC per 
PWM-Signal verändert wird.

Mir stellen sich jetzt 2 Fragen:
1. Gibt es möglicherweise eine bessere Lösung?
2. Kommt es zu unerwünschten Schwingungen des 555 durch das ebenfalls 
pulsierende Signal vom µC?

P.S. Den Sketch vom Arduino hab ich aufgrund einzigartiger Dämlichkeit 
meinerseits nicht mehr.

von Bastian S. (bastian_s)


Lesenswert?

Nachtrag: Ich weiß, dass es auch Umrichter für Kondensatormotoren gibt. 
Diese kann ich mir mit meinem Azubi-Gehalt einfach nicht leisten.

von Peter D. (peda)


Lesenswert?

Was soll der 555 besser können, als einer der 16 PWM-Ausgänge?

von Michael U. (amiga)


Lesenswert?

Hallo,

ohne jetzt auf Deine Frage einzugehen: Du redest von 
Wellenpaktsteuerung, also minimale Ein- oder Auszeit wären dann 20ms 
(das wäre eine Welle bei 50Hz). Du willst mir nicht ernsthaft weiß 
machen, daß ein AVR da irgendwo ein Problem bekommen kann, wenn Du in 
einem vielfaches dieser Zeit ein Portbit Ein- oder Ausschalten mußt?

Was machst Du mit dem Mega2560, was stört? Die Landung der Mondfähre 
berechenen? Ok, der Rechner damals hatte weit weniger Leistung und war 
ein wenig an seiner Grenze...

Gruß aus Berlin
Michael

von Bastian S. (bastian_s)


Lesenswert?

@michael
Ich sehe darin auch kein Problem, in beispielsweise 2 Sekunden den 
Ausgänge mehrmals an- und auszuschalten. Das war ja auch mein 
Lösungsansatz, als ich das Programm geschrieben habe. Ich nehme mal 
stark an, das irgendwo im Programmcode ein Fehler versteckt ist. Ich 
kann den nur leider nicht mehr beheben, da ich den Sketch nicht mehr 
besitze. Und das ganze Ding neu zu schreiben kostet mich Wochen. Das ist 
Zeit, die ich nicht habe.

von Marc H. (marchorby)


Lesenswert?

Warum lässt du den NE555 nicht einfach weg?

Bastian S. schrieb:
> da ich den Sketch nicht mehr
> besitze.

Keine Backup-Platte zu Weihnachten bekommen?

: Bearbeitet durch User
von Bastian S. (bastian_s)


Lesenswert?

Das ist ja im augenblick der Fall. Der Arduino steuert direkt das SSR, 
allerdings vom Timing her so ungenau, dass der Lüfter durchaus auch mal 
mehrere Sekunden auf Vollast läuft und danach für ungefähr die gleiche 
Zeit aus ist.

Hinterher denkt man immer an ein Backup...

: Bearbeitet durch User
von Hubert G. (hubertg)


Lesenswert?

Bastian S. schrieb:
> Der Arduino steuert direkt das SSR,
> allerdings vom Timing her so ungenau, dass der Lüfter durchaus auch mal
> mehrere Sekunden auf Vollast läuft und danach für ungefähr die gleiche
> Zeit aus ist.

Und du meinst, wenn du das über einen 555 machst, das es dann genauer 
wird wenn du den ungenau ansteuerst?

von Bastian S. (bastian_s)


Lesenswert?

1. Da der Takt des NE555 erstmal unabhängig vom arduino läuft, denke ich 
das es genauer wird, ja.

2. Außerdem hat die Wellenpaketsteuerung im Programmcode einen Großteil 
des Platzes eingenommen. Mit dem 555 bräuchte ich nur nur den restlichen 
Teil des Programms rekonstruieren, was wesentlich weniger Aufwand macht.

von Bla (Gast)


Lesenswert?

By the way: die langsamst mögliche Hardware-PWM mit einem Atmega328p(!) 
hat eine Periodendauer von 1,5 Tagen, wenn man:

1: den 128kHz-Oszillator als Quelle für den Systemtakt nimmt
2: dessen Takt vorher noch durch 256 teilt (500 Hz)
3: den Systemtakt vor dem Timer noch durch 1024 teilt (0.49 Hz)
4: den 16-bit Timer nimmt und voll überlaufen lässt (7.4 µHz = 1.55 
Tage)

Alternativ hätte der Atmega2560 natürlich 8K SRAM, woraus sich ein 
~65536-bit-Zähler bauen lassen könnte, der selbst bei 16 MHz Systemtakt 
erst nach 10^19741 Jahren überläuft. Wenn das nicht mal lang genug für 
eine Schwingungspaketsteuerung ist!

von Marian (phiarc) Benutzerseite


Lesenswert?

Bastian S. schrieb:
> Außerdem hat die Wellenpaketsteuerung im Programmcode einen Großteil
> des Platzes eingenommen.

Was?

von Peter D. (peda)


Lesenswert?

Bastian S. schrieb:
> Ich nehme mal
> stark an, das irgendwo im Programmcode ein Fehler versteckt ist.

Genau.
Also doch keine zu geringe CPU-Leistung.

Bastian S. schrieb:
> Ich
> kann den nur leider nicht mehr beheben, da ich den Sketch nicht mehr
> besitze.

Ist jetzt nicht Dein Ernst?

Bastian S. schrieb:
> Und das ganze Ding neu zu schreiben kostet mich Wochen.

Ist jetzt nicht Dein Ernst?

Bastian S. schrieb:
> Außerdem hat die Wellenpaketsteuerung im Programmcode einen Großteil
> des Platzes eingenommen.

Ist jetzt nicht Dein Ernst?

Dazu kann ich wirklich nur:
http://vignette3.wikia.nocookie.net/cardfight/images/8/8a/Triple_facepalm.png/revision/latest?cb=20131217081420

von Bastian S. (bastian_s)


Lesenswert?

Man verzeihe mir, dass ich keinen perfekten Programmcode geschrieben 
habe. Da der Arduino mehr als miserabel läuft, stimme ich euch 
dahingehend zu, dass es noch Verbesserungspotential gibt.

Ich entnehme euren Kommentaren, das ihr eine reine Software-Lösung 
bevorzugen würdet.

Meine Erfahrungen auf diesem Gebiet sind begrenzt, weswegen das 
Schreiben eines solchen Sketches für mich sehr viel Zeit in Anspruch 
nimmt.

von Marc H. (marchorby)


Lesenswert?

Leute,

heute ist Freitag! Trolltime!

von Hubert G. (hubertg)


Lesenswert?

Bastian S. schrieb:
> Außerdem hat die Wellenpaketsteuerung im Programmcode einen Großteil
> des Platzes eingenommen.


Wenn das so ist, dann ist es gut das du den alten Sketch nicht mehr 
hast. Der Neue kann nur mehr besser werden.
Das mit dem 555 vergiss mal ganz schnell.

von Bastian S. (bastian_s)


Lesenswert?

Ich merke schon, das es hier offensichtlich gängiges Benehmen ist, sich 
über Leute lustig zu machen, die weniger Erfahrung haben als die hiesige 
Elite...


Ich habe eben Probleme mit der Konstruktion von Programmcode. Deswegen 
habe ich ja auch nach einer analogen Lösung gesucht.

: Bearbeitet durch User
von Hubert G. (hubertg)


Lesenswert?

Die meisten hier machen sich sicher nicht lustig über dich, aber die 
Idee mit dem 555 ist schlichtweg bescheuert.

von Bastian S. (bastian_s)


Lesenswert?

Aber die die einzige, die mir eingefallen ist.

>Dazu kann ich wirklich nur:
>http://vignette3.wikia.nocookie.net/cardfight/images/8/8a/Triple_facepalm.png/revision/latest?cb=20131217081420

Ich scheine eine andere Definition von "sich Lustig machen" zu haben

von Peter D. (peda)


Lesenswert?

Bastian S. schrieb:
> Man verzeihe mir, dass ich keinen perfekten Programmcode geschrieben
> habe.

Perfekte Programme verlangt ja niemand, aber die aller mimimalsten 
Grundlagen des Programmierens (Programmablaufplan, Backup, 
Versionskontrolle) sollten schon selbstverständlich sein.
Ich hoffe, Du hast daraus gelernt, wie man es auf keinen Fall macht.

: Bearbeitet durch User
von Bastian S. (bastian_s)


Lesenswert?

>Ich hoffe, Du hast daraus gelernt, wie man es auf keinen Fall macht.
Das habe ich auf jeden Fall.

Dann fange ich mal mit der Rekonstruktion an.
Trotzdem Danke für eure Zeit.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Bastian S. schrieb:
> Man verzeihe mir, dass ich keinen perfekten Programmcode geschrieben
> habe. Da der Arduino mehr als miserabel läuft, stimme ich euch
> dahingehend zu, dass es noch Verbesserungspotential gibt.

Dann sei doch froh, dass der alte Sketch verlorengegangen ist und Du 
damit die Möglichkeit hast, ihn noch einmal zu schreiben.

> Meine Erfahrungen auf diesem Gebiet sind begrenzt, weswegen das
> Schreiben eines solchen Sketches für mich sehr viel Zeit in Anspruch
> nimmt.

Meine Erfahrung zeigt, dass das Neuschreiben sehr viel schneller geht 
als beim ersten Mal. Das dauert maximal 10% der Zeit und liefert 
trotzdem ein viel besseres Resultat.

von Wekzellstrom (Gast)


Lesenswert?

Michael U. schrieb:
> Die Landung der Mondfähre
> berechenen? Ok, der Rechner damals hatte weit weniger Leistung und war
> ein wenig an seiner Grenze...

Der war nicht an seiner Grenze, der hatte nur zu viel Inputdaten weil 
Lande- und Rendevousradar irrtümlicherweise gleichzeitig eingeschaltet 
waren.
Ach, ist ja auch egal...

von Peter D. (peda)


Lesenswert?

Bastian S. schrieb:
> Ich scheine eine andere Definition von "sich Lustig machen" zu haben

Niemand macht sich hier lustig.
Facepalm bedeutet Fassungslosigkeit.

https://de.wikipedia.org/wiki/Facepalm

von Bastian S. (bastian_s)


Lesenswert?

Ich hab die ganze Zeit nur diese blöde Steuerung im Kopf. Ich habe wohl 
ein wenig überreagiert. Tut mir leid, das ich so giftig war.

von Peter D. (peda)


Lesenswert?

Bastian S. schrieb:
> Da er einen Kondensatormotor(230V) besitzt

Sicher, daß sich dieser Motor überhaupt regeln läßt?
Nicht, daß Dir durch das ständige wieder Anlaufen der Kondensator um die 
Ohren fliegt.

Welche Leistung hat denn der Lüfter. Vielleicht kann man ihn durch einen 
24V DC-Lüfter ersetzen. Die lassen sich gut regeln und haben auch einen 
höheren Wirkunggrad (keine Wirbelstromverluste).

von Bastian S. (bastian_s)


Lesenswert?

Ich habe auch schon über einen Austausch nachgedacht. Der Lüfter hat 120 
Watt. Allerdings dachte ich immer nur an 12 Volt, von denen ich in der 
Leistungsklasse keine (bezahlbaren) gefunden hab. Bei 24 Volt sieht die 
Sache schon anders aus. Ich werde da mal im Netz nach suchen.

von Michael U. (amiga)


Lesenswert?

Hallo,

Andreas S. schrieb:
> Bastian S. schrieb:
>> Meine Erfahrungen auf diesem Gebiet sind begrenzt, weswegen das
>> Schreiben eines solchen Sketches für mich sehr viel Zeit in Anspruch
>> nimmt.
>
> Meine Erfahrung zeigt, dass das Neuschreiben sehr viel schneller geht
> als beim ersten Mal. Das dauert maximal 10% der Zeit und liefert
> trotzdem ein viel besseres Resultat.

Dem kann ich nur zustimmen.
Gerade wenn man noch unerfahren ist, lohnt mehrmaliges neuanfangen.
Man stellt dann meist fest, daß der neue Code viel kürzer, geschickter 
angelegt und besser strukturiert ist.
Selbst privat als Hobby ohne Versionskontrolle usw. Allerdings sollte 
man sich auch da zur Gewohnheit machen, ziemlich oft einfach ein Archiv 
des Projektordners anzulegen mit Datum im Dateinamen.

Gruß aus Berlin
Michael

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Man kann Pumpen, die ohne Losreissen starten können, auch mit einer 
'normalen' Dimmerschaltung für induktive Lasten steuern, daran ist 
nichts schlimmes, das machen Danfoss und Friends auch so.

Ein Ansatz wäre also, den Arduino mit einem Nulldurchgangsdetektor 
auszurüsten und mit einem der vielen Timer des MC einen Optotriac a là 
MOC3053 mit einen robusten 'snubberless' Triac zur Steuerung der Pumpe 
zu verwenden. Falls du weiter bei Wellenpaket bleiben willst, ist auch 
hier der ZC-Detektor mit Timer eine gute Hilfe, dann kann das fast 
alleine mit der Hardware des MC gemacht werden, ohne das das Programm da 
gross eingreifen muss.

: Bearbeitet durch User
von Bastian S. (bastian_s)


Lesenswert?

Die Pumpe ist kein Problem, sie soll nur An oder Aus sein. Timing spielt 
da keine Rolle.
Ich habe mal kurz das Datenblatt des MOC3053 überflogen, sieht ganz 
interessant aus. Wenn ich das richtig gelesen habe, braucht der IC ja 
immer noch ein dauerhaftes Signal. Der Arduino hat ja unter anderem auch 
einen DS18B20, dessen Konversation bis zu 500ms dauert. Währenddessen 
weigert sich der Arduino vehement, etwas anderes zu tun.

Ich habe mich jetzt für einen Umstieg auf 24VDC entschieden. Gleichstrom 
ist mir wesentlich angenehmer und sicherer. Nach einigen unangenehmen 
Erfahrungen lasse ich lieber die Finger von Netzspannung.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Bastian S. schrieb:
> Ich habe mal kurz das Datenblatt des MOC3053 überflogen, sieht ganz
> interessant aus.
Wenn du die Pumpe nicht steuern, sondern nur ein- oder ausschalten 
willst, ist der MOC3063 noch besser geeignet, denn sein integrierter 
Nulldurchgangsdetektor schaltet den Haupttriac nur im Nulldurchgang ein, 
wobei so gut wie alle Probleme mit induktiver Last entfallen.  Da der 
MOC wie eine rote LED angesteuert wird, sollte das auch einfachst mit 
dem Arduino gehen.

von Bastian S. (bastian_s)


Lesenswert?

Die Pumpe wird ja auch korrekt angesteuert (durch ein zusätzliches SSR 
mit Nulldurchgangsdetektion)

Wie gesagt, die Pumpe ist nur eine Kleinigkeit und bereitet mir keine 
Sorgen.

von Simpel (Gast)


Lesenswert?


von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe mit den DS18B20 noch nichts gemacht, jetzt nur das Datenbaltt 
überflogen.
Die Timings des 1-wire spielen im max. 100µs-Bereich, nur eine Wandlung 
kann etliche 100ms dauern. Da braucht man aber nicht drauf zu warten, 
das macht er alleine. Ist bei parasite-Power sind einige Sachen zu 
beachten, die kosten aber auch keine wirkliche Rechenzeit beim µC.

Wenn die Arduino-Lib also 500ms blockiert, habe sich die Leute wenig 
Mühe gegeben, da darf man dann eine passende Funktion selber schreiben.

Fluch und Segen sowohl des Arduino-Konzeptes als auch von 
1-wire-Komponenten.
Einfach zusammenzubasteln und dadurch eingeschränkt in den Möglichkeiten 
der Kombinationen.

Ein LM135 am Analog-In des Arduino würde selbst da weniger Problem 
machen, dafür muß man sich dann eben über Störungen auf der Zuleitung 
mehr Gedanken machen.

Wie schreibt hier jemand immer: Einen Tod muß man sterben...

Gruß aus Berlin
Michael

von Peter D. (peda)


Lesenswert?

Bastian S. schrieb:
> Der Arduino hat ja unter anderem auch
> einen DS18B20, dessen Konversation bis zu 500ms dauert. Währenddessen
> weigert sich der Arduino vehement, etwas anderes zu tun.

0,5s Totzeit ist für viele Steuerungen nicht mehr tragbar. Da hat sich 
der Programmierer der DS18B20-Lib keine Mühe gegeben. Echtzeit sieht 
anders aus.
Dagegen gibt es 2 Ansätze:

1.
Man macht wichtige Sachen in Interrupts und sperrt jeweils nur für die 
Bitzeit (60µs) des DS18B20 die Interrupts.

2.
Genau umgekehrt.
Man startet mit einem Timerinterrupt (z.B. alle 1..10ms) jeweils eine 
Bitübertragung. Das Main und andere Interrupts sind dann kaum 
beeinflußt. Maximal hat man 60µs Jitter für andere Interrupts.
Temperatur messen braucht man eh nicht öfter als alle 10s.

von Dirk D. (dicky_d)


Lesenswert?

Michael U. schrieb:
> Selbst privat als Hobby ohne Versionskontrolle usw. Allerdings sollte
> man sich auch da zur Gewohnheit machen, ziemlich oft einfach ein Archiv
> des Projektordners anzulegen mit Datum im Dateinamen.

Ganz ehrlich, wenn du dich einn mal an ein SCM gewöhnt hast (und es 
womöglich eins ist das ohne Server auskommt) geht der das mindestens 
genauso leicht von der Hand wie nen zip packen und nen sinnvollen 
Dateinamen vergeben.


Bastuan: schreib den Kram neu. Du wirst dafür sicher keine Wochen 
brauchen, es sei den du hast alles vergessen was du beim Letzten mal 
gelernt hast.
Hinterher hast du ne Bessere Steuerung die du dann auch nachträglich 
anpassen kannst.
Betrachte den Aktuellen Stand einfach als Prototyp der überarbeitet 
werden musst, dann wirst du damit sicherlich glücklich :)

von Bastian S. (bastian_s)


Lesenswert?

@amiga
Vermutlich hätts auch ein LM135 getan, ich hab eben nicht dran gedacht. 
Der Ds18B20 war meine Wahl, da man ihn ohne weitere Gedanken einfach 
anschließen und loslegen kann (mit Lib).

@peda
Ich hatte mich mal dran versucht, die Temperaturabfrage "manuell" zu 
machen, aber spätestens als dann Bitshift und bitwise or dazukamen, war 
ich einfach mit meinem Latein am Ende.

@dicky_d
Was anderes bleibt mir auch nicht übrig. Ich habe jetzt noch einen 
24V-Lüfter bestellt, der lässt sich definitiv leichter regeln als ein 
Kondensatormotor.

: Bearbeitet durch User
von Bastian S. (bastian_s)


Lesenswert?

Ich habe nach einiger Suche noch eine unfertige Version des Programms 
gefunden. Es fehlt etliches und manche Teile habe ich am Ende anders 
implementiert oder weggelassen. Aber im Großen und Ganzen entspricht es 
der Endversion.
In welcher Form kann ich diesen hier hochladen? Für einen Post ist er zu 
lang.

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.