Forum: Mikrocontroller und Digitale Elektronik Drehzahlregelung Singer Nähmaschine II


von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

Es gab hier schon einige Beiträge zum Thema Drehzahlregelung. z.B.
Beitrag "Nähmaschine, Umbau auf Phasenanschnittsteuerung"
sowie mein Beitrag
Beitrag "Drehzahlsteuerung Singer Nähmaschine K29 class29 LPC1769"
Richtig befriedigend war das Ergebnis jedoch nicht. Problematisch ist 
bei der Phasenanschnittsteuerung die Erkennung und Auswertung des 
Nulldurchgangs.
Als Abfallprodukt einer Heizungssteuerung hier der Vorschlag für eine 
einfache Lösung:
Für die Motorsteuerung wird ein 2€-China-Motor_Control-Modul verwendet. 
Das
Potentiometer wird durch eine PWM-gesteuerte LED-LDR-Kombination 
ersetzt. Die Messung der Motordrehzahl erfolgt wie beim Asuro durch 
Fototransistor/LED am Lüfterrad. Der Wechsel von dunklen und hellen 
Lüfterflügeln steuert einen Interrupt.

Sowohl PWM-Steuerung wie auch Drehzahlmessung funktionieren. Es fehlt 
noch das Programm zur Einregelung der Motorleistung unter verschiedenen 
Belastungen. Für Anregungen/ Verbesserungsvorschläge bin ich dankbar. 
Dass man bei 230Volt aufpassen muss, weiß ich bereits.

von Indi (Gast)


Lesenswert?

Gut den leichten Teil hast du umgesetzt.
Die Regelung der Drehzahl wird sich als weniger trivial herausstellen.
Bei einer Nähmaschine hast du häufig Lastwechsel auf die deine Regelung 
entsprechend reagieren muss.
Je nach Anspruch wird es beliebig komplex.

von grundschüler (Gast)


Lesenswert?

Erster Versuch einer Regelung:
1
//+++++++++++++volleSecunde ++++++++++++++++++++
2
if(gbi(bool1,schalterVolleSecunde )){
3
cbi(bool1,schalterVolleSecunde);zl_sec_wdg=0;
4
zl_drehzahl=isr_imp;
5
6
if(zl_drehzahl<460)
7
{OCR1A+=10;}
8
  else{if(zl_drehzahl<480)
9
    {OCR1A+=5;}
10
    else{if(zl_drehzahl<490)
11
      {OCR1A+=2;}}}
12
13
if(zl_drehzahl>540)
14
{OCR1A-=5;}
15
  else{if(zl_drehzahl>520)
16
    {OCR1A-=3;}
17
    else{if(zl_drehzahl>510)
18
      {OCR1A-=2;}}}
19
20
21
isr_imp=0;
22
selectfont(2);
23
lcd_time;lw("-");li(zl_drehzahl);lw("-");li(OCR1A);
24
//_____________________________________________

Im Trockenversuch funktioniert das unter Last schon ganz gut. Werde den 
Motor jetzt einbauen und mit Nähmaschine probieren. Gibt es für solche 
Regelungen fertige Agorithmen?

von Karl H. (kbuchegg)


Lesenswert?

grundschüler schrieb:

> Motor jetzt einbauen und mit Nähmaschine probieren. Gibt es für solche
> Regelungen fertige Agorithmen?

Gibt es.
Einer der bekanntesten Regler ist der sog. PID Regler.
http://rn-wissen.de/wiki/index.php/Regelungstechnik


PS. tu dir selbst einen Gefallen und formatier deinen Code ein wenig um
So ...
1
  if( zl_drehzahl < 460 )
2
    OCR1A += 10;
3
  else if( zl_drehzahl < 480 )
4
    OCR1A += 5;
5
  else if( zl_drehzahl < 490 )
6
    OCR1A += 2;
7
8
  if( zl_drehzahl > 540 )
9
    OCR1A -= 5;
10
  else if( zl_drehzahl > 520 )
11
    OCR1A -= 3;
12
  else if( zl_drehzahl > 510 )
13
    OCR1A -= 2;
... ist das viel einfqacher zu lesen, als wie wenn du bei jedem else 
erneut in einen Block einsteigst.
Ob du die abhängigen Anweisungen (die Veränderungen von OCR1A) in 
Klammern einschliessen willst oder nicht, überlass ich gerne dir und 
darüber kann man diskutieren. Aber bei den else - if braucht man nicht 
diskutieren. Dein Code wandert sonst immer weiter sehr schnell nach 
rechts aus, ohne dass du dafür etwas kriegst.
Für die dadurch wegfallenden { } kaufst du dir statt dessen ein paar 
Leerzeichen und positionierst sie im Code zwischen dem, was man wohl 
Umgangssprachlich ein 'Wort' nennen würde. Das kostet dir nichts, macht 
aber den Code noch viel leichter zu lesen, weil du seit deinem 7. 
Lebensajhr dein Gehirn darauf trainiert hast, dass beim Lesen zwischen 2 
Wörtern ein Leerraum steht und du nicht eine Buchstabensuppe daraufhin 
absuchen musst, wo ein Wort aufhört und das nächste anfängt.

: Bearbeitet durch User
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.