PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rn Control Motoransteuern



Mars 018
06.06.2011, 16:48
Hallo ich bin recht neu auf demm gebiet microcontroler
und habe mir daher ein Rn control zugelegt nun versuche ich schon den ganzen tag
ein motor zum drehen zu bekommen der motor ist ein 0815 standert modelmotor so wie in fast jeden kleinen modelauto zu finden.
Ich versuche die motor geschwindigkeit zu steuern
mittels 2 taster und durch einen 3ten soll der motor angehalten werden.
Bis dahin klapt das ganze auch ganz gut aber wie pole ich nun die drehrichtung vom motor um ?

hier mal mein bascom code
Es ist übrigens nur ein motor am linken anschluss angeschlossen.
Das ändern von Portc.6 und 7 also 1 oder 0 bewirkt irgendwie garnix -.-
auch das ändern von Portd.4 schaltet den motor weder aus noch ein.
Bin völlig ratlos wie das gehen soll ?


$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes
$baud = 9600 'Die Baudrate für RS232 Ausgabe.
'Sie muss auch bei PC Terminalprogramm identisch sein




Dim I As Integer


'Ports für linken Motor
Config Portc.6 = Output 'Linker Motor Kanal 1
Config Portc.7 = Output 'Linker Motor Kanal 2
Config Portd.4 = Output 'Linker Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Tccr1b = Tccr1b Or &H02
'Linker Motor ein
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN
I = 200

Config Pinb.4 = Input
Config Pinb.6 = Input
Config Pinb.5 = Input

Taster1 Alias Pinb.4
Taster2 Alias Pinb.6
Taster3 Alias Pinb.5
Portb.4 = 1
Portb.6 = 1
Portb.5 = 1









Do

If Taster1 = 0 Then
I = I + 10
Else
I = I
End If
Waitms 30

If Taster2 = 0 Then
I = I - 10
Else
I = I
End If
Waitms 30

If Taster3 = 0 Then
I = 0
Else
I = I
Waitms 20
End If
Pwm1a = I


Loop



End
Mfg marcus

Richard
06.06.2011, 17:13
Ich würde erst einmal das mitgelieferte Testprogramm versuchen, dor werden auch die Motoren getestet.



'Testet Motoren und Geschwindigkeitsreglung
Sub Motortest()
'Linker Motor ein
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN
'Rechter Motor ein
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN
I = 0
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I + 5
Loop Until I > 1023
Wait 1
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I - 5
Loop Until I < 1
Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 '


Das kann man dann vorsichtig an eigene Bedürfnisse anpassen. :-)

Gruß Richard

Mars 018
06.06.2011, 17:25
genau das habe ich genommen nur war ich da schon das erste mal plat weil dort
mit Config pinc.6 ein ausgang configuriert wird
jedoch überall wo ich nachgucke ausgänge immer mit
config portc.6 = output
und eingänge mit
config pinx.x configuriert werden



' 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
oder ist das egal ob config PINx.x oder PORTx.x genommen wird ?

Richard
06.06.2011, 18:19
genau das habe ich genommen nur war ich da schon das erste mal plat weil dort
mit Config pinc.6 ein ausgang configuriert wird
jedoch überall wo ich nachgucke ausgänge immer mit
config portc.6 = output
und eingänge mit
config pinx.x configuriert werden



' 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
oder ist das egal ob config PINx.x oder PORTx.x genommen wird ?

Bescheuerte Syntax, da muss ich auch immer wieder überlegen auch weil ich eher selten Programmiere und jedesmal wieder neu lerne. :-( So in Erinnerung habe ich jetzt das mit den Port.x Befehl der Pull-Up ein/aus geschaltet wird und mit dem Pin.x Befehl der Pin gesetzt/gelöscht/gelesen wird. Aber bitte nagel mich jetzt nicht darauf fest. :-)

Gruß Richard

Sauerbruch
06.06.2011, 21:50
jedoch überall wo ich nachgucke ausgänge immer mit
config portc.6 = output
und eingänge mit
config pinx.x configuriert werden

Also - als Eingänge braucht man die I/O-Ports nicht extra zu konfigurieren - das sind sie nach dem Einschalten des Controllers automatisch. Ganz einfach deshalb, weil ein hochohmiger Eingang keinen Schaden anrichten kann, auf welchen Pegel er auch immer gelegt wird - das wäre bei einem H oder L führendem Ausgang schon anders.

Im auswendig lernen war ich auch noch nie besonders gut - und deshalb benutze ich die DDR-Register (DDR = "Data Direction Register"), um I/O-Pins als Ausgang zu konfigurieren. Das hat auch den Vorteil, dass Du nur eine einzige Zeile Code brauchst, und alle einzelnen gewünschten "Beinchen" auf einmal als Ausgänge konfigurieren kannst.

Um wie in Deinem Beispiel die Anschlüsse C.6 und C.7 als Ausgänge zu konfigurieren, reicht diese Zeile:

DDRC = &B11000000

Alternativ könntest Du es auch "einzeln" machen:

DDRC.7 = 1
DDRC.6 = 1

Mars 018
07.06.2011, 12:44
ah okay danke das heisst das alle pins immer eingänge sind und ich im prinzip nur die ausgänge devinieren muss ^^ okay das vereinfacht die ganze sache ja mal erheblich ^^
danke aber mit demm motor drehrichtung wechseln bin ich leider noch immer nicht weiter -.-

mfg marcus

so hab jetzt noch mal das tastprogramm zerflückt


$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes
$baud = 9600


Dim I As Integer
'Initialisierung der einzelnen Ports am Atmel für Motorsteuerung

Config Pinc.6 = Output 'Linker Motor Kanal1
Config Pinc.7 = Output 'Linker Motor Kanal2
Config Pind.4 = Output 'Linker Motor Puls-Weiten-Modulation (PWM)

Config Pinb.0 = Output 'Rechter Motor Kanal1
Config Pinb.1 = Output 'Rechter Motor Kanal2
Config Pind.5 = Output 'Rechter Motor Puls-Weiten-Modulation (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




'Testet Motoren und Geschwindigkeitsreglung1


'Linker Motor ein
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor ein
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


I = 0
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I + 5
Loop Until I > 1023

Wait 1
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I - 5
Loop Until I < 1
Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 'rechter Motor aus

Wait 3

'Testet Motoren und Geschwindigkeitsreglung2


'Linker Motor ein
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor ein
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


I = 0
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I + 5
Loop Until I > 1023

Wait 1
Do
Pwm1a = I
Pwm1b = I
Waitms 40
I = I - 5
Loop Until I < 1
Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 'rechter Motor aus


End


und siehe da der rechte motor macht auch das was er soll nur der linke motor macht nichts und dreht sich nur in eine richtung ? das doch nicht normal kann da der motortreiber baustein dingens kaput sein ? oder vil falschherum drinne an denn motoren liegts nicht hab sie vertauscht geht trotzdem immer nur der rechte -.-

mfg marcus