Hallo, ich arbeite gerade an einem Projekt im dem es nun darum geht 2-4 Inkrementalgaber am PC auszulesen. Mein Programm ist aufgrund verschiedener anderer APIs in C++ geschrieben und jetzt suche ich eine möglichst einfach und günstige Lösung die Geberwerte in meine Programm zu präsentieren. Ich hab mi schonmal umgeschaut aber nichts konkretes gefunden, gibt es eine Möglichkeit sowas recht simpel am PC zu realisieren, ohne teuere Wandler oder Interfacekarten? Vllt mit RS232 und einem kleinen ATMega? Danke schonmal. Marco
Ein Arduino kann an USB Daten senden. Ein PC kann sie lesen. Schreibe also ein Arduinoprogramm, das diese Daten ausliest und sendet. Robert
Ok, danke, wird ich mir mal anschauen. Ich kenn mich zwar mit der Arduino Programmierung nicht aus, aber da finden sich mit Sicherheit geeignete Beispielprogramme mit denen man was zusammenbasteln kann
Das ist wirklich nicht schwer :-) Einen Pro-Micro-Klon gibt es für < 4$. Der gibt sich dem PC gegenüber als virtueller COM Port aus, den du leicht mit C++ öffnen und dann Daten austuaschen kannst.
Marco R. schrieb: > Ok, danke, wird ich mir mal anschauen. Ich kenn mich zwar mit der > Arduino Programmierung nicht aus, aber da finden sich mit Sicherheit > geeignete Beispielprogramme mit denen man was zusammenbasteln kann Suche nach der Homepage von Arduino, da ist alles drauf, einschliesslich IDE.
R. F. schrieb: > Marco R. schrieb: >> Ok, danke, wird ich mir mal anschauen. Ich kenn mich zwar mit der >> Arduino Programmierung nicht aus, aber da finden sich mit Sicherheit >> geeignete Beispielprogramme mit denen man was zusammenbasteln kann > > Suche nach der Homepage von Arduino, da ist alles drauf, einschliesslich > IDE. Ich hab mir jetzt mal einen Sainsmart Arduino Mega 2560 Klon gekauft, einfach zur Sicherheit falls noch mehr Anforderungen kommen sollten, ich schau das ganze mir mal an und schreib hier dann zurück
Brauch ich für die RS232 Kommunikation zw. PC und Arduino noch ein bestimmtes Shield? Hab gelesen das der Arduino mit 5V Seriell sendet, der PC aber mit 12V dagegenhält und das dann eher schlecht für den Arduino ist.
Der RS232 Anschluss ist auf den USB-Wandelchip geführt, dh mit den entsprechenden Befehlen schreibst du auf den USB Bus. Ich schlage daher das Verwenden des USB Busses vor.# Robert
Marco R. schrieb: > Brauch ich für die RS232 Kommunikation zw. PC und Arduino noch ein > bestimmtes Shield? Das Arduino Mega 2560 Board hat USB. Nein, da brauchst du kein RS232-Shield für. Und stell dir die Auswertung von Inkrementalgebern nicht so einfach vor. Dazu gibt es Stammtischmeinungen ohne Ende. Der aktuelle Thread Beitrag "Re: Drehimpulsgeber" zu dem Thema ist mittlerweile bei über 280 Postings. Ein Arduino Due (AT91SAM3E) könnte die Inkrementalgeber auch direkt hardwaregestützt auswerten.
Marco R. schrieb: > Hab gelesen das der Arduino mit 5V Seriell sendet, der PC aber mit 12V > dagegenhält und das dann eher schlecht für den Arduino ist. Das passiert zum Glück nur, wenn man Ausgang mit Ausgang verbindet. Guter Tip - vermeide es. Aber selbst wenn man richtig Eingang mit Ausgang verbindet, geht das schief, weil der Arduino "TTL"-Signale liefert. Gegenüber RS232 sind die Signale invertiert und nicht bipolar. Da wird man um einen RS-232 Treiber, wie den klassichen MAX232 oder einen seiner Nachfolger, nicht drumrum kommen. Das nützt natürlich nur etwas, wenn der PC so alt ist, dass er noch eine RS-232 Schnittstelle hat. Guck mal sehr genau nach. Sonst ist das vergebene Liebesmüh und stellt sich spätestens beim Kauf eines Nachfolge-PCs als unglückliche Schnittstellenwahl heraus, sofern man nicht noch extra einen USB-RS232-Wandler rumfliegen haben möchte.
Thomas W. schrieb: > Marco R. schrieb: >> Hab gelesen das der Arduino mit 5V Seriell sendet, der PC aber mit 12V >> dagegenhält und das dann eher schlecht für den Arduino ist. > > Das passiert zum Glück nur, wenn man Ausgang mit Ausgang verbindet. > Guter Tip - vermeide es. > > Aber selbst wenn man richtig Eingang mit Ausgang verbindet, geht das > schief, weil der Arduino "TTL"-Signale liefert. Gegenüber RS232 sind die > Signale invertiert und nicht bipolar. Da wird man um einen RS-232 > Treiber, wie den klassichen MAX232 oder einen seiner Nachfolger, nicht > drumrum kommen. Das nützt natürlich nur etwas, wenn der PC so alt ist, > dass er noch eine RS-232 Schnittstelle hat. Guck mal sehr genau nach. > Sonst ist das vergebene Liebesmüh und stellt sich spätestens beim Kauf > eines Nachfolge-PCs als unglückliche Schnittstellenwahl heraus, sofern > man nicht noch extra einen USB-RS232-Wandler rumfliegen haben möchte. Alles klar, ich werde es dann wie oben vorgeschlagen über den USB Anschluss laufen lassen. Als Library will ich diese hier verwenden, da wird der MEGA als kompatibel angezeigt: http://www.pjrc.com/teensy/td_libs_Encoder.html Der Geber ist ein INDUcoder mit 2 Ausgängen also mit 4fach Zählung für beide Drehrichtungen
Marco R. schrieb: > Der Geber ist ein INDUcoder mit 2 Ausgängen also mit 4fach Zählung für > beide Drehrichtungen Welcher Typ genau, oder welche Auflösung bei welcher Geschwindigkeit? Von der max. Ausgangsfrequenz hängt ab, ob man noch per Software auswerten kann oder unbedingt einen Hardware-Quadraturdekoder braucht. Ist es ein Drehgeber oder ein Lineargeber? Wie schnell müssen die Zählerstande ausgelesen werden ggf. auch synchron? Eine einfache Lösung in Software bis 350 kHz per IIC-Bus auszulesen: Beitrag "mini Quadraturdekoder + 32 Bit Zähler + TWI, Attiny25" Durch entsprechende Vergabe der IIC-Adresse kann man einen oder auch zehn Kanäle erfassen.
m.n. schrieb: > Marco R. schrieb: >> Der Geber ist ein INDUcoder mit 2 Ausgängen also mit 4fach Zählung für >> beide Drehrichtungen > > Welcher Typ genau, oder welche Auflösung bei welcher Geschwindigkeit? > Von der max. Ausgangsfrequenz hängt ab, ob man noch per Software > auswerten kann oder unbedingt einen Hardware-Quadraturdekoder braucht. > Ist es ein Drehgeber oder ein Lineargeber? Wie schnell müssen die > Zählerstande ausgelesen werden ggf. auch synchron? > > Eine einfache Lösung in Software bis 350 kHz per IIC-Bus auszulesen: > Beitrag "mini Quadraturdekoder + 32 Bit Zähler + TWI, Attiny25" > Durch entsprechende Vergabe der IIC-Adresse kann man einen oder auch > zehn Kanäle erfassen. http://www.inducoder.de/de/produkt/micro-encoder-es181.html Das ist der Encoder, Ausgangsfrequenz <=50kHz, max 1600 Impulse/Umdrehung sollte das ein Problem geben, ich will wie oben beschrieben max. 4 gleichzeitig auswerten?
Marco R. schrieb: > Das ist der Encoder, Ausgangsfrequenz <=50kHz, max 1600 > Impulse/Umdrehung sollte das ein Problem geben, ich will wie oben > beschrieben max. 4 gleichzeitig auswerten? Per Software zu zählen, braucht es einen µC pro Kanal. Gezeigte Schaltung+Programm mit dem ATtiny25 funktionieren damit: für vier Kanäle in insgesamt 4-facher Ausführung. Wenn Du mit dem PC einen IIC-Bus steuern kannst, könnte ich Dir ein paar ATtiny25 programmieren. Eine Alternative wären noch ATtiny2313, die per RS232 angesprochen werden können. Wenn ein µC alle vier Kanäle auswerten soll, bräuchte er entsprechend viele Quadratur-Dekoder auf dem Chip. Ob der von Wolfgang genannte AT91SAM3E das bietet, sehe ich auf den ersten Blick nicht. Es kann sein, daß er nur einen Dekoder-Kanal hat, dann wäre diese Lösung zu aufwendig. Oder es sind drei Kanäle, dann bräuchte man ihn doppelt. Ein STM32F4xx kann alle vier Kanäle per Hardware erfassen. Es reicht ein STM32F411, den es für wenig Geld auf einem Nucleo-Board gibt. Egal, wie Du es machen möchtest, ein wenig Lötarbeit ist mit dabei, aber gut zu schaffen.
m.n. schrieb: > Per Software zu zählen, braucht es einen µC pro Kanal. Gezeigte > Schaltung+Programm mit dem ATtiny25 funktionieren damit: für vier Kanäle > in insgesamt 4-facher Ausführung. Wenn Du mit dem PC einen IIC-Bus > steuern kannst, könnte ich Dir ein paar ATtiny25 programmieren. > Eine Alternative wären noch ATtiny2313, die per RS232 angesprochen > werden können. > > Wenn ein µC alle vier Kanäle auswerten soll, bräuchte er entsprechend > viele Quadratur-Dekoder auf dem Chip. Ob der von Wolfgang genannte > AT91SAM3E das bietet, sehe ich auf den ersten Blick nicht. Es kann sein, > daß er nur einen Dekoder-Kanal hat, dann wäre diese Lösung zu aufwendig. > Oder es sind drei Kanäle, dann bräuchte man ihn doppelt. > Ein STM32F4xx kann alle vier Kanäle per Hardware erfassen. Es reicht ein > STM32F411, den es für wenig Geld auf einem Nucleo-Board gibt. > > Egal, wie Du es machen möchtest, ein wenig Lötarbeit ist mit dabei, aber > gut zu schaffen. Vielen Dank für das Angebot! I²C Bus sieht eher schlecht aus. Hier ist mein Szenario mal genauer. Ich habe einen Industrie-PC (Bressner) der mit einer Blackmagic DeckLink Karte ausgestattet ist. Auf dem PC läuft dann meine Videosoftware (C++ mit Blackmagic SDK - funktioniert schon), das Videosignal kommt von einer Pan-Tilt Kamera die an beiden Achsen die INDUcoder sitzen hat. Meine Aufgabe ist es jetzt diese Pan-Tilt Werte in der Software einzublenden, möglichst einfach. Der Bressner hat 1x Parallel und 2x RS232 Eingänge. Meine Idee war jetzt mit dem Arduino Mega 2560 (hab ich mir jetzt einfach mal bei Amazon bestellt), die Geber zu lesen und dann per RS232 auszugeben und dann in C++ einzulesen. Falls es da eine einfachere Möglichkeit gibt bin ich gern offen für Vorschläge, da ich von der ganzen Schnittstellentechnik nicht wirklich Ahnung und Erfahrung hab (bin gerade 19 und hab natürlich in dem Umfeld außer Learning-by-Doing keine Erfahrung).
Marco R. schrieb: > einer Pan-Tilt Kamera die an beiden Achsen die INDUcoder sitzen hat. > Meine Aufgabe ist es jetzt diese Pan-Tilt Werte in der Software > einzublenden, möglichst einfach. Der Bressner hat 1x Parallel und 2x > RS232 Eingänge. Meine Idee war jetzt mit dem Arduino Mega 2560 (hab ich > mir jetzt einfach mal bei Amazon bestellt), die Geber zu lesen und dann > per RS232 auszugeben und dann in C++ einzulesen. Mit dem Arduino kannst Du schon einmal Deine Versuche beginnen: zunächst wird ein Kanal erfaßt und per RS232 der zugehörige Wert ausgegeben. Da finde ich bei mir sicherlich ein paar Codeschnipsel. Dann muß Du sehen, welche Frequenz die Drehgeber tatsächlich liefern. Je nach Masse der Kamera werden da sicherlich nicht die max. 50 kHz ausgegeben werden, wie sie im Datenblatt stehen. Dann sieht es schon einmal besser aus. Geschätzt schafft ein AVR (ATmegaxx) max. 5 kHz bei vier Kanälen, wobei die Frequenz höher sein kann, wenn nicht alle Bewegungen mit hoher Geschwindigkeit gleichzeitig stattfinden. Auch für vier Kanäle finde ich noch Codeschnipsel. Wenn die Geschwindigkeit dennoch sehr hoch sein muß, könnte man den Arduino als Schnittstellen-Konverter arbeiten lassen: per IIC werden die Daten eingesammelt und per RS232 an den PC ausgegeben. Das wäre eine Option, die aber derzeit nicht unbedingt notwendig erscheint. Marco R. schrieb: > Falls es da eine einfachere Möglichkeit gibt bin ich gern offen für > Vorschläge, da ich von der ganzen Schnittstellentechnik nicht wirklich > Ahnung und Erfahrung hab (bin gerade 19 und hab natürlich in dem Umfeld > außer Learning-by-Doing keine Erfahrung). Die einfachste Möglichkeit ist, ein paar Scheine locker zu machen. Aber es schadet auf keinen Fall, eigene Erfahrungen zu sammeln. Mit 19 hat der Arbeitstag ja auch noch 24 Stunden; was der Kopf noch nicht schafft, schaffen die Beine ;-)
Marco R. schrieb: > Meine Aufgabe ist es jetzt diese Pan-Tilt Werte in der Software > einzublenden, möglichst einfach. Dazu noch ein Hinweis: die Geber sind inkremental, soll heissen beim Einschalten ist die Position unbekannt (und der Zähler wahrscheinlich 0). Daher muss als allererstes eine Referenzposition angefahren werden, entweder hat der Geber dafür eine dritte Spur, die nur einen einzigen Impuls ausgibt, oder man fährt gegen einen Endschalter. Den Vorgang kann man manuell auslösen oder automatisch bei der Initialisierung. Eine weitere Konsequenz ist, dass der Positionszähler eben immer vom vorhandenen Wert aufwärts oder abwärts weiterzählt, geht ein Impuls verloren, so stimmt die Position nicht mehr. Die Auswertung muss also sehr zuverlässig sein, es kann auch empfehlenswert sein, gelegentlich tu rekalibrieren. Einfach einen Dekoder dranhängen und auslesen genügt also nicht. Georg
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.