Thomass
20.06.2006, 13:48
Hallo,
habe ein kleines Programm geschrieben um einen DC-Motor der belastet wird etwas mehr Saft per PWM zu geben damit dieser in der Drehzahl nicht so stark abfällt.
Leider funktioniert das irgendwie nicht. Ich messe Jeweils die Spannung an der Stromquelle und einmal direkt am Motor so das das Kabel als Shunt fungiert. Es entsteht auch eine messbare Differenz dieser beiden Signale. Wie nutze ich diese aber um meine PWM-Rate zu erhöhen. Ich habe mal das Programm etwas vereinfacht dargestellt und einige Teile die funktionieren weggelassen.
main:
rcall ADWandlung1.....;Ergebniss in temp
rcall ADWandlung2.....;Ergebniss in temp2
sub temp, temp2....... ;Differenz steht in temp
out portc, temp......... ;Zur Kontroll eausgabe am PortC
ldi temp3,126............ ;Schwellwert
cp temp, temp3......... ;Vergleiche temp mit Schwellwert
brge hochsetzen....... ;wenn temp gleich oder größer temp3 gehe zu Routine die PWM-Wert erhöht
rjmp main
hochsetzen:
ldi pwm, 120
rcall PWMübergabe....;Übergebe 120 an PWM-Einheit um Drehzahlverlust auszugleichen, normalwert ist 60
rjmp main
Edit: Im AVR-Studio kann ich das simulieren lassen und es funktioniert auch das die Hochsetzroutine angesprungen wird wenn die Differenz höher ist. Wenn ich im Programm den Wert von 126 auf 128 ändere dreht sich der Motor auch schneller. Wenns aber auf 126 steht und ich ihn abbremse passiert ncihts obwohl ich am PortC sehe das die dDifferenz höher wird.
habe ein kleines Programm geschrieben um einen DC-Motor der belastet wird etwas mehr Saft per PWM zu geben damit dieser in der Drehzahl nicht so stark abfällt.
Leider funktioniert das irgendwie nicht. Ich messe Jeweils die Spannung an der Stromquelle und einmal direkt am Motor so das das Kabel als Shunt fungiert. Es entsteht auch eine messbare Differenz dieser beiden Signale. Wie nutze ich diese aber um meine PWM-Rate zu erhöhen. Ich habe mal das Programm etwas vereinfacht dargestellt und einige Teile die funktionieren weggelassen.
main:
rcall ADWandlung1.....;Ergebniss in temp
rcall ADWandlung2.....;Ergebniss in temp2
sub temp, temp2....... ;Differenz steht in temp
out portc, temp......... ;Zur Kontroll eausgabe am PortC
ldi temp3,126............ ;Schwellwert
cp temp, temp3......... ;Vergleiche temp mit Schwellwert
brge hochsetzen....... ;wenn temp gleich oder größer temp3 gehe zu Routine die PWM-Wert erhöht
rjmp main
hochsetzen:
ldi pwm, 120
rcall PWMübergabe....;Übergebe 120 an PWM-Einheit um Drehzahlverlust auszugleichen, normalwert ist 60
rjmp main
Edit: Im AVR-Studio kann ich das simulieren lassen und es funktioniert auch das die Hochsetzroutine angesprungen wird wenn die Differenz höher ist. Wenn ich im Programm den Wert von 126 auf 128 ändere dreht sich der Motor auch schneller. Wenns aber auf 126 steht und ich ihn abbremse passiert ncihts obwohl ich am PortC sehe das die dDifferenz höher wird.