Hallo,
also ich habe einen Igarashi DC Motor (12V), dessen Drehzahl ich gerne
mittels PWM meines Atmega32(4PA) regeln möchte. Ich benutze einen L293D
zum Schalten des Motors und soweit würde auch alles nicht so schlecht
funktionieren.
Ich weiß ich könnte die Timer Modes für die PWM benutzen (wie es hier in
einigen Tutorials gezeigt wird) habe mich aber zur Zeit der einfachheit
halber für folgende naive Lösung entschieden:
1 | ISR (TIMER0_OVF_vect)
|
2 | {
|
3 | TCNT0 = T0RELOAD;
|
4 | cnt++;
|
5 | if(mode == 0 && cnt >= highValue)
|
6 | {
|
7 | PORTA = 0;
|
8 | cnt = 0;
|
9 | mode = 1;
|
10 | }
|
11 | if(mode == 1 && cnt >= lowValue)
|
12 | {
|
13 | PORTA = 1;
|
14 | mode = 0;
|
15 | cnt = 0;
|
16 | }
|
17 | }
|
highValue und lowValue werden je nach gewünschter Spannung durch eine
Funktion bestimmt. Das Timerintervall liegt zur Zeit bei 1ms.
Ich hab mich eigentlich so ziemlich daran
(http://www.mikrocontroller.net/articles/Pulsweitenmodulation)
gehalten...
Nun zu meinem eigentlichen Problem...
Die Spannungswerte, welche (im Mittel) am Motor anliegen sind relativ
umgenau (ca. +/-0.5V), obwohl dies laut Berechnung eigentlich nicht sein
sollte. Kann mir diesbezüglich jemand einen Tipp geben? Sollte ich
wirklich die Timer Modes für die Erzeugung der PWM Signale nutzen bzw.
bringt dies für meine Anwendung wirklich etwas. Hierzu ist zu sagen,
dass ich nur die Motordrehzahl relativ genau regeln will, der
Mikrocontroller hat sonst keinerlei Aufgaben und ob das Programm jetzt
ideal oder nicht ist, ist mir im moment auch ziemlich egal solange es
funktioniert :).
Gibt es vl. sogar schon fertige Treiber bei denen diese Funktionalität
schon implementiert ist? vl. kann mir ja jemand helfen.
lg