Pulsbreite des NE555 mit Arduino verändern

OP #4402087
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.
Angehängte Dateien:
#4402147
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
OP #4402162
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.
OP #4402187
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.
Gast #4402195
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!
#4402205
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
OP #4402210
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.
(Firma: Schweigstill IT) Persönliche Seite #4402232
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.
Gast #4402240
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...
#4402261
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).
#4402292
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
(Firma: matzetronics) #4402526
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.
OP #4402586
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.
(Firma: matzetronics) #4402673
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.
#4402740
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
#4402744
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.
#4402749
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 :)
OP #4402756
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.
OP #4402770
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren