PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN Schrittmotor Motorstatus abrufen



CN84
06.09.2011, 17:47
hi ,
weiss jemand welche wert den rn schrittmotor den motorstatus zurück gib? Nach Datenblatt gib es 1 byte zurück

Liefert zurück:
1. Byte:
0=Aus
1=Stop (Haltestrom)
2=Dreht bis Fahrschritte erreicht
3=Dauerdrehung bis Stop
2.
Übliche Rückgabecode (42)
aber mit was kann ich den Byte abrufen? Bitte um hilfe :(

danke

Kampi
06.09.2011, 18:19
Auf Seite 24 der Doku siehst du das. Du gibst die Bytefolge aus um den Motorstatus abzufrufen. Anschließend gibt dir das Board über RS232 die Bytes zurück. Diese musst du dann nur noch mit der dementsprechenden Schnittstelle einlesen.

CN84
06.09.2011, 18:32
hi Kampi,
danke für dein schnelle antwort ^^. hier ist mein Code



'RN-Schrittmotor Motorstatus abrufen
'===========================================
If Adresse = Adr_motorstatus Then
If Crc_save = Crc Then
Motorstatus = Kommando
If Motorstatus = 113 Then
Rs232daten(1) = Befehl_motorstatus 'Befehlscode
Rs232daten(2) = Motor_1 '1 Parameter
Sendebytearray
Input #2 ' hier ist das problem, was sollte ich zurückgeben
End If
End If
End If


und noch zum info ^^. ich will den motorstatus über visual basic auslesen. PC <-> RN-Controll <-> Rn-Schrittmotor

CN84
07.09.2011, 13:21
hi ^^,
also nochmal zu meine problem. Ich möchte über Visual Basic 2010 <-> RN-Cotroll<->RN-Schrittmotor steuern. Ich kann über Visual Basic daten an Rn Controll und dann zum RN Schrittmotor senden. Also Schrittmotor bewegt sich auch wie ich möchte und Schrittanzahl abrufen könnte ich auch. Meine problem ist wenn RN-Schritmotor daten senden also Rückmeldung vom Board kann ich nicht an Visual Baisc empfangen bzw vom RN Controll. Also z.b ich kann kein RN-Schrittmotor Fehlermeldung (42) oder Motor status abrufen. Hab alles versuch aber geht irgendwie nicht
Und hier ist eine Skizze wie ich den Board anschließen
[/URL][URL="http://imageshack.us/photo/my-images/713/rncontroll.png/%22]"]http://imageshack.us/photo/my-images/713/rncontroll.png/"] (http://imageshack.us/photo/my-images/713/rncontroll.png/)[IMG]http://img713.imageshack.us/img713/7628/rncontroll.png
Und hier nochmal den Code


'================
'AVR-File, Quarz, Baudrate, Hardwarestack, Softwarestack, Framesize
$regfile = "m32def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64
$crystal = 16000000 'Quarzfrequenz
$baud = 9600

'open channel for output
Open "COMA.0:9600,8,N,1" For Output As #1 'Port PA0 wird als TX definiert Schwarz Kabel
Open "COMA.1:9600,8,N,1" For Input As #2
.
.
.
.
'RN-Schrittmotor Motorstatus abrufen
'===========================================
If Adresse = Adr_motorstatus Then
If Crc_save = Crc Then
Motorstatus = Kommando
If Motorstatus = 113 Then
Rs232daten(1) = Befehl_motorstatus 'Befehlscode
Rs232daten(2) = Motor_1 '1 Parameter
Sendebytearray
End If
Input #2 , Status ' hier liegt wahrscheinlich das problem :( bekomm hier immer 0 auf PC
Print Satus
End If
End If


Bitte an alle RN-Controll Profi um HILFE :-)

Kampi
07.09.2011, 14:55
Haste mal geguckt ob der UART vom Controller richtig funktioniert? Du kannst ja mittels eines Terminalprogrammes an deinem PC dein RN-Schrittmotor simulieren, also das dein PC dann quasi das Schrittmotorboard ist. Dazu gibst du einfach im Terminalprogramm die Codes ein und guckst wie sich dein RN-Control verhält. So kannst du sicher gehen das dein UART richtig arbeitet. Und dann musst du natürlich Rx vom RN-Control mit Tx vom RN-Schrittmotor und Tx vom RN-Control mit Rx vom RN-Schrittmotor verbinden

CN84
07.09.2011, 15:13
naja normaleweise muss ja funktionieren :( schließlich kann ich ja über RN-Schrittmotor den schrittzahl die sich der Motor bislang gedreht hat, abgerufen werden. Also kann ich doch daten vom RN-Schrittmotor empfangen. Aber das komische wenn RN-Schrittmotor mir ein byte senden auf welche wert wird das gspeichert o0. Weil beim Schrittzahl abrufen kann ich das hier ist mal den Code


If Adresse = Adr_schrittzahl_abrufen Then
If Crc_save = Crc Then
Schrittzahl_abrufen = Kommando
If Schrittzahl_abrufen = 114 Then
Rs232daten(1) = Befehl_schrittzahlabrufen 'Befehlscode
Rs232daten(2) = Motor_1 '1 Parameter
Sendebytearray
Inputbin #2 , Empfang(1) , 5
Schritte = Empfang(1)
Ltemp = Empfang(2) * 256
Schritte = Schritte + Ltemp
Ltemp = Empfang(3) * 65536
Schritte = Schritte + Ltemp
Ltemp = Empfang(4) * 16777216
Schritte = Schritte + Ltemp
Print Schritte
End If
End If
End If

und des klappt wunderbar. Aber ins Doku beim Motor status steht halt nicht drin auf was das gespeichert wird :( bin echt ratlos :(

Kampi
07.09.2011, 16:06
Naja wenn du die Kommunikation mit UART machst, musst du nur:

Print "!#": chr(102);chr(1);chr(0); chr(0); chr(0); chr(0); chr(0);

schreiben.
Wenn du hier in der Doku:

http://www.robotikhardware.de/download/rnschrittmotor.pdf

auf Seite 25 schaust siehst du wieso du das Senden musst.
Die ersten beiden Bytes sind ein ! und ein #. Die sendest du mit Print "!#". Anschließend musst du eine 102 senden damit der Controller weiß das nun ein Befehl kommt. Dies machst du mit chr(102);.
Ganz wichtig ist das Semikolon damit Bascom weiß das nach dem Wert 102 kein CR und LF gesendet wird. Sonst verwirrst du den Controller auf deinem RN-Schrittmotor, da der mit 0x10 und 0x13 nichts anfangen kann. Und so wiederholt sich das dann. In der Doku steht gut erklärt drin wo du was senden musst.
Nachdem du

Print "!#": chr(102);chr(1);chr(0); chr(0); chr(0); chr(0); chr(0);

ausgeführt hast, musst du nur noch die 4 Rückgabebytes mittels "Input" einlesen und auswerten. In dem Beispiel "Schrittzahl abrufen" besteht das was das RN-Schrittmotor ausgibt aus 4x 1 Byte also 4 Byte d.h. 32 Bit. Wichtig ist auch das die die Bytes richtig herum zusammen setzt. Also so muss das fertig zusammengesetzte Ergebniss aussehen

High Byte - Low Byte - High Byte - Low Byte
High Word - High Word - Low Word - Low Word
00000000 - 00000000 - 00000000 - 00000000

CN84
07.09.2011, 16:12
naja das schrittzahl abruf geht ja auch bei mir wunderbar :-) nur den Motor Status geht bei mir nicht :-( (S.24) deswegen verstehe ich warum bei schrittzahl abruf einwandfrei funktioniert aber beim Motor Status die normaleweise viel einfacher sein muss nicht funnktioniert :-(

CN84
07.09.2011, 20:18
so ich habe meine Problem gelöst ^^ und möchte an alle danken vorallem an Kampi die mir dabei geholfen haben :-) bitte den Beitrag schließen ^^

b112enno
05.12.2011, 12:19
Hallo CN84

könntest du bitte deien Lösung hier kundtun? Ich habe im Augenblick ein ähnliches Problem und bekomme ums verrecken nicht den Motorstatus von Motor 2. Motor 1 sendet das Bord wunderbar zurück, nur Motor 2 funktioniert nicht. Vielleicht komme ich ja mit deiner Lösung weiter.

vielen Dank
b112enno