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
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 ^^
Sorry: Mit meinen Einstellungen sinds 8 Herz. Das reicht für nen PC-Lüfter. Dann hört man das nervtötende Fiepen nicht.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.