Hallo Leute, ich bin neu hier und bin auf der Suche nach Tipps für ein Projekt. Selbst bin ich kein E-Techniker sondern Informatiker und habe daher leider quasi garkeine Ahnung von µC oder Elektrotechnik. Natürlich kann ich C(++) aber Assembler kommt nicht in Frage. Vorweg: Mir geht es primär um möglichst geringen Zeitaufwand meinerseits. Dh ob die "Lösung" (µC, Arduino, Tinkerforge, Raspberry, PC, ...) dann 1€ oder 100€ kostet ist mir egal. Hauptsache ich muss nicht erst 10 Bücher lesen und einen E-Technik BSC machen ;) Stellt euch bitte volgenden Aufbau vor: Eine kreisrunde Scheibe wird gedreht und ein Drehgeber auf der Achse (auch Inkrementalgeber genannt?) misst die Winkel-Position. Auf der Scheibe ist am Rand ein Objekt befestigt und nebem der Scheibe sitzt eine Lichtschranke die das Objekt detektiert, wenn die Scheibe sich dreht. Mein Ziel wäre jetzt ein Stück Hardware zu kaufen und programmieren, welches mit einem einstellbaren Offset nach passieren der Lichtschranke eine LED blinken lässt - allerdings EXAKT zum richtigen Zeitpunkt und für genau so viele Drehgeberimpulse, wie das Objekt auch die Lichtschranke verdeckt hat. Dh ich würde im Quellcode einen Offset zum Auslösen der LED hinterlegen wollen, damit die LED immer angeht, wenn das Objekt zB genau auf der anderen Seite zur Lichtschranke angekommen ist. Hier sollen keine Schwankungen in der Genauigkeit stattfinden. Es geht also darum die 3 Komponenten, Drehgeber, Lichtschranke und LED anzuschließen und deren Signale echtzeitfähig zu verarbeiten bzw Ausgänge zu schalten. Da ich für mein Projekt sowieso einen vollwertigen PC einsetzen werde, wäre mein aller größter Wunsch das ganze DIREKT über einen PC zu verwalten. Nach einigem Lesen zum Thema Real-Time Operating-Systems (mein Favorit ist http://de.wikipedia.org/wiki/RTLinux) bin ich zu dem Schluss gekommen, dass es zwar theoretisch mit einem PC und IRQ geht, aber praktisch leider die Hardware-Schnittstellen fehlen, die eine hinreichend niedrige Latenz und einen hinreichend niedrigen Jitter aufweisen. Ist das erstmal korrekt soweit? Wie gesagt - der PC wäre meine ABSOLUTE wunschlösung um mir weitere Hardware, Programmierung und Schnittstellen zu ersparen. Sofern der PC diese Anforderung nicht erfüllt brauche ich also wahrscheinlich zusätzliche "Echtzeitfähige" Hardware? Beim Ansehen der Hardware auf myavr.de habe ich entdeckt, dass selbst die günstigsten Boards sogenannte 16 Bit Timer/Counter haben. Ist es das, was ich benötige um die hohe Frequenz der Drehgeberimpulse zu Verarbeiten? Ich gehe bei einem hochaufgelösten Drehgeber von >10kHz Drehgeberimpulsen aus. Danke im Voraus für hilfreiche Ratschläge!
Dennis schrieb: > allerdings EXAKT zum richtigen Zeitpunkt und > für genau so viele Drehgeberimpulse, wie das Objekt auch die > Lichtschranke verdeckt hat. "exakt" ist unmöglich. Einen Delay gibt es immer. Die Frage ist, wieviel für dich akzeptabel ist. 1ns? 1µs? 1ms? Prinzipiell lässt sich das Problem vermutlich am einfachsten mit einem Arduino lösen; unter Verwendung der Libraries solltest du recht schnell zum Ziel kommen. Je nach Anforderung an die Delay-Zeit musst du aber ggf. direkt auf die Register zugreifen oder ein paar Zeilen Assembler schreiben; das ist aber nicht sonderlich schwierig. Das größere Problem wird onehin eher die zeitliche Genauigkeit (Delay) des Drehgebers selber sein. "LED blinken lassen" klingt für mich als wäre das eine Ausgabe für den Benutzer; der merkt den Unterschied zwischen 1ms und 1ns onehin nicht (obwohl Faktor 100000 dazwischen) was die Delay-Anforderung ziemlich harmlos macht. Auf dem Arduino ist die Übertragung von Messwerten an den PC auch ziemlich einfach.
Welche Drehgeschwindigkeit muß der Prozessor verarbeiten? Wie genau muß die LED gesteuert werden, bzw wie genau ist der Drehgeber? Du kannst einen Drehgeber mit Absolutposition nutzen und sparst Dir die Lichtschranke oder Du steuerst die Scheibe mit einem Schrittmotor, nutzt die Lichtschranke für eine Nullpositionsbestimmung und sparst Dir den Drehgeber. Wenn Du anhand der Drehzahl die Signalfrequenz abschätzuen kannst kannst Du einen Prozessor suchen der Schnell genug ist, der Raspberry und der PC fallen mangels Echtzeitfähigkeit aus.
@ Dennis (Gast) >Vorweg: Mir geht es primär um möglichst geringen Zeitaufwand >meinerseits. Dh ob die "Lösung" (µC, Arduino, Tinkerforge, Raspberry, >PC, ...) dann 1€ oder 100€ kostet ist mir egal. Hauptsache ich muss >nicht erst 10 Bücher lesen und einen E-Technik BSC machen ;) naja, ohne ein MINIMUM an Grundlagen geht es nunmal nicht. >Eine kreisrunde Scheibe wird gedreht und ein Drehgeber auf der Achse >(auch Inkrementalgeber genannt?) Ja, siehe Drehgeber. > misst die Winkel-Position. >Auf der Scheibe ist am Rand ein Objekt befestigt und nebem der Scheibe >sitzt eine Lichtschranke die das Objekt detektiert, wenn die Scheibe >sich dreht. OK. >Mein Ziel wäre jetzt ein Stück Hardware zu kaufen und programmieren, >welches mit einem einstellbaren Offset nach passieren der Lichtschranke >eine LED blinken lässt - allerdings EXAKT zum richtigen Zeitpunkt und >für genau so viele Drehgeberimpulse, wie das Objekt auch die >Lichtschranke verdeckt hat. Über welche Drehzahlen und Zeitverzögerungen reden wir hier? >Schluss gekommen, dass es zwar theoretisch mit einem PC und IRQ geht, ja. Wie viele theoretischen Dinge. >aber praktisch leider die Hardware-Schnittstellen fehlen, die eine >hinreichend niedrige Latenz und einen hinreichend niedrigen Jitter >aufweisen. Wieviel Jitter und Latenz willst du denn erreichen? >Ist das erstmal korrekt soweit? Nein. Denn ohne konkrete Zahlen ist der PC beliebig genau. >Sofern der PC diese Anforderung nicht erfüllt brauche ich also >wahrscheinlich zusätzliche "Echtzeitfähige" Hardware? ein kleiner Mikrocontroller kann das problemlos mit Jitter im Mikrosekundenbereich. >das, was ich benötige um die hohe Frequenz der Drehgeberimpulse zu >Verarbeiten? Ich gehe bei einem hochaufgelösten Drehgeber von >10kHz >Drehgeberimpulsen aus. Ja.
kopfkratz Also wenn Deine LED mit 10kHz blinkt siehst Du dauernd hell ... Was ist denn genau die Aufgabenstellung ? Ein Tiny85 z.B. kann das ohne Probleme mit internem Takt und PinChangeIRQ: IRQ wird ausgelöst -> Flag wird gesetzt -> Hauptschleife sieht gesetzes Flag und schaltet LED an -> Flag wird gelöscht Dafür brauchst Du: Tiny85 1,- Progger 10,- Hühnerfutter 5,- Und Lötkolben hast Du sicher schon :-P Und mit der USBLib kannst Du den als HID an den USB Deines PC anschließen. Wenn man ja wüßte welchen Zweck Du damit verfolgst ...
Also das lässt sich, wie gesagt, erst sagen wenn wir die genauen Anforderungen kennen. Ich vermute allerdings, dass da noch mehr dahinter steckt, denn nur eine LED mit 10kHZ blinken lassen macht ja mal garkeinen Sinn. Grundsätzlich würde ich das ganze aber nicht NUR mit dem PC lösen. Wenn schon würde ich das ganze Geschalte mit einem kleinen µC lösen (bei deinen Kenntnissen am besten ein AVR) und die Werte dann per USB, RS-232 o.Ä. auf den PC schmeissen.
Dennis schrieb: > Beim Ansehen der Hardware auf myavr.de habe ich entdeckt, dass selbst > die günstigsten Boards sogenannte 16 Bit Timer/Counter haben. Ist es > das, was ich benötige um die hohe Frequenz der Drehgeberimpulse zu > Verarbeiten? Ne, der Timer hat nur etwas mit im µC gesetzten Countern/Zeiten zu tun. Der ist für das betreiben der Lichtschranke zweitrangig.
Dennis schrieb: > die eine > hinreichend niedrige Latenz und einen hinreichend niedrigen Jitter > aufweisen. Solange Du niemandem verrätst, was für Dich hinreichend ist, kann Dir auch niemand helfen. Es wäre auch interessant, was das 10kHz Blinken soll, ein Mensch kann das ja nicht erkennen.
Hallo, danke erstmal für die große Beteiligung. Das geht ja schnell hier :) Natürlich wollte ich euch keine wichtigen Infos vorenthalten - es ging mir nur darum mein erstes Posting nicht zu langatmig zu schreiben und mich auf das wesentliche zu konzentrieren. > denn nur eine LED mit 10kHZ blinken lassen macht ja mal garkeinen Sinn. > Also wenn Deine LED mit 10kHz blinkt siehst Du dauernd hell ... > Es wäre auch interessant, was das 10kHz Blinken soll, ein Mensch kann das ja nicht erkennen. Hier war ich wohl zu ungenau! Die LED soll nicht im Takt des Drehgebers blinken sondern nach einem eingestellten Offset (zB 2000 Drehgeber Ticks) angehen und für genau so lange an bleiben, wie das Objekt die Lichtschranke verdeckte. > "exakt" ist unmöglich. Einen Delay gibt es immer. Die Frage ist, wieviel für dich akzeptabel ist. 1ns? 1µs? 1ms? > Welche Drehgeschwindigkeit muß der Prozessor verarbeiten? > Wie genau muß die LED gesteuert werden, bzw wie genau ist der Drehgeber? > Über welche Drehzahlen und Zeitverzögerungen reden wir hier? > Wieviel Jitter und Latenz willst du denn erreichen? Um mal diese zusammenhängenden Fragen zu beantworten erzähl ich einfach mal ausführlicher was ich vor habe: Die LED war nur ein Beispiel. Eigentlich möchte ich die Bildaufnahme eine Kamera triggern und evtl noch einen Belichtungsblitz auslösen. Da aber das Foto nicht in dem Moment entstehen soll, wo das Objekt die Lichtschranke verdeckt, sondern später, muss eben ein Offset einstellbar sein. Das geschossene Bild geht zum PC und dieser wertet das Foto aus. Abhängig vom Ergebnis der PC-Auswertung soll der gesuchte Baustein dann vom PC erfahren ob er den einen oder den anderen IO aktivieren soll wenn das Objekt beim eingestellten Offset (in Drehgeberticks) angekommen ist. Ich gehe davon aus, dass ich einen recht genauen Drehgeber verwenden werde (zB 5000?) und die kleine Scheibe sich schnell drehen kann. So kam ich auf meine geschätzen >10kHz der Drehgeberimpulse. Als Ziel würde ich jetzt einfach mal 100 Objekte/Sekunde anpeilen. Der gewünschte Jitter ergibt sich jetzt aus der Objektgeschwindigkeit? Ist das Objekt nämlich nicht mehr im Bild nützt mein Foto nichts ;-) Wenn ich mal von einer Objektgeschwindigkeit von 2m/s (=> 2000mm / s = 2mm/ms) ausgehe wäre eine ein Jitter von unter 1ms erstrebenswert, oder? Das Objekt auf dem Foto kann wenige mm groß sein und daher darf die Bildaufnahme höchstens wenige mm schwanken um es immer im Bild zu haben. Außerdem wäre schön wenn der Baustein einfachste Statistiken mitzählen kann: Wie oft hat der PC ein bestimmtes Obj dem einen oder den anderen IO Pin zugeordnet? > ggf. direkt auf die Register zugreifen oder ein paar Zeilen Assembler schreiben Daran soll es nicht scheitern. Mir geht es darum, dass der Großteil der Programmierung in C(++) stattfinden kann. > Du kannst einen Drehgeber mit Absolutposition nutzen und sparst Dir die Lichtschranke oder Du steuerst die Scheibe mit einem Schrittmotor, nutzt die Lichtschranke für eine Nullpositionsbestimmung und sparst Dir den Drehgeber. Ich fürchte, den Aufbau kann ich nicht mit einem der Vorschläge vereinfachen? Wenn ich das nun nach meinen Internetrecherchen und euren Postings richtig einschätze, reicht von der Komplexität her ein einfacher µC wie ein Atmel AVR und um genügend IO Pins verwenden zu können mache ich mit der Arduino Plattform alles richtig?
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.