Motorfader und PWM

OP #1880477
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
Gast #1880523
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 ^^
Gast #1880900
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...

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