Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega32, PWM mit 2 Motoren
Hey leute,
Ich und ein Kollege sind grade beim Bau eines Roboters.
Nur stecken wir gerade bei dem Code der PWM fest.
Als Motor Treiber Platine haben wir eine einfache H-Brücke (laut Asuro Schaltplan) genommen. Diese soll jetzt zwei kleine Motoren ansteuern.
Den folgenden Code spielten wir den Mega32 rüber und es funktioniert auch, jedoch nicht ganz.
Jetzt zum Problem:
Hab schon einiges versucht aber welche parameter muss ich ändern um
Motor1 schneller und Motor2 langsamer laufen zu lassen?
Bitte mit Code Bsp. dazu.
Mfg
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1600000
Config Portb.1 = Output
Config Portb.2 = Output
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Do
Compare1a = 205
Compare1b = 51
Loop
End
Che Guevara
03.09.2009, 22:36
Hallo Wurni,
was mir als erstes aufgefallen ist:
Ich glaube, du hast bei der "$crystal = 1600000" definition eine Null vergessen. Oder hast du tatsächlich einen 1,6Mhz Quarz?
Des weiteren würde ich die Pins, an denen das PWM-Signal ausgegeben wird, als Ausgang definieren. Das wären in deinem Fall PD4 und PD5.
Anstatt von "compare1a" und "compare1b" kannst du auch "pwm1a" und "pwm1b" schreiben, das finde ich persönlich leslicher und ist kürzer. Ist aber geschmackssache.
Zu deiner eigentlichen Frage:
Die Geschwindigkeit änderst du mit "pwm1a" und "pwm1b".
Gruß
Chris
Danke für die shnelle Antwort.
Also müsste der Code dann so aussehen:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Do
Pwm1a = 205
Pwm1b = 51
Loop
End
Und je höher ich jetzt den Wert von Pwm1a bzw. Pwm1b stelle desto schneller müsste sich der jeweilige Motor drehen. Ist das richtig?
Du müsstest den 4 Pins über die du die Drehrichtung der Motoren steuerst schon noch die passenden Werte setzten.
Per default haben die alle denselben Wert und das heisst für die Motoren "Aus", bzw. sogar "Kurzschlussbremse".
D.h. da fehlt nochfür alle vier Pins:
PortX.X = 1, bzw. PortX.X=0
>> Do
>> Pwm1a = 205
>> Pwm1b = 51
>> Loop
Die Werte in einer Schleife immer wieder neu setzen muss nicht sein, tut allerdings für einen ersten Test auch nicht weh.
geht das pwm jetzt? klingt gerade so als ob du es noch nicht getestet hast. wenn du es noch nicht gemacht hast häng mal leds ran
Also das mit der LED funktioniert
Der Motor dreht sich auch. Nur funktioniert die Regelung der Motorgeschwindigkeit irgendwie nicht.
Ich nahm diesen Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.6 = Output
Config Portb.7 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Portb.0 = 1
Portb.1 = 0
Portb.6 = 0
Portb.7 = 1
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Pwm1a = 205
Pwm1b = 51
End
Che Guevara
13.09.2009, 16:31
probier mal folgenden mainloop:
do
for i = 0 to 255
j = 255 - i
pwm1a = i
pwm1b = j
waitms 10
next i
loop
jetzt wird der eine motor immer schneller, während der andere parallel dazu immer langsamer wird
Gruß
Chris
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.