Hallo Forengemeinschaft! Ich heiße Sebastian, komme aus FFM und bin noch absoluter Noob was Robotik angeht. Ich hoffe hier auf Hilfe zu stoßen.. Mein momentanes Projekt besteht aus einem STM32F4 Mikrocontroller, Joystick, Motortreiber und einem EMG30 Getriebemotor von Devantech. Programmieren tue ich mit Simulink und der Waijung Bibliothek. Die Hardware funktioniert soweit, dass der Motor per Joystick vor- und rückwärts verfahren werden kann. Nun möchte ich die Encoder Daten über UART aus dem Mikrocontroller in Simulink darstellen. (Drehzahl, oder gelesene Pulse und Drehrichtung). Nun liefert der EMG30 über die Signalkabel aber nur Spannungen im mV Bereich und damit kann das Discovery Board wohl nicht viel anfangen. Encoder wird mit 5V gespeist und es ist mir unerklärlich, warum dort nicht mehr ankommt... Zum Testen habe ich heute einen Pololu Getriebemotor mit Encoder angeschlossen, um einen softwareseitigen Fehler auszuschließen. In meiner Host-Datei im Simulink wurden so direkt die Drehrichtung und die gezählten Inkremente des Encoders dargestellt.. Ich hoffe ihr könnt mir helfen :-/ Gruß Sebastian Edith hofft, dass das Thema im richtigen Unterforum ist..
Das klingt so, als wenn du keine PullUp-Widerstände an den Encoder-Ausgängen hast. Die sind meist als OpenCollector ausgeführt, das heißt, sie schalten lediglich einen Transistor gegen GND. Wenn ein PullUp da ist, liegt entweder über den Widerstand Vcc an (wenn der Transistor offen ist) oder GND (wenn der Transistor durchschaltet. Leg mal beide Encoder-Ausgänge jeweils mit 10k gegen Vcc. Dann solltest du die Impulse sehen.
Hi "NPN"
Danke für deine Antwort - das klingt logisch. Dann hatte der Pololu
Motor das wohl schon fest eingebaut und der Devantech nicht..
npn schrieb:
Leg mal beide Encoder-Ausgänge jeweils mit 10k gegen Vcc.
Wie genau soll ich das anstellen? Sind die noch offenen Lötpunkte vllt.
dafür da? Aus dem Datenblatt von Devantech ist leider nicht zu
entnehmen..
Gruß
Sebastian
Tja, wer lesen kann ist klar im Vorteil:
1 | The hall sensors accept voltages between 3.5v and 20v. |
2 | The outputs are open collector and require pull-ups to whatever signal level is required. |
guest schrieb: > Tja, wer lesen kann ist klar im Vorteil: >
1 | > The hall sensors accept voltages between 3.5v and 20v. |
2 | > The outputs are open collector and require pull-ups to whatever signal |
3 | > level is required. |
4 | > |
Das ist wahr - zu meiner Verteitigung muss ich jedoch sagen, dass ich weder wusste was "Pull Ups" sind, noch was "open collector" bedeutet.. In dem Fall ist es leider nicht am Lesen gescheitert, sondern als Maschinenbauer an der elektronischen Begrifflichkeit :D Danke!!
Sebastian A. schrieb: > Wie genau soll ich das anstellen? Sind die noch offenen Lötpunkte vllt. > dafür da? Aus dem Datenblatt von Devantech ist leider nicht zu > entnehmen.. ??? Doch nicht am Motor, an Deinem STM32F4! Schau doch mal ob der vielleicht sogar intere Pullups hat, die Du einfach einschalten kannst.
guest schrieb: > Doch nicht am Motor, an Deinem STM32F4! Schau doch mal ob der vielleicht > sogar intere Pullups hat, die Du einfach einschalten kannst. Entschuldtige meine Unwissenheit - ich bin wie gesagt nich vom Fach und arbeite auch erst seit kurzem mit dem STM32 Der angehängte Screenshot zeigt das Einzige, was ich im Datenblatt unter "Solder Bridges" über Pull Ups finden konnte..
Ok prinzipiell ginge es auch dierekt am Motor, ein Widersdand von Pin 4 (Brown) nach Pin 1 (Purple) und ein zweiter von Pin 4 (Brown) nach Pin 2 (Blue)
Sebastian A. schrieb: > Der angehängte Screenshot zeigt das Einzige, was ich im Datenblatt unter > "Solder Bridges" über Pull Ups finden konnte.. Das sind Lötbrücken auf Deinem Board, die das Bootverhalten des STM beeinflussen, da solltest Du tunlich nicht drangehen. Kenn mich mit den STM auch nicht aus. Aber so ziemlich jeder Cortex-M4 den ich kenne hat via Software schaltbare interene Pullups und -downs.
guest schrieb: > Sebastian A. schrieb: >> Der angehängte Screenshot zeigt das Einzige, was ich im Datenblatt unter >> "Solder Bridges" über Pull Ups finden konnte.. > > Das sind Lötbrücken auf Deinem Board, die das Bootverhalten des STM > beeinflussen, da solltest Du tunlich nicht drangehen. > > Kenn mich mit den STM auch nicht aus. Aber so ziemlich jeder Cortex-M4 > den ich kenne hat via Software schaltbare interene Pullups und -downs. Gut zu wissen - Danke für die Info!
Btw. die bei dem Pololu-Motoren verbauten Encoder scheinen die Pullups tatsächlich schon drin zu haben:
1 | The Hall sensor requires an input voltage, Vcc, between 3.5 and 20 V and draws a maximum of 10 mA. The A and B outputs are square waves from 0 V to Vcc ... |
Ok - dachte ich mir schon :) Dann gilt es ja nur noch zu klären, wie ich die internen Pull Ups und Downs im Simulink Modell "anschalte bzw. integriere" Hat jemand einen Tipp?
Hab keine Ahnung von Simulink, aber irgenwo müßte in Deinem Modell ein Digital Input Block aus diesem Waijung Blockset auftauchen. Sowas hier: http://waijung.aimagin.com/digital_input_block.png Da scheint es der 'Type' zu sein: PU -> Pullup; PD -> Pulldown Die Beschreibung: http://waijung.aimagin.com/index.htm?stm32f4_digital_input.htm ist allerdings für den Allerwertesten. Nur das erste Bild und die Sprechblasen am zweiten passen, der Rest beschreibt einen Output Block.
Danke, das habe ich ebenfalls gefunden, jedoch gibt es im Waijung Set einen extra Block um den Encoder auszulesen, nur keine Möglichkeit die Eingänge mit Pull Ups zu belegen.. Habe ein Bild des Aufbaus und der Block Parameter angehängt. Man muss dem Controller doch irgendwie mitteilen können, dass er an diesem und jenem Pin einen Pull Up benutzen soll..
Dann taugt der Block nichts :( Du könntest versuchen, ob Du einen zusätzlichen Input Block für die selben Pins anlegen kannst, ohne die Daten da weiter zu verarbeiten. Oder den Encoder Block mittels Input Block und Timer oder was auch immer selber nachbauen. Oder als Custom Code Block in C nachbauen. Oder halt doch externe Widerstände dranlöten.
Btw. die Source sind bei dem Blockset ja dabei. Da findet man dann in der Datei stm32f4_encoderread.tlc das hier:
1 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; |
Tja, wenn dort "GPIO_PuPd_UP" stehen würde ... :)
guest schrieb: > Tja, wenn dort "GPIO_PuPd_UP" stehen würde ... :) Vielen Dank für deine Hilfe! Es hat zwar etwas gedauert, aber mittlerweile funktioniert das Auslesen des Encoders :-) Habe den Pull Up/Down mit Ach und Krach in die Block Maske integriert und kann so nun angenehm wählen.. Gruß
guest schrieb: > Dann taugt der Block nichts :( > Du könntest versuchen, ob Du einen zusätzlichen Input Block für die > selben Pins anlegen kannst, ohne die Daten da weiter zu verarbeiten. > > Oder den Encoder Block mittels Input Block und Timer oder was auch immer > selber nachbauen. > > Oder als Custom Code Block in C nachbauen. Kann man nicht alternativ den ganzen Encoder simulieren? > Oder halt doch externe Widerstände dranlöten. Solchen Zirkus kann man sich dann sparen und der Unfallgefahr bei Nutzung eines Lötkolben aus dem Weg gehen. Pfui - Hardware
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.




