-         

Ergebnis 1 bis 7 von 7

Thema: Atmega32, PWM mit 2 Motoren

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2008
    Beiträge
    7

    Atmega32, PWM mit 2 Motoren

    Anzeige

    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

    Code:
    $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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2008
    Beiträge
    7
    Danke für die shnelle Antwort.
    Also müsste der Code dann so aussehen:
    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 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?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    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.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2008
    Beiträge
    7
    Also das mit der LED funktioniert
    Der Motor dreht sich auch. Nur funktioniert die Regelung der Motorgeschwindigkeit irgendwie nicht.
    Ich nahm diesen Code:
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    probier mal folgenden mainloop:

    Code:
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •