Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Hawrdwareauswahl für ein Projekt


von Dennis (Gast)


Lesenswert?

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!

von Dr. Sommer (Gast)


Lesenswert?

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.

von Oliver R. (orb)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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

von kopfkratzer (Gast)


Lesenswert?

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

von code23 (Gast)


Lesenswert?

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.

von code23 (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Dennis (Gast)


Lesenswert?

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