PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pro bot 128 mit Raupenchassis



Croal
16.03.2013, 19:15
Hallo !
Ich bin neu hier und wollte mich und mein pro bot vorstellen.
Ich habe den pro bot auf Raupenfahrwerk umgerüstet um das geradeauslauf zu verbessern und um zu verhindern dass die Räder hängen bleiben. So kann ich beim programieren sparen dass der pro bot beim hängenbleiben erst rückwärts fahren soll und danach die Drehung. Ich muss sagen die umrüstung hat sich gelohnt, das Ding marschiert über alles hinweg, Tepichkannten und kleinere Gegenstände sind kein tema mehr. Und auch an der stelle drehen funktioniert besser da die Spurweite jetzt schmaler ist. Ich habe ein kleines video bei youtube hochgeladen was ich auf die schnelle gemacht habe:

http://www.youtube.com/watch?v=_jc-rOv6UEo

Der Chassis ist von Pololu Zumo, wo ich schon dabei war habe ich auch den Radencoder von pololu bestellt da es sich abot und auch wäre es kompliziert geworden den von der pro bot die weiterhin zu nutzen, hier der link dazu:

http://www.pololu.com/catalog/product/1217

Damit fängt mein problem auch an, ich bin Fahrzeuglackierer also kein Elektriker und habe den pro bot gekauft um hobbymässig programieren zu lernen.
Nun ich bin noch recht am anfang in sachen programieren, meine kenntnisse bestehen darin codes zu lesen, zum teil zu verstehen wie alles funktioniert und demos zu manipulieren um die Auswirkung nachvollziehen. Lange Rede kurzer Sinn ich muss nun irgendwie die Libery so ändern dass ich die pololu encoder benutzen kann. Das grösste Problem sehe ich daran dass der encoder zwei ausgänge hat auf eine seite, A und B was mich verwirrt. Ich habe den rechten geber Port A auf X3_9 also PA0 und Port B auf X3_10 PA1 angeschlossen. Die linke Seite auf X3_11 PA2 und X3_12 PA3.
Ich habe die Standard Libery angeschaut nur ich weiss nicht wie ich aus zwei signalen eins mache pro Seite. Ich hoffe das hier welche geben wird die den encoder benutzen oder welche die verstehen was ich meine. Für jede hilfe wäre ich dankbar. Dazu kommt das ich das Conrad IDE benutze in Pseudo Basic und von der rest keine ahnung habe.

radbruch
16.03.2013, 19:47
Hallo

Ein sehr hübscher Umbau, gefällt mir echt gut. Zu deinem Encoder: Er liefert ein "Quadratur-Signal", das meint nicht anderes als zwei Signale, die sich überlappen. Dadurch kann man nicht nur einen Zählimpuls auswerten sondern zusätzlich auch die Zählrichtung:

http://b.pololu-files.com/picture/0J1207.600.jpg
(Bild von http://www.pololu.com/catalog/product/1217/pictures)

Zur einfachen Auswertung würde es schon reichen, wenn du je Seite nur eines der beiden Signale zählst.

Um die Drehrichtung zu ermitteln prüft man beim Flankenwechsel eines Signals (zum Beispiel blau von Low nach High) ob das andere Signal (im Beispiel gelb) dabei auf Low oder auf High steht. Da das Diagramm den zeitlichen Verlauf der beiden Signale darstellt, kannst du es für eine Drehrichtung von links nach rechts und für die andere Drehrichtung von rechts nach links betrachten.

Optimal wird die Auswertung, wenn der Zählimpuls einen Pinchange-Interrupt auslöst und das Zählen dadurch unabhängig von der Motoransteuerung, und der damit vorgegebenen Drehrichtung des Motors, im Hintergrund erledigt wird. Aber das sind schon höhere Weihen der Programmierung und ist für den Einstieg völlig übertrieben.

Gruß

mic

Croal
17.03.2013, 14:08
Danke Radbruch für den Lob und deine Antwort. Ich bin noch ganz am Anfang mit dem Programmieren , aber immerhin schon soweit dass ich Begriffen habe das niemand auf die schnelle beantworten kann wie man programmiert. Ich habe das Buch Pro-Bot128 selbst bauen und erfolgreich einsetzen und C-Control-Pro selbst programmieren und in der Praxis einsetzen ein paar mal durchgelesen und zwischen durch Demo und testprogramme den Code angeschaut und immer wieder einen Aha Effekt erzielt. Ist aber garnicht so einfach so ganz als Autodidakt alles zusammen zu Reimen. Naja durch deine Antwort habe ich erst Begriffen was ich da für ein Sensor da verbaut habe. Es reizt jetzt umso mehr nicht nur die Ticks sondern auch die drehrichtung bestimmen zu können. Ich Schätze ich kann erstmal freuen wenn ich die Ticks zählen kann und einsetzen kann. Naja ich denke viele haben auf die Art programieren gelernt. Ich habe erstmal mit kleinen Dingen zufrieden wie zB.jetzt den Sensor Auslesen und einsetzen oder Lcd belobige Daten ausgeben. Mit Ideen bin ich ein paar Jahre ausgebucht bis hin zu Kamera mit gesichtserkennung USW. ;-) . Aber erstmal den pro bot beibringen prezise zu fahren. Leider ist der pro bot nich so verbreitet trotz dem Potenzial was er von Hause mitbringt.

Croal
19.03.2013, 13:43
Hallo leute!
Ich versuche jetzt seid ein paar Tagen mein encoder zum laufen zu bringen wobei ich eine Hardware seitige lösung angestrebt habe da ich noch zu wenig ahnung habe vom programmieren. ich habe T3 und T4 sowie D2 und D3 entfernt sowie die widerstände R6 und R7.ich habe dazu den Original schaltplan als Anhang hochgeladen falls es jemanden hilft. danach vcc und gnd ganz normal auf masse und 5v angeschlossen. Output habe ich auf x_9 und x_10 also an die pins wo vorher T3 und T4 waren. Nun ich habe versuche unternommen am Testprogramm werte zu erhalten aber leider tut sich nix.

'************************************************* ******************************
'Projektname: Radencoder_Check.cprj
'Benötigte Libs´s: IntFunc_lib.cc
'Routinen: RadencoderCheck.cbas
'Autor: UlliS
'Datum: 26.03.2008
'
'Funktion: Radencoder Test
' Laden Sie das Programm in den Roboter und starten Sie
' dieses mit der Taste F10 oder den kleinen Blitz in der
' Menüzeile. Schieben Sie den Robby auf einer glatten sauberen
' Oberfläche (Tisch) ein paar cm nach vorne. Die Zählimpule
' im Ausgabefenster, müssen sich gleichmässig erhöhen.
' Sollte das nicht der Fall sein, müssen Sie die Encoder
' (siehe Anleitung) leicht nachjustieren.
' Wichtig: Die Räder müssen guten Kontakt zum Boden besitzen
' und es muss gleichmäßig gerade nach vorne geschoben werden!
'
'************************************************* ******************************

#define Encoder_IR 8

Dim Text(40) As Char
Dim Encoder_left As Integer
Dim Encoder_right As Integer


'Mainprogramm
Sub main()

SPI_Disable() 'SPI "OFF"
Port_DataDirBit(Encoder_IR,1) 'Port For IR LED = Output
Port_WriteBit(Encoder_IR,PORT_OFF) 'IR Diode PORT_OFF = IR "Ein"

'Radencoder Interrupts
Irq_SetVect(INT_6,Ext_ISR_R) 'Interrupt Service Routine right encoder
Irq_SetVect(INT_7,Ext_ISR_L) 'Interrupt Service Routine left encoder

Ext_IntEnable(6,2) 'Interrupt right falling edge
Ext_IntEnable(7,2) 'Interrupt left falling edge


Do While True

Msg_WriteInt(Encoder_left)
Text = " left"
Msg_WriteText(Text)
Msg_WriteChar(13)

Msg_WriteInt(Encoder_right)
Text = " right"
Msg_WriteText(Text)
Msg_WriteChar(10)
Msg_WriteChar(13)

AbsDelay(100)

End While

End Sub


'Interrupt Service Routine "Encoder right"
Sub Ext_ISR_R()
Dim irqreq As Integer
irqreq = Irq_GetCount(INT_6) 'Interrupt Request Counter = 0
Encoder_right = Encoder_right + 1
End Sub


'Interrupt Service Routine "Encoder left"
Sub Ext_ISR_L()
Dim irqreq As Integer
irqreq = Irq_GetCount(INT_7) 'Interrupt Request Counter = 0
Encoder_left = Encoder_left + 1
End Sub

ich komme nicht weiter da ich nicht weiss ob alles richtig verlötet ist oder nicht und habe zweifel das das alles so ok ist. ich habe nach programme gesucht die ähnlich funktionieren also nicht wie bei der led steuerung blinken lassen, sondern andersrum. ich habe probleme mit den befehlen

irqreq = Irq_GetCount(INT_6)

Irq_SetVect(INT_6,Ext_ISR_R)

und finde auch nichts wo das erklärt wird da das ein conrad basic ist. ich hoffe ich bekomme einen tritt in die Richtige Richtung auch gerne anfänger Tutorial , um verständnis zu bekommen wie das ganze funktioniert . Wie gesagt mit den led-s habe ich schon kapiert , da bekommt man aber einen feedback ob man alles richtig gemacht hat oder nicht . Hier ist es genau anders rum , Signal geht rein und ich habe keine ahnung ob hardware mässig was nicht stimmt oder die programmierung falsch ist. Danke schon mal im voraus für die Hilfe.

ach ja nochwas, im Buch C-Control Pro selbstprogrammieren und in der Praksis einsetzen habe ich gelesen das der µC interrupt einggänge hat unter anderem x_9 und x_10 wo standardmässig auch die T3 und T4 waren. ich weiss auch nicht ob wichtig ist wieder die interruptpins zu benutzen da alle besetzt sind es sei den ich verwende die ports wo vorher die geber sassen.