PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zwei Getriebemotoren ansteuern



maze2k
07.03.2006, 23:07
Ich möchte zwei Getriebemotoren (die an nem Motortreiber hängen) mit Bascom ansteuern.

Ich brauche für jeden Motor 3 Pins.
Um meine Hardware so modular wie möglich zu halten, möchte ich die Motoranschlüsse an alle möglichen Pins hängen können. D.h. ich brauche eine Software-PWM, oder?

Leider kann ich mir das noch nicht so genau vorstellen, wie das dann als Code aussieht....

Ich hätte dann zum Beispiel oBdA einen der Motoren an PA0, PA1 und PA2 hängen...

Sagen wir über PA2 soll die PWM laufen. Wie ich die Drehrichtung über die anderen beiden Ports einstelle ist klar.

Hat jemand ein Stückchen Code, das er mir für diesen Zweck geben kann? Oder einen Tipp, wie ich am besten das PWM Signal softwareseitig erzeuge und über einen beliebigen, von mir gewählten Port rausschicke?

patti16
08.03.2006, 10:06
hallo

hier ein code ist zwar allerdings für das RNVN2 gedacht aber macht ja nix ist das gleiche prinzip.




$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600
$hwstack = 34
$framesize = 34
$swstack = 34

Dim A As Word
Dim B As Word


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 'Pwm deklarieren

Config Pinb.1 = Output 'Pins aufwählen
Motor1_pwm Alias Portb.1
Config Pind.4 = Output
Motor1_in1 Alias Portd.4
Config Pind.5 = Output
Motor1_in2 Alias Portd.5


Do


Motor1_in1 = 1 'links
Motor1_in2 = 0

For A = 0 To 255
Pwm1a = A
Waitms 120
Next A

Motor1_in1 = 0
Motor1_in2 = 1 'rechts

For A = 125 To 255
Pwm1a = A
Waitms 220
Next A


Loop
End



der Code ist auch bei Download zu finden.


das wichtigste ist eigentlich

Pwm1a = 155 (wenn du das direkt machen willst oder wie oben geziegt dann fährt er beim ersten von 0V bis 12Votln und beim zweiten von 6V bis 12 Volt ist eigentlich gar nicht so schwer.)


gruß
patrick

maze2k
08.03.2006, 10:35
Ok, das mit dem Pwm1a ist klar. So oder so ähnlich habe ich es auch schon gefunden.

Aber wo deklariere ich da, über welchen Port ich das PWM Signal rausgebe? Übersehe ich das? Im Quelltext sage ich ja nur "Pwm1a = A"... Aber wo sage ich, über welchen Port/Pin?

maze2k
08.03.2006, 11:53
Ich benutze übrigens einen ATMega32. Ich glaube das habe ich ganz vergessen zu erwähnen :) Aber ich glaube das ist für diese Fragestellung nicht ganz so wichtig.

patti16
08.03.2006, 12:17
hallo

ganz so wichitg ist das nicht(wenn man es berrücktsicht) es ändern sich nur die Pins, beim Atmega8 ist das PB1(OC1a) und PB2(OC1b) werden dort für die Pwm benutzt.

Beim Atmega32 sind das die Pins PD.4 und PD.5 die für die PWM zunutzen sind.

habe auch vergessen oben im Code steuerst du auch nur einen Motor nicht zwei.

Pwm1a ist schon gesagt wo das PWM raus geht, genauso wie Pwm1b allerdings schreibe ich oben auch, das dieser Pinb.1(oder Pinb.2) = Output ist und nicht Input sonst wird es nicht funktionieren und du sucht dann den Fehler. Das is eigentlich schon die Dekleration dafür.




Config ------ Pinb.1---- = Output 'Pins aufwählen
Motor1_pwm Alias ----- Portb.1-------
Config ----- Pind.4----- = Output
Motor1_in1 Alias ------ Portd.4 -------
Config ------- Pind.5--------- = Output
Motor1_in2 Alias ----------- Portd.5----------


habe die die Ports und Pins in der Deklaration mit ---------xxx---------makiert damit es einfacher wird.


hoffe das du das so verstehst.

maze2k
08.03.2006, 12:22
Vielleicht habe ich mich falsch ausgedrückt... Ich will ja gerade nicht die Pins benutzen, die beim ATMega32 für PWM vorgesehen sind, daher wollte ich ja ein Software-PWM Signal haben, das ich dann über jeden beliebigen Pin ausgeben kann!

patti16
08.03.2006, 12:29
das musste dann ausprobieren ob das klappt das kann ich dir nicht beantworten habe bis jetzt nur die vorgesehenen Pins benutzt.

wenn es klappt kannste ja mal ausprobieren.

gruß
patrick

maze2k
08.03.2006, 13:03
Hmm, ich wollte halt vorher wissen, ob / wie es geht, da ich sonst meine Kabel anders löten müsste.

Der ATMega32 hat vier Pins, die für PWN Output vorgesehen sind.... (D4, D5, D7 und B3).

Ich wollte gerne andere Pins benutzen, da ich mein Board so modular wie möglich halten möchte...

patti16
08.03.2006, 13:20
jop das kann ich dir halt leider nicht genau ssagen ob es geht.

maze2k
08.03.2006, 14:54
Hmm, ich dachte mir, ob ich vielleicht, dass ich es über die Servo-Schnittstelle von Bascom machen kann...

Config Servos = 1 , Servo1 = Porta.0 , Reload = 10

und dann mit Servo(x) und waitms ein Signal erzeugen...

Geht das nicht? Ein Servo arbeitet doch auch mit einem PWM Signal. Und bei dem Servo Befehl in Bascom kann ich ja auch den Output Pin exakt definieren..

patti16
08.03.2006, 14:58
musste ausprobieren hatte ich auch schon gedacht aber ich habe es dann sein gelassen da ich keine Luste habe werte von ca. 50 € zu verschrotten das macht kein Spaß

maze2k
08.03.2006, 15:01
Naja schrotten kann man dabei doch nichts? Im schlimmsten Fall raucht das Treiber IC ab... Aber ich denke mal, nicht mal das!

Vielleicht hat ja noch jemand anderes Erfahrungen in dem Bereich... Ich werde ja nicht der erste sein, der ein PWM Signal über einen Nicht-PWM-Port erzeugen möchte?

patti16
08.03.2006, 15:09
man weiß nie aber ich warte mal bis sich noch andere melden.


gruß
patrick

maze2k
08.03.2006, 18:23
Ja ich warte auch lieber mal ein bißchen...

Also Aufruf an alle, die sich bisher noch nicht beteiligt haben und auskennen:
Wie kann ich ein Software-PWM Signal an einem beliebigen Pin eines ATMega32 erzeugen? Mit Bascom natürlich...

maze2k
10.03.2006, 10:55
So, ich schieb den Thread mal wieder ein bißchen nach oben *g*
Vielleicht ist ja heute jemand da, der helfen kann... Würde mich wirklich freuen, denn ohne eine Antwort kann ich leider nicht weiterbasteln.