PWM (analogWrite) bringt atMega328p zum fiepen

Hallo zusammen,
also ich versuche eine Art Leistungsschalter (für einen Lötkolben, und nein ich will in dem Fall eigentlich keinen FET verwenden) mittels Arduino PWM anzusteuern.
Hierzu habe ich die Schaltung aus dem Anhang gebaut, die Funktioniert soweit auch wenn ich sie extern aus einem Funktionsgenerator (NE555) mit einer PWM füttere.

Wenn ich nun aber das ganze aus dem Arduino heraus versuche, dann höre ich sobald ich die PWM aktiv ist ein Überspitztes A (was ja irgendwo so bei 440Hz liegt) und der Arduino lässt die analogWrite() Funktion ja, wenn mans nicht anderes Konfiguriert irgendwo bei 500Hz laufen.

So ich weiß jetzt das ein deutlichen fiepen/singen eines Chips nicht wirklich gut ist, sobald das ganze anfängt “spinnt” er auch herum, vor allem bei den analogen Messungen und gelegentlich rebootet er. also ist da definit was im argen.

Ich stehe gerade total auf dem Schlauch und bräuchte mal ein paar geistige Stuppser. Danke schonmal

Hallo,

zwischen X7-1 und X7-2 hängt der Lötkolben den zu regeln möchtest? Dann pfeift das Heizelement, sprich Spule.

Rechne mal den Strom aus der im eingemalten Pfad fließt. 3x 108 Ohm parallel. Dieser fließt Pulsweise. Würde mich nicht wundern wenn der Arduino Spannungsregler dabei in Probleme kommt.

Zur Überprüfung kannste den auch indirekt messen. Am PWM Eingang dauerhaft 5V anlegen (bitte ohne Arduinoboard) und Spannungsabfall über der Widerstandsparallelschaltung messen. Was durch den 10k fließt kannste in den Skat drücken.

und nein ich will in dem Fall eigentlich keinen FET verwenden)

Solltest Du aber; das vereinfacht die ganze Schaltung bzw verringert die Verlustleistung um den Faktor 500.

Ein 2n3055 mit 4A Collektorstrom hat eine garantierte Verstärkung (minimum) von 20. Bei 4A Collektorstrom brauchst Du also mindestens 400mA Basisstrom (200mA mit Sicherheitsreserven) Darum ist Dene Schaltung so auch noch falsch bemessen.

Außerdem kannst Du keinen Spannungsstabilisator an einen Brückengleichrichter ohne Glättung durch Kondensatoren anschließen. Du bekommst immer eine 100Hz gepulste Spannung. Entkopple die Spannung mittels einer Diode und füge einen 1000µF Kondensator dazu. An den 12V solltest Du auch einen 100µF Kondensator anschließen. Woher kommen die 5V für den arduino und für den PNP-Transistor?

Wie gesagt: nimm einen Logic Level N- MOSFET und Du hast weder Probleme noch einen Lötkolben der am falschen Ende (steuerungselektronik) heiß wird.

weil Du schon am messen bist:

Zur Überprüfung kannste den auch indirekt messen. Am PWM Eingang dauerhaft 5V anlegen (bitte ohne Arduinoboard) und Spannungsabfall über der Widerstandsparallelschaltung messen.

miß mal die Spannung zwischen Collektor und emittor des 2N3055.

Welche Leistung hat der Lötkolben?

Grüße Uwe

Nein nicht der Lötkolben pfeift, es kommt aus dem AVR Chip.

Betrieben wird es mit einem separaten 7805er als Spannungsregler (bleibt auch stabil bei 4,95-4,97V).
Die 12V-Schiene ist separat und noch nicht aufgebaut. Ist auch nur für den Lüfter zum Dämpfe wegblasen, kann man also zur Zeit mal ignorieren.

Collector-Emmitor Spannung sind 0,33V-0,35V. Es ist ein 45W Lötkölben. Und über den 3x108Ohm fallen 3,94V ab mit einem Strom von vermeintlichen 110mA. Was zu einem mindest Stromtrieb durch den 2N3055 von 2,19A sorgen kann. Also IMHO schon richtig berechnet da das Ding ja “nur” im Aufheizmodus Volllast zieht bzw. ziehen soll.
.

es kommt aus dem AVR Chip.

Glaube ich nicht!
Der AVR hat nichts, womit er pfeifen könnte.

Verwende mal ein Rohr, z.B. Küchenrolle, Frischhaltefolie, damit kann man das Pfeifen dann lokalisieren.
Und natürlich hast du vergessen zu sagen, welchen Arduino du verwendest.

....
Auch, ist fast 500Hz eine unübliche PWM für Heizungen.
Üblicher ist 1 Hz und deutlich wengiger

Hallo,

muss mich combie anschließen. Ein µC hat keine Spulen oder Lautsprecher eingebaut die angeregt werden könnten. Und auf dem Arduino Board, habe mein Mega2560 durchgenommen, gibts nur folgendes was im entferntesten Sinne Spulenartig ist.
F1 ... Sicherung
L1 ... Ferrit Bead
Das der Ferrit pfeift ist nahezu unmöglich, SMD und vergossen.

Pfeift das auch ohne Last? Also mit offenem X7.

Mach mal bitte ein Foto vom Aufbau.

Die linken 5V im Schaltplan kommen demzufolge nicht vom Arduinoboard?
Wie versorgst du den Arduino?
Sind alle Massen verbunden?
Nicht das ein Netzteil pfeift? Irgendwie ... ?
Welchen Arduino hast du?
Was ist der PNP für ein Transistor?

Ich habe den Verdacht, daß das kein Arduino bzw Nachbau ist, sondern eine Stand Alone Eigenentwicklung.
Geräusche lokalisiert man am besten mit einem Stetoskop an dem man den Kopf entfernt hat (also mit offenen Schlauch) Ich arbeite nunmal im Krankenhaus, da ist sowas schnell aus den vorhandenen Ersatzteilen zusammengebaut.

Also IMHO schon richtig berechnet da das Ding ja “nur” im Aufheizmodus Volllast zieht bzw. ziehen soll.

Das Löten ist auch “Aufheizmodus”.

Ich würde die Schaltung auf alle Fälle so auslegen, daß man auch einen 80W Lötkolben anschließen kann. So kannman wenn man mit bleilosen Zinn löten will auch noch auf der sicheren Seite.

Grüße Uwe

Fiept das auch wenn man alles vom Ausgangspin abklemmt?

Oder dient vielleicht der 12V Regler zur Versorgung des Arduino?

Ja also mal angefangen:

  • es is eine Arduino NANO mit einem AVR atMega328p
  • es fiept nicht mit abgeklemmter Last, fiept aber auch mit einer 24V 20W Glübirne
  • der PNP ist ein BC327
  • Massen alle verbunden, und auch keine Schleifen gebaut
  • ich denke ich werde niemals mehr als 60W als Lötkolben brauchen (zumindest hätte ich noch separat ein 350W Brateisen für Dachrinnen lol)
  • ich denke auch in 20 Jahren bekommt man beim Chinesen verbleites Zinn, da ich nur Hobbymäßig löte, IMHO meine Bleivergiftung hehe

und nun gehts los, naja Theme Netzteil und so... alle Bauelemente soweit wie möglich auseinander gelegt Küchenrolle am Start und AHA es ist also doch nicht der AVR (sorry nochmal) .... sondern scheinbar ist es der Trafo selbst, die einzige wirkliche Spule (ist ein wiederverwendeter alter Trafo) welcher das fiepen verursacht.

Er ist vollkommen "leise" im Volllastbetrieb bei knapp 2,2A auf 24VAC, dabei bricht die Spannung auch nicht ein --- aber sobald der Arduino nun zu modulieren anfängt singt/brummt der Trafo eben auf der PWM Frequenz. Die Schrauben vom Trafoblech hab ich vorsichtshalber schon mal nachgezogen, brachte aber nichts.

Kann das sein das das Feedback durch Schaltspitzen sind und sich da ein hübscher Schwingkreis bildet? Und die Spikes dann den OpAmp verwirren der das Thermoelement ausließt?

Der Stützkondensator des 12V Netzteils fehlt in deinem Plan.
Pi-mal-Daumen Wert: min 1000µF pro A
Mein Vorschlag 4700µF

Und:
Runter mit der PWM Frequenz!!!
1HZ oder weniger!
(sachte ich aber schon)

Wie bekomme ich den die PWM Frequenz von analogWrite() so niedrig?
Gemäß Arduino Playground - PwmFrequency komme ich ja im besten Falle mit den Pin5/6 Timer auf 61Hz und bei einem Divisor von 1024 im Timer-Register und der 62,5kHz Grundfrequenz.
Bei Pin 3,4,9,10 sind es 30,5Hz bei 1024 als Divisor und 31,25kHz als Grundfrequenz.

zur Zeit füttere ich einfach den PID-Output (Arduino Playground - PIDLibrary) ge-integert in die analogWrite Funktion. Also gnädig sein mit mir ^^

Beim Trafo bekommst Du ein Problem, wenn die PWM nicht synchron mit der Phase arbeitet.

Und wenn keine Filter gegen Abschaltspitzen eingebaut sind, dann kann das den Trafo ggf. auch zerstören - vielleicht hörst Du ja auch Überschläge zwischen den Wicklungen?

sondern scheinbar ist es der Trafo selbst, die einzige wirkliche Spule (ist ein wiederverwendeter alter Trafo) welcher das fiepen verursacht.

Das glaube ich schon eher.

Bei so niedrigen Frequenzen wie 1Hz kannst Du das PWM auch in C aufbauen mit millis().
Einen Lötkolben solltest Du entweder als Vollwellensteuerung versorgen oder mittels eine Gleichspannung (Deiner Schaltung fehlen die Glättungskondensatoren).

Grüße Uwe

arduino-wasser:
Wie bekomme ich den die PWM Frequenz von analogWrite() so niedrig?
Gemäß Arduino Playground - PwmFrequency komme ich ja im besten Falle mit den Pin5/6 Timer auf 61Hz und bei einem Divisor von 1024 im Timer-Register und der 62,5kHz Grundfrequenz.
Bei Pin 3,4,9,10 sind es 30,5Hz bei 1024 als Divisor und 31,25kHz als Grundfrequenz.

zur Zeit füttere ich einfach den PID-Output (Arduino Playground - PIDLibrary) ge-integert in die analogWrite Funktion. Also gnädig sein mit mir ^^

(Fast) Keine Gnade!

In dem von dir gezeigten Link findet sich:

A Note About Relays
Even though a PID controller is designed to work with an analog output, it is possible to connect to a discrete output such as a relay. Be sure to look at the RelayOutput example below.

Für Relais wird eine SEHR niederfrequente PWM benötigt, damit sie nicht kaputt schnattern.
Also Bitte DAS Beispiel lesen und verstehen, dann geht s auch mit deinem Löti.

Am Rande:
Mich wundert, dass ich das vorlesen muss, obwohl der Link doch von dir kommt.
Normaler weise tue ich das nicht.
Darum nenne ich mich auch in meinem Profil: DokuVorLeseVerweigerer
(da habe ich schon meinen Grund für)

Das Vorlesen ist als das Maximum, an Gnade, was ich dir entgegenbringen kann.

Ich fühle mich beschämt, ich werde mir umgehend den RelayOutput Beispiel Code einverleiben.

Mal eine andere Frage, was heißt Wellenpaketsteuerung auf English? Damit ich mir das auch noch einverleiben zu versuchen kann.

Hallo,

Vollwellensteuerung halte ich dafür für übertrieben. Die Lastspitzen gefallen dem Trafo nur nicht. Deswegen Glättungselko einbauen wie schon gesagt wurde. Dann übernimmt er die Lastspitzen. Also so wie man es normalerweise immer macht nach einer Grätzbrücke.

Wegen dem 1Hz, ein Bsp. womit jeder freie Pin benutzt werden kann.
Der Pulsweitenwert darf sich nur zwischen 0 und TOP bewegen für 0 … 100% DutyCycle.

/*
 Doc_Arduino - german Arduino Forum
 IDE 1.8.8
 Arduino Mega2560

 28.02.2019
 
 Timer 1:   Mode 9
 TOP:       OCR1A (Frequenz bestimmend)
 Pulsweite: OCR1B (<= TOP)
 Schaltpin: beliebig   
*/

const unsigned int TOP = 7813;
unsigned int DutyCycle = 3906;  // 50% Pulsweite, OCR1B <= OCR1A !!!
const byte pin_PWM   = 9;  


void setup()  { 
  pinMode(pin_PWM, OUTPUT);   
      
  set_Timer1(); 

  OCR1B = DutyCycle;    
}

  
void loop() {           

                               
}  


// ****** Funktionen ******* //

ISR(TIMER1_COMPB_vect)    // für Duty-Cycle, schaltet mit jedem Aufruf den Pin um 
{  
  static bool state = true;
  state = !state;
  digitalWrite(pin_PWM, state);
} 
    
void set_Timer1()   //  Mode 9
{
  cli();         // Interrupts ausschalten
  TCCR1B = 0;    // Reset, unter anderem Timer stoppen
  TCCR1A = 0;    // Reset 
  TCNT1  = 0;    // Reset
  TIMSK1 = 0;    // Reset  
  TIMSK1 = (1<<OCIE1B);  // Output Compare Match 1B Interrupt enable
  OCR1A = TOP;   // TOP Wert bestimmt Auflösung und mit Prescaler den PWM Takt
  OCR1B = 0;     // Pulsweite, OCR1B <= OCR1A
  TCCR1A = (1<<WGM10);  
  TCCR1B = (1<<WGM13) | (1<<CS12) | (1<<CS10);    // Prescaler 1024 
  sei();         // Interrupts einschalten
}

arduino-wasser:
Mal eine andere Frage, was heißt Wellenpaketsteuerung auf English? Damit ich mir das auch noch einverleiben zu versuchen kann.

Suchs in der deutschen Wikiprdia und dann unten links gibt es die Links zu den gleichen Artikeln in anderen Sprachen.
grüße Uwe

Danke hatte nun gestern das erste stabile Regler Ergebnis. Mit einer Taktzeit von 800ms. Scheinbar sind in so einem Aufbau die PID-Parameter (7,13,5) ziemlich "unwichtig" da ich sehr viel rumprobiert habe und im relevanten Bereich ab ca. 330°C -380°C immer mehr oder weniger das selbe Verhalten sehe.
Leider kapiere ich überhaupt nicht wie die Autotune-Library arbeiten soll die da dabei ist.

ca.2,5-3°C Überschwingen, gefolgt von einem Unterschwingen von 6-7°C laut Thermoelement also IN der Spitze. Das ganze auch stabil mit keinen größeren Ausschlägen wenn ich gleichzeitig eine große Kupfer-Massefläche erhitze mit dem Lötkolben. Also ist es schon mal Laststabil.

Nun noch eine Frage kann ich das noch irgendwie elegant Aus-kompensieren? Da spielt nun doch hauptsächlich Thermische Masse und die "schnelle" oder relative Trägheit des Thermoelement die Hauptrolle. Sind 10°C um die tatsächliche Solltemperatur ein guter Wert (die Temperaturen wurde mit einem Laserthermometer geprüft)

Hallo,

einen Regler einzustellen erfordert Geduld und sachten Änderungen erstmal nur an P und I. Ob du D überhaupt benötigst kann ich nicht einschätzen. Bei unseren Druckreglern auf Arbeit wird D nicht benötigt. Allerdings sind für verschiedene Druckbereiche und Gasmengen verschiedene PI(D) Faktoren hinterlegt die sich die Software dann entsprechend Sollwert raussucht.

Vielleicht hilft dir auch diese Erklärung weiter. Wie funktioniert ein PID-Regler? Eine nicht-wissenschaftliche Erklärung - Deutsch - Arduino Forum

Zu den Temperaturschwankungen kann ich nichts weiter sagen. Aber meine Eingebung sagt mir das Überschwinger von 6° beim löten kein Problem sind wenn sie dann ausgeglichen werden und dann sogar stabil bleiben. Ich meine was sind 6° von 350°? Nichts. Dem Lötzinn ist das sicherlich auch egal. :slight_smile:

Hi

Nebenfrage: WAS verlötet Ihr? Mein Lot schmilzt bei knapp über 200°, meine Löt-Temperatur liegt bei 230° - allerdings verbleit.
Bei Bleifreiem Lot muß ich auch etwas höher, aber von 300 bin ich 'meilenweit' weg.

MfG