Forum: Mikrocontroller und Digitale Elektronik Problem mit Auslesen des Encoders eines EMG30 Getriebemotors


von Sebastian A. (sebastian_s608)


Lesenswert?

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..

von npn (Gast)


Lesenswert?

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.

von Sebastian A. (sebastian_s608)


Angehängte Dateien:

Lesenswert?

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

von guest (Gast)


Lesenswert?

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.

von Sebastian A. (sebastian_s608)


Lesenswert?

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!!

von guest (Gast)


Lesenswert?

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.

von Sebastian A. (sebastian_s608)


Angehängte Dateien:

Lesenswert?

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..

von guest (Gast)


Lesenswert?

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)

von guest (Gast)


Lesenswert?

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.

von Sebastian A. (sebastian_s608)


Lesenswert?

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!

von guest (Gast)


Lesenswert?

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 ...

von Sebastian A. (sebastian_s608)


Lesenswert?

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?

von guest (Gast)


Lesenswert?

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.

von Sebastian A. (sebastian_s608)


Angehängte Dateien:

Lesenswert?

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..

von guest (Gast)


Lesenswert?

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.

von guest (Gast)


Lesenswert?

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 ... :)

von Sebastian A. (sebastian_s608)


Angehängte Dateien:

Lesenswert?

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ß

von Duck&Wech (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.