PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM und Rn.control



Larzarus
29.05.2006, 00:37
Also ich habe berits verstanden was PWM ist. nur ist mir nur nicht klar wie ich jetzt die Spannung an den Motorausgängen schalten kann.
Ich habe eine Rn Control 1.4 Dort gibts es ja diese Motorkanäle die will ich ansteuern doch wie ?




Config Pinb.1 = Output
Config Pinb.2 = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8

Do
Compare1a = 50
Compare1b = 250
Loop

End




Wo kommt die PWM Spannung raus . welcher Ports sind die Motorkänale oder wie funzt das ganze :-)

greetz Larzarus...

linux_80
29.05.2006, 01:02
Hallo,

schau Dir dazu am besten das Beispielprogramm an, das auf der CD dabei ist,
da gibt es diesen Teil:


' 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


Mit PWM kannst Du nun schon mal eine Geschwindikeit regeln,
nur bis jetzt dreht sich kein Motor.
Damit beim Motor auch was ankommt, muss Du die Richtung vorgeben,
das geht mit den anderen beiden Ausgängen.
Das sich der Motor in eine bestimmte Richtung dreht einen der beiden Ausgänge auf 1, den anderen auf 0,
für die andere Richtung eben anders rum.

zB. so:

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


Die Richtung hängt natürlich davon ab wie Du den angeklemmt hast, kann man hier aus der ferne ned sehen ;-)

Larzarus
29.05.2006, 12:48
Ja wenn ich das auf das board lade ist nur die led an weil die an portc.7 und portc.6 hängt also wie bekomme ich die spannung nun an den motorkanal


THX aber schonmal

Larzarus
29.05.2006, 12:59
' 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 = 255
Pwm1b = 500



Tccr1b = Tccr1b Or &H02 'Prescaler = 8



'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



Hier leuchtet definitiv nur die eine LEd und an den Motorkanälen kommt nix :-(

linux_80
29.05.2006, 13:18
Wenn die LED leuchtet, muss auch was am Motor ankommen, wenn PWM höher eingestellt wird, denn PWM geht bis 1024, bei 255 tut sich noch nicht allzuviel.
Bei 1024 muss die volle Eingangsspannung(Netzteil) an den Motorklemmen anliegen.

Larzarus
29.05.2006, 13:30
Auch hier wieder die musterlösung die funktioniert aber ich verstehe jetzt nicht wo der unterschied zu dem proggi oben ist Vielen dank ....

und was ist das hier ?
Tccr1b = Tccr1b Or &H02


$regfile = "m32def.dat"
$crystal = 16000000


' 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



'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


Pwm1a = 1023
Pwm1b = 1023






End

linux_80
29.05.2006, 13:55
und was ist das hier ?
Tccr1b = Tccr1b Or &H02


bei mir gehts auch ohne diese Zeile, anscheinend gabs da mal einen Bug in Bascom, deshalb wurde der Prescaler nochmal von Hand gesetzt.

Der Unterschied zum anderen Programm, hattest Du vorher schon die Geschwindigkeit angegeben mit $crystal =, denn darauf wird der Timer eingerichtet ?
Und den Controller mit $regfile = ?
Wenn diese beiden Zeilen nicht im Programm stehen, wird die Einstellung verwendet, die man in Bascom macht, und das war dann bestimmt nicht der M32 mit 16MHz !?

Larzarus
29.05.2006, 14:26
stimmt nun jetzt habe ich schon wieder ein neues problem:-)
ICh will das der roboter rum fährt und sobald er einem hindernis näher kommt so er abbremsen und ausweichen...
meine frage ist jetzt wie progge ich das
denke mal I ist dann eine varibale die immer weniger wird
I = 700
I = 600
....
aber wie mache ich das denn wenn es in der schleife läuft dann ist die spannung nicht immer konstant ...
hoffe ihr versteht mein problem...

wie mache ich sowas
If A > 65 Then Portc.7 = 1 Else Portc.7 = 0 I = 100 K= 1023
If A > 140 Then Portc.6 = 1 Else Portc.6 = 0 I = 200 K= 1023
If A > 180 Then Portc.5 = 1 Else Portc.5 = 0 I = 350K= 1023
If A > 220 Then Portc.4 = 1 Else Portc.4 = 0 I = 450 K= 1023
If A > 270 Then Portc.3 = 1 Else Portc.3 = 0 I = 550 K= 1023
If A > 350 Then Portc.2 = 1 Else Portc.2 = 0 I = 700 K= 1023
If A > 400 Then Portc.1 = 1 Else Portc.1 = 0 I = 900 K= 1023
If A > 530 Then Portc.0 = 1 Else Portc.0 = 0 I = 1023 K= 1023

Pwm1a = I
Pwm1b = K

Das ich deklarieren muss ist klar doch zeigt er mir immer fehler an denke muss irgenwie logisch verknüpft werden plz help me

Danke ihr seit echt super Greetz linux





$regfile = "m32def.dat"
$crystal = 16000000


' 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


'ADC
Config Porta = Input
Config Portc = Output
Config Adc = Single , Prescaler = Auto
Dim A As Word



'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



Enable Interrupts

Start Adc

Do
'1 = aus
'0 = an


A = Getadc(0)

If A > 65 Then Portc.7 = 1 Else Portc.7 = 0
If A > 140 Then Portc.6 = 1 Else Portc.6 = 0
If A > 180 Then Portc.5 = 1 Else Portc.5 = 0
If A > 220 Then Portc.4 = 1 Else Portc.4 = 0
If A > 270 Then Portc.3 = 1 Else Portc.3 = 0
If A > 350 Then Portc.2 = 1 Else Portc.2 = 0
If A > 400 Then Portc.1 = 1 Else Portc.1 = 0
If A > 530 Then Portc.0 = 1 Else Portc.0 = 0

Pwm1a = 1023
Pwm1b = 512


Waitms 1
Loop









End

Lunarman
01.06.2006, 20:20
Woher kommt A? Ist das der Sensor? Außerdem möchte Bascom glaub ich end ifs und soweiter.

Larzarus
01.06.2006, 22:31
hat sich schon erledigt doch trotzdem danke.
das mit den endif ist klar mir ging es nur um die realsisierung..
ja a ist vom sensor

If A > 65 Then Portc.7 = 1 Else Portc.7 = 0"""""" I = 100 K= 1023 """"""

wie mach ich sowas wie in den klammern das ich zwei variablen werte zu weise da muss was getrennt oder so werden

GREETZ & THX

linux_80
02.06.2006, 00:37
Hallo,
wenn Du nach dem Else mehrere Aktionen durchführen willst, brauchst Du am Ende der ganzen If-Bedingung das End If,
wie von Lunarman schon angesprochen,
damit Bascom weiss wann das If, oder das Else zuende ist.

so etwa:

If A = 10 Then
aktion_a
aktion_b
Else
anderen_aktion
noch _eine_andere_aktion
End If


siehe auch Bascom-Hilfe

Larzarus
02.06.2006, 15:18
THX für die gute hilfe und die TIPS

Larzarus
16.08.2007, 13:19
$regfile = "m32def.dat"
$crystal = 16000000


' 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



'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


Pwm1a = 0
Pwm1b = 1023






End


Ich bekomme es nicht hin hier Spannung auszugeben es geht nur der andere Motorkanal?
Kann mir bitte jemand helfen.

Larzarus
22.08.2007, 10:03
BITTE????Helft mir .