PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motoransteuerung RN-Stepp 297 mit RN-Control V 1.4 Pause zwischen Drehung einfügen



Haaaq
22.12.2011, 20:52
Hallo,
ich bin noch ein ziemlicher Anfänger was Elektronik und Programmierung betrifft daher eine recht simple Frage.

Wie kann ich in den Code von RN_Stepp297_beispiele.bas von der Robotikhardware CD folgende Funktion einfügen
Wenn ich die Taste 2 drücke (Case2) soll sich der Schrittmotor 82 Schritte drehen dann eine Pause von 2 sec einlegen und dann wieder 82 Schritte drehen und das ganze 72 mal

Hier ist nochmal der Ganze Code und Danke im Voraus

'################################################# ##
'Schrittmotoransteuerung mit RN-Control und
'Ansteuerungsboard RN-Stepp297
'RN-Stepp297 ist die bekannt Standardschaltung
'mit L297 und L298 (Bausatz)
'rn_stepp297_beispiele
'
' Achtung:
' Diese Demo ist mit Bascom Compiler 1.11.8.4 getestet
' Getestet mit RN-Schrittmotor Firmware V 1.1
'
' RN-Stepp97 wird wie folgt angeschlossen
' Enable auf PA0 / Richtung auf PA1 / Takt auf PA2
'
'Aufgabe:
' Dieses Testprogramm zeigt wie man RN-Stepp297
' über Takt- und Richtungsleitung ansteuert

' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Schaltet Motorstrom ein (Stellung wird gehalten)
' Taste 2: Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
' Taste 3: Bewegt Motor schneller genau 400 Halbschritte
' Taste 4: Ändert die Drehrichtung
''Taste 5: Schaltet Motor aus
'
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'in der Anleitung zu RN-Schrittmotor
'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'################################################# #############

$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)




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

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$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 "Demoprogramm um Zusatzboard RN-Stepp297 zu testen/demonstrieren"
Print
' -------------- Ende RN-Control übliche _____________________


Config Pina.0 = Output
Stepper_enable Alias Porta.0

Config Pina.1 = Output
Stepper_richtung Alias Porta.1

Config Pina.2 = Output
Stepper_takt Alias Porta.2

Dim I As Integer


Stepper_enable = 0 ' Erst mal aus


Do
Taste = Tastenabfrage()
If Taste <> 0 Then

Select Case Taste

Case 1 'Schaltet Motorstrom ein
Stepper_enable = 1

Case 2 'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
For I = 1 To 400
Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
Waitms 30
Next


Case 3
For I = 1 To 400
Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
Waitms 5
Next


Case 4
Toggle Stepper_richtung

Case 5 'Schaltet Motor aus
Stepper_enable = 0


End Select
Sound Portd.7 , 400 , 500 'BEEP
End If

Waitms 100
Loop

End




' Diese Unterfunktion fragt die Tastatur am analogen Port ab
' Sollte beim betätigen einer Taste kein Quittungston kommen, dann
' muss die die Tastenabfrage (Select Case Anweisung in Funktion )
' an ihr Board angepaßt werden. Widerstandstoleranzen sorgen in
' Einzelfällen manchmal dafür das die Werte etwas anders ausfallen
' Am besten dann den WS wert mit Print für jede Taste ausgeben lassen

Function Tastenabfrage() As Byte
Local Ws As Word

Tastenabfrage = 0
Ton = 600
Ws = Getadc(7)
' Print "ws= " ; Ws
If Ws < 1010 Then
Select Case Ws
Case 400 To 455
Tastenabfrage = 1
Ton = 550
Case 335 To 380
Tastenabfrage = 2
Ton = 500
Case 250 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 100 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton 'BEEP
End If

End Function

peterfido
23.12.2011, 15:37
Das braucht dann seine Zeit. 72 Mal 2 Sekunden Pause plus 72 Mal 82 Umdrehungen inkl. 30 ms Pause. Da würde ich mir dann Gedanken um "Multitasking" machen. Entweder per Timer oder mit Zeitschlitzen arbeiten. Falls Daten per I2C übertragen werden sollen und auch die Stopptaste würde ich während dessen nicht stilllegen. Ist das in Deinem Projekt nicht von Bedeutung, dann einfach die Schleife von 400 auf 82 ändern und eine Pause von 2 Sekunden einfügen. Darum noch eine 2. Schleife mit 72 Durchläufen und Deine Wünsche sind ohne Rücksicht auf Verluste der Tasten und I2C während der Codeausführung erfüllt.

In den Kopf:


dim Durchlauf as byte


Dann die Änderungen:


Case 2 'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
For Durchlauf = 1 to 72
For I = 1 To 82
Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
Waitms 30
Next I
Wait 2
next durchlauf



Oder mit Stopptaste:

In den Kopf:


dim Durchlauf as byte
dim ipause as integer
dim abbruch as byte 'schneller als bit


Dann die Änderungen:


Case 2 'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
abbruch=0
For Durchlauf = 1 to 72
For I = 1 To 82
Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
Waitms 30
if abbruch=1 then exit for
Next I
for ipause= 1 to 2000 ' evtl. Wegen Tastenabfrage verkleinern
Waitms 1
taste = tastenabfrage()
if taste=5 then
abbruch=1
end if
if abbruch=1 then exit for
next durchlauf



Alles ungetestet...