PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Motor Richtungswechsel funktioniert nicht



Chris266
14.03.2005, 09:08
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?

Chris2666
14.03.2005, 12:55
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!!



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

raptor_79
15.03.2005, 12:39
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.