Forum: Mikrocontroller und Digitale Elektronik Motorfader und PWM


von Emanuel J. (e-sound)


Lesenswert?

Hi Leute,

Im Moment beschäftigte ich mich mit einem Motorfader von Alps ( 
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=B28;GROUPID=3713;ARTICLE=73884;START=0;SORT=artnr;OFFSET=100;SID=29sfML7awQAR0AACbbFJke0efda24467e2d3c5646779ec3e922dd 
).
Gesteuert per L298 (Motortreiber) mit einem Pic16f876. Als Sourcecode 
benutze ich C.
Einlesen tu ich den Wert des Faders per AD-Converter. (IST-Wert)
Dann gibts noch einen SOLL-Wert, dieser ist praktisch das Ziel.
Ich habe schon versucht, sobald der IST-Wert kleiner als der SOLL wert 
ist Motor rauf; wenn größer runter.
Dies funzt aber leider nicht sehr gut, denn sobald der Fader seinen Wert 
erreicht hat ist er schon wieder überm Ziel und korrigiert wieder zurück 
- dies die ganze Zeit.
Jetzt kommt wohl nur noch pwm in Frage, da ich mich aber noch nie so 
richtig damit beschäftigt hab, und ich auch keine großen 
Programmierkünste besitze, meine Frage, wie mach ich das am besten?
Vorgestellt hab ich mir es so, dass der Motor immer langsamer wird um so 
näher er am SOLL-Wert ist. Wie kann man das am besten umsetzen?

Achja, der Motor läuft mit 5V.

Danke für eure Antworten!

MFG Emanuel

von Sascha (Gast)


Lesenswert?

Für ne PWM brauchst du nur ein paar Register zu setzen, beim Tiny26 z.b. 
die hier:

//Einstellungen für PWM (Test)
TCCR1A = 0b01000010;
OCR1A = 100;
OCR1C = 255;
TCCR1B = 0b10001100;

Erläuterung: TCCR1A COM1A gesetzt: Ausgabepin (in diesem Fall PB0 und 
PB1) invertieren (toggeln)
TCCR1A PWM1A Bit gesetzt: Selbsterklärend ^^

Die beiden folgenden Register geben den Duty Cycle an: Desto näher OCR1A 
an OCR1C rückt, desto höher ist der Duty Cycle (imho sind 0-100% 
möglich, habs aber nie ans Oszi gehangen). Mit OCR1C kann man auch die 
Frequenz einstellen (niedrigerer Wert = höhere Frequenz), hauptsächlich 
passiert das aber mit TCCR1B (genauer: Den letzten 4 bits davon. Die 
geben den Prescaling-Wert an. 0000=Kein Prescaling, sprich hohe PWM 
Frequenz, 1111 = Prescaling von 16864, also extrem niedrige Frequenz. 
Ich hab momentan bei 1MHZ CPU Takt 256 Hz drin.)

Das erste Bit von TCCR1B ist CTC, also Clear Timer on Compare Match. 
Damit wird das Timer-Register geleert sobald ein Match mit OCR1A oder 
OCR1C vorliegt. OCR1B gibts auch noch, da kann man dann eine zweite PWM 
realisieren.

Zum Rest: Tjo, da musst du dir halt einen Algorithmus überlegen anhand 
dem entschieden wird, wann der Motor anhalten soll. Idealerweise sagst 
du einfach, dass ab einem gewissen "Abstand" (in V) gestoppt werden 
soll. Da der ADC 1024 bit Auflösung hat, sollte das nicht so schwer 
sein.
Ist wie debouncen, nur halt mit dem ADC statt Tastern ^^

von Sascha (Gast)


Lesenswert?

Sorry: Mit meinen Einstellungen sinds 8 Herz. Das reicht für nen 
PC-Lüfter. Dann hört man das nervtötende Fiepen nicht.

von Emanuel J. (e-sound)


Lesenswert?

Hi,
Zunächst mal danke für deine Antwort.
Leider versteh ich von Assembler genauso viel wie Hebräisch. Daher bitte 
nur in C ;-)

thx

von Sascha (Gast)


Lesenswert?

Das war C...

von holger (Gast)


Lesenswert?

>Das war C...

Fürn AVR. Gefragt wurde nach PIC.

von Emanuel J. (e-sound)


Lesenswert?

Oh, hihi, dass sah für mich aus wie Assembler.
Da ich auch nicht mit AVRs, sondern nur mit PICs arbeite, ist mir das 
leider ein bisschen zu komplitziert
Ausser deinem letzen Absatz ist mir nicht klar von was du sprichst xD

Wie gesagt, bin leider kein profi-programmierer, sorry!

mfg

von Sascha (Gast)


Lesenswert?

Oh, den PIC-Teil hab ich glatt überlesen, sorry ^^

von STK500-Besitzer (Gast)


Lesenswert?

Der PIC dürfte einen Timer haben. DAmit sollte es möglich sein eine 
konstante Frequenz mit variablem Tastgrad zu erzeugen.
Das wäre schon mal die PWM.
Die wird von einem Regelalgorithmus vorgegeben, der den 
Soll-Ist-Vergleich auswertet. Je kleiner der Abstand zwischen Sollwert 
und Istwert ist, um so kleiner muss der Impuls im Verhältnis zur 
Periodendauer sein...

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.