PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bascom-programm für schrittmotor



robson443
13.08.2009, 22:21
Moin Leute,

ich bin noch ganz neu in diesem Forum, ich hoffe Ihr lyncht mich nicht für meine Frage:
Mit welchem Programm kann ich mittels des RN-Control 1.4 einen Schrittmotor steuern -- mit der onboad-Endstufe versteht sich. Hab schon einige Berichte von rauchenden Endstufen gelesen... wollte den Motor nicht einfach anschließen, lieber erstmal nachfragen.
Spezifikationen:
2-Phasen-Schrittmotor (2 Spulen mit Mittelanzapfung, insgesamt 6 Kabel), 9.6V, 0.4A Phasenstrom, 1.8deg, ...
Dafür gibts doch bestimmt ein Programm an dem ich mich orientieren kann, bzw. abändern kann -- man braucht ja nicht immer alles neu erfinden, vor allem wenn man nicht in uC-Programmierung zu hause ist.

Danke für eure Hilfe

PicNick
14.08.2009, 14:07
Schau mal da, das scheint doch recht gut für dich zu passen:
http://www.rn-wissen.de/index.php/Schrittmotoren

Besserwessi
14.08.2009, 17:42
Das RN-Control Board hat keine Stromregelung. Wenn die Versorgungsspannung höher ist als die Nennspannung des Motors, dann sollte man zusätzliche Widerstände in Reihe zu den Spulen haben.

Bei den Motordaten muß man ein wenig aufpassen, ob die 0,4 A für die ganze Spule oder nur je eine Hälfte (unipolare Ansteuerung) gelten.

robson443
14.08.2009, 22:01
Hallo,
der messbare Widerstand von Mittelanzapfung bis Ende sind ca. 23Ohm, bei 9,6V sind das ca. 0,4A pro Hälfte der Spule. Das packt der L293D nicht mehr (oder doch noch im Vollschrittmodus)? Muss also im Bascom-Programm eine Bitfolge für jeden der 4 Ports in eine Schleife gepackt werden, wie im rn-wissen vorgeschlagen, oder gibts ne bessere Alternative, PWM???
Gruß

Besserwessi
14.08.2009, 22:59
Mit 23 Ohm je Spulenhälfte, sind die Daten wohl für den unipolaren Betrieb. Für die ganze Spule hat man dann 46 Ohm und als Strom für die gleiche verlustleistung etwa 350 mA, bzw, für die gleiche Kraft 200 mA. MIt 200-300 mA solle der Treiber klarkommen. Das wäre dann bei einer Spannung von etwa 10-15 V. Bei mehr Spannung halt ein Widerstand dazu. Bei Weniger Spannung hat man halt weniger Strom und entsprechend weniger Drehmoment.

Für das Programm wird wohl am einfachsten sein, wenn man sich 1 oder 2 konstante Arrays definiert, und dann damit die Postion (Schrittnummer) in die Bitfolge umrechnet. Leider sind die Leitungen auch noch auf 2 Ports verteilt. Wie man das dann Zeitlich Steuert ist etwas Geschmackssache.
Möglich wäre ein Lösung mit Wartezeiten oder auch eine Lösung ganz im Interrupt, inclusive Beschleunigung und Bremsen.

robson443
15.08.2009, 08:27
OK danke, ich werds dann erstmal mit weniger Spannung versuchen und die Temperatur des Treibers beobachten. Gibts schon irgendwo Beispielcode, wie man die Ansteuerung umsetzt?

robson443
10.09.2009, 16:33
Moin Leute,

so, nach langer Zwangspause habe ich nun endlich alles beisammen, Schrittmotor mit Endstufe von nanotech und auch ein Steuerprogramm für den Mega32 geschrieben (mein erster Microcontroller-Programmierversuch) und es funktioniert sogar! Ich möchte per RS232 n Motoren ansprechen (erstmal nur einen zu testen).

Es gibt da jedoch folgendes Problem:
Es funktioniert nur mit dem Terminal-Emulator der Bascom-Entwickungsumgebung. Wenn ich z.B. das Terminal v1.9b von der rn-control CD benutze, gehts nicht. Das Windows Hyperterminal hängt sich bei meiner Eingabe sogar auf, die Begrüßungsausgabe vom uC kommt jedoch noch an. Hier mal der Code, wie gesagt, es sind meine ersten Schritte in Sachen Programmierung:



' -------------- RN-Control übliche _____________________
Declare Function Tastenabfrage() As Byte

$regfile = "m32def.dat"
$framesize = 40
$swstack = 40
$hwstack = 64

$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

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
Dim Ton As Integer

I2cinit
Start Adc
'Sound Portd.7 , 400 , 450 'BEEP
'Sound Portd.7 , 400 , 250 'BEEP
'Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-CONTROL V1.4 *****"
Print "Steuerung des Schrittmotortreibers SMC11"
Print
' -------------- Ende RN-Control übliche _____________________

Config Pina.1 = Output
Config Pina.2 = Output
Config Pina.3 = Output

Declare Sub Serial0charmatch()
Declare Sub Auseinanderklabustern()
Declare Sub Drive(motor2drive As Integer)
' ---------------------------------------------------------------

Config Serialin = Buffered , Size = 9 , Bytematch = 13
Enable Interrupts

' ---------------------------------------------------------------
Dim Drive_data As String * 7
Dim M As String * 7 , D As String * 7 , T As String * 7
Dim Incoming_data As String * 7

Dim Motor2drive As Integer
Dim Direction2drive As Integer
Dim Time2drive As Long

Dim Motornumbers As Integer
Dim Direction As Integer
Dim Maxtime As Long
Motornumbers = 0
Direction = 1
Maxtime = 99999

' ---------------------------------------------------------------

Do
!NOP
Waitms 500
Loop
End

' ---------------------------------------------------------------
Sub Serial0charmatch()

'Daten vom Buffer auslesen
Input Incoming_data Noecho
Drive_data = Incoming_data ' drive_data from incoming_data (RS232)
'Print "Data recieved"
'Print Incoming_data
Print Drive_data
'Print "Data send"
Clear Serialin
If Drive_data <> "Nononono" And Len(drive_data) = 7 Then
Call Auseinanderklabustern
Incoming_data = "Nononono"
Else
Print "WRONG INPUT, have to be 7 numbers (MotornumberDirectionTime): MDTTTTT"
End If
End Sub

' ---------------------------------------------------------------
Sub Auseinanderklabustern()

Local E As Integer

M = Left(drive_data , 1)
Print "Motornumber (0..99): " ; M ' M is motor (0..99)

D = Mid(drive_data , 2 , 1)
Print "Direction (0:forward, 1:reverse): " ; D ' D is direction (0:forward, 1:reverse)

T = Right(drive_data , 5)
Print "Time [ms] (0..99999): " ; T ' T is time im ms (0..99999)

Motor2drive = Val(m)
Direction2drive = Val(d)
Time2drive = Val(t) / 2 ' 500Hz

If Motor2drive > Motornumbers Or Direction2drive > Direction Then
Print "Only Motor Nr.0 installed"
Print "For Direction choose 0 or 1"
Else
Call Drive(motor2drive)
End If

End Sub

Dim N As Long
Sub Drive(0)
For N = 1 To Time2drive
Porta.1 = 0
Waitus 1000
Porta.1 = 1
Waitus 1000
Porta.2 = Direction2drive
Porta.3 = 1 'Enable modus checken
Next N
Print "Fertig!"

End Sub


Wo ist der Unterschied zwischen dem Bascom Terminal und dem "normalen" Hyperterminal? Warum werden meine Eingaben im normalen nicht verabeitet? Fehler der Baudrate etc. kann ich eigentlich ausschließen, hatte alles etliche male überprüft....

Grüße,
rob

PicNick
11.09.2009, 07:07
Vielleicht hat's was mit dem "Handshake" ?
Check dich da mal durch
http://www.rn-wissen.de/index.php/Terminals#Hyperterm_Terminal