-         
Ergebnis 1 bis 3 von 3

Thema: PWM Motor Richtungswechsel funktioniert nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.06.2004
    Alter
    44
    Beiträge
    66

    PWM Motor Richtungswechsel funktioniert nicht

    Anzeige

    Moin,

    habe seit zwei Tagen das rn Control 1.4. Zwei billige Spielzeugmotoren angeschlosssen.

    Motoren lassen sich wie in den Beispielprogrammen von der CD ein/ausschalten. Auch der Richtungswechsel funktioniert wie erwartet - > bis ich auf PWM Betrieb umschalte,. dann ist ein Richtungswechsel nicht mehr möglich

    PWM funktioniert leider nur solange wie ich KEINEN Richtungswechsel initiiere. Sobald ich Pwm1a=0, dann Richtungswechsel einstelle, dann wieder Pwm1a=500 fiepzt der Motor nur noch, dreht sich aber nicht mehr.
    Wenn ich nach einem Board Reset erst die andere Richtung starten lasse funktioniert die andere Drehrichtung, aber dafür die weitere nicht mehr - also genau umgekehrt

    Was mache ich falsch?

    Könnte jemand bitte einen Beispielcode offenlegen der einen Richtungswechsel mit PWM Betrieb demonstriert? DANKE!

    Edit: habe mal die spannung gemessen, nach jedem Richtungswechsel beträgt die maximalspannung immer weniger Volt. Warum erniedrigtsich bei jedem Richtungswechsel die Spannung? Wenn ich zwischen den Richungswechseln mehrere Sekunden Pause machen geht es, warum nicht auch ohne PAUSE?

    edit2: Habe mal den Strom gemessen der bei einem Richtungswechsel auftritt: zwischen 0,8 und 1 A, je nachdem ob der Motor schon still. Hat es was hiermit zu tun?

  2. #2
    Chris2666
    Gast

    Beispielcode

    Anbei der Code der bei mir nicht funktioniert. Drücke ich Taste "3" auf dem Board, dann funktioniert der Richtungswechsel nur ein paar mal (siehe Quellcode). Erst durch einen Reset am Board und erneutes drücken von Taste "3" funktioniert es wieder, bis wieder zu viele Richtungswechsel kommen -> drehung wird langsamer bis gar nix mehr geht.
    IST MEIN BOARD DEFEKT? Bei wem funktioniert der Code?
    DANKE!!

    Code:
    Declare Sub Motortesta()
    Declare Sub Motortestb()
    Declare Function Tastenabfrage() As Byte
    
    
    $regfile = "m32def.dat"
    
    
    Dim I As Integer
    Dim N As Integer
    Dim Ton As Integer
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    Dim Taste As Byte
    
    ' Für Motorentest
    'Ports für linken Motor
    Config Pinc.6 = Output                                      'Linker Motor Kanal 1
    Config Pinc.7 = Output                                      'Linker Motor Kanal 2
    Config Pind.4 = Output                                      'Linker Motor PWM
    'Ports für rechten Motor
    Config Pinb.0 = Output                                      'Rechter Motor Kanal 1
    Config Pinb.1 = Output                                      'Rechter Motor Kanal 2
    Config Pind.5 = Output                                      'Rechter Motor PWM
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Pwm1a = 0
    Pwm1b = 0
    Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8
    
    
    
    
    
    I = 0
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450                                   'BEEP
    Print
    Print "**** RN-Control 1.4 *****"
    Print "Das neue Experimentier- und Roboterboard"
    Print "Weitere passende Zusatzboards bei www.robotikhardware.de"
    Print
    Do
    
    
    
    
       Taste = Tastenabfrage()
       If Taste <> 0 Then
    
          Select Case Taste
             Case 1
                Call Motortestb
             Case 2
                Call Motortesta
             Case 3
                Call Motortesta                                 ' Hier dreht sich Motor noch normal
                Call Motortestb                                 ' Hier auch normal
                Call Motortesta                                 ' jetzt wird er langsamer
                Call Motortestb                                 ' und noch langsamer
                Call Motortesta                                 ' immer langsamer
                Call Motortestb                                 ' hier zuckt er nur noch
                Call Motortesta                                 ' er dreht sich gar nicht mehr
                Call Motortestb                                 ' er dreht sich gar nicht mehr
    
          End Select
          Sound Portd.7 , 400 , 500                             'BEEP
       End If
    
       Waitms 100
    Loop
    
    End
    
    
    
    
    'Diese Unterfunktion fragt die Tastatur am analogen Port ab
    Function Tastenabfrage() As Byte
    Local Ws As Word
    
       Tastenabfrage = 0
       Ton = 600
       Start Adc
       Ws = Getadc(7)
      ' Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
       If Ws < 500 Then
          Select Case Ws
             Case 400 To 450
                Tastenabfrage = 1
                Ton = 550
             Case 330 To 380
                Tastenabfrage = 2
                Ton = 500
             Case 260 To 305
                Tastenabfrage = 3
                Ton = 450
             Case 180 To 220
                Tastenabfrage = 4
                Ton = 400
             Case 90 To 130
                Tastenabfrage = 5
                 Ton = 350
     '        Case Else
    '              Print "Tastenabfrage anpassen!ADC Wert ws=" ; Ws
          End Select
          Sound Portd.7 , 400 , Ton                             'BEEP
    
       End If
    
    End Function
    
    
    'Testet Motoren und Geschwindigkeitsreglung
    Sub Motortesta()
    
       'Linker Motor ein
       Pwm1b = 0
       Portd.4 = 0
       Portc.6 = 0                                              'bestimmt Richtung
       Portc.7 = 1                                              'bestimmt Richtung
       Portd.4 = 1                                              'Linker Motor EIN
    
    
    
       I = 300
       Do
          Pwm1b = I
          Waitms 40
          I = I + 50
       Loop Until I > 500
    
       Wait 1
       Do
          Pwm1b = I
          Waitms 40
          I = I - 50
       Loop Until I < 1
       Pwm1b = 0                                                'Linker Motor aus
    End Sub
    
    Sub Motortestb()
    
       'Linker Motor ein
       Pwm1b = 0
       Portd.4 = 0
       Portc.6 = 1                                              'bestimmt Richtung
       Portc.7 = 0                                              'bestimmt Richtung
       Portd.4 = 1                                              'Linker Motor EIN
       I = 300
       Do
          Pwm1b = I
          Waitms 40
          I = I + 50
       Loop Until I > 500
    
       Wait 1
       Do
          Pwm1b = I
          Waitms 40
          I = I - 50
       Loop Until I < 1
       Pwm1b = 0                                                'Linker Motor aus
    End Sub

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2004
    Beiträge
    206
    hallo.
    nein, nicht die pwm ändern. ich hab z.b. pwm 255
    und dann werden in IN eingänge am treiber geschaltet.

    also z.b.
    in1 = 1
    in2 =0

    andere richtung:
    in1=0
    in2=1
    und die pwm kannst immer auf dem selben wert lassen.

Berechtigungen

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