Hi, ich suche ein µC Board , etwa Beagle Bone , Raspberry ,Arduino,Banana PI dass einen Messwert misst, in 20 bis 100 ms einen Regleralghoritmus durchläuft um einen Schrittmotor zu verstellen und dann einfach den Messwert noch speichert. Es wäre auch gut, dass die CPU während des Motorumstellens weiterhin messen kann. Dafür müsste das ganze ja multitaskingfähig sein oder ? Danke sehr! Guten Tag noch :)
Almund Hofgeier schrieb: > Dafür müsste das ganze ja multitaskingfähig sein oder ? komisch - wurde nicht erst die selber Frage gestellt? Findet jemand den Thread? Es kommt auf die CPU-Leistung an die du für eine Regelstrecke brauchst. Vermutlich reicht ein µC ohne Multitasking. CPUs können zwar oft nur dinge nacheinander machen, wenn sie das aber schnell genug machen denkst du das es gleichzeitig ist. Du musst einfach so Programmieren, das das Programm nirgends festhängt. (Statemaschine, Timer usw.)
Hallo Almund, mit allen diesen Boards solltest Du eine Lösung auf dein Problem finden können. Multitaskingfähig wird z.B. ein Raspberry mit dementsprechenden Betriebssystem. Wenn Du Raspbian nimmst solltest Du hier keine Probleme haben mit parallele Threads arbeiten zu können. Jetzt kommst Du nur an den Punkt, an dem Du mit Hardware kommunizieren musst. Wenn Du elektrotechnisch bewandt bist, sollte Dir z.B. die GPIO-Pin's vom Raspberry PI ausreichen einen Analogwert zu messen und einen Schirttmotor zu steuern. Mfg Dominik
Almund Hofgeier schrieb: > Hi, ich suche ein µC Board , etwa Beagle Bone , Raspberry > ,Arduino,Banana PI dass einen Messwert misst, in 20 bis 100 ms einen > Regleralghoritmus durchläuft um einen Schrittmotor zu verstellen und > dann einfach den Messwert noch speichert. Kanonen auf Spatzen. Im Prinzip kann das ein ATtiny. Die eigentliche Anforderung kommt von der Hardwareseite: was muß gemessen werden? Wie wird der Schrittmotor angesteuert? > Es wäre auch gut, dass die CPU während des Motorumstellens weiterhin > messen kann. > Dafür müsste das ganze ja multitaskingfähig sein oder ? Jeder µC ist multitaskingfähig. Etwas messen oder einen Meßwert empfangen macht die Hardware ganz alleine. Und wenn die CPU gebraucht wird, dann löst die Hardware einen Interrupt aus und im Interrupt- Handler macht die CPU den Rest.
Ich wuerd auch davon ausgehen, dass ein einfacher Controller wie ein AVR, zB ein Arduino, das kann. Alle 20-100ms einen Stellwert neu rechnen und Ausgeben ist eher einfach. Fuer eine genauere Auskunft sollten wir noch etwas zum Regelalgorithmus, und zu den Sensoren hoeren. Ein PID ?
:
Bearbeitet durch User
Also dafür nen Raspi oder ähnliches zu nutzen, das ist wie mit nem Ferrari Sonntag frühs zum Bäcker fahren um zwei Brötchen zu holen. Mein aktuelles Projekt z.b. bekommt alle 10ms nen 24byte Datenstream über UART, verarbeitet einen Regelalgo mit diesen (ja sogar alle mit 32bit Division), steuert damit drei Servos an, wertet ein Analogsignal aus, berechnet diesen und schickt dieses per UART zurück zum Rechner, wartet auf Ack und erwartet den nächsten Stream, dafür braucht er insgesammt pro Durchlauf ~20ms (und da is das warten auf die UART die längste Zeit!) - und das alles auf nem popeligen Tiny2313. Wenn man sich nun nicht völlig im Code verhaut, dann ist das umstellen des Schrittmotors (4 Phasen) mit einem Systemclock getan. Die Positionsbestimmung sowie die weiteren Schritte können ja via Timer laufen und nebenher weiter die Sensoren abfragen. Raspi, Banana o.ä. ist völlig überzogen für so ne Aufgabe. Aber wie gesagt: WAS für Sensoren willst du nutzen, WELCHEN Motor bzw. WELCHEN Treiber willst du nutzen.
Wahrscheinlich machst Du dir's mit einem Pi nur unnötig schwer. Der hat ein Linux-Betriebssystem, das nur sehr begrenzt "echtzeitfähig" ist. Da kann es schon mal sein, dass ein Taskwechsel deutlich länger dauert als normalerweise. Falls es für die Aufgabe beispielsweise notwendig wäre, GPIO-Pins möglichst zeitgleich einzulesen (weil sie einen Bus darstellen oder sonst irgendwie logisch zusammenhängen), wirst Du dafür Interrupts sperren müssen. Das ist für ein Linux-Userspace-Programm ein no-go, also brauchst Du für den Fall einen eigenen, speziellen Treiber (der das darf und kann). Das ist nicht unmöglich, aber deutlich mehr Aufwand, als einem einfachen µC einen passenden Interrupt-Handler zu verpassen. Für einfache Aufgaben, bei denen es nicht so sehr auf verlässliche Reaktionszeiten ankommt, kann der Pi aber durchaus geeignet sein.
Habe mal die grobe Skizze der Schaltung im Anhang. Ein Ziel ist es den Luftdurchfluss zu messen , also benötigt man einen Luftdurchflusssensor. Zum Beispiel Honeywell für 32,99 € Euro . Dieser ist mit I2C ansprechbar. Andere teuerere geben eine Spannung aus.. Ist I2C eigentlich schneller zu lesen als ADC? :D https://www.conrad.de/de/luft-durchfluss-sensor-haf-bsf-0200-c4ax5-zephyr-serie-honeywell-haf-bsf-0200-c4ax5-200-cmmin-506697.html Dann noch einen Schrittmotor: Zum Beispiel einen von Trinamic für 28 € Ist bestimmt schnell anzusprechen über GPIOs des µC. Muss dafür eigentlich eine H-Brücke aufgebaut werden , wegen den Richtungen? :D Trinamic Test-Motor TMCM QSH4218 0 - 40 V/DC Halte-Moment 0.27 Nm Phasen-Strom (max.) 1 A Vielen Dank ! Grüße Hr. Hofgeier
Mh.. also wenn ich sehe was Du vor hast, würde ich an deiner Stelle mit Codesys RT auf ein Raspberry zum laufen bringen und dann in Codesys selbst die Auslegung für Bedienung (WebVisu), Logger, PID-Regler vornehmen. Mit allem anderen weitern steht Dir erstmal viel Entwicklungsaufwand an.
Peter II schrieb: > Almund Hofgeier schrieb: >> Dafür müsste das ganze ja multitaskingfähig sein oder ? > > komisch - wurde nicht erst die selber Frage gestellt? > > Findet jemand den Thread? Beitrag "arduino multitasking mit freeRtos" Die grobe Skizze zeigt eigentlich nichts wass wir nicht schon wußten. Ich schließ mich Axel und Draco an: einen ATTiny darf das locker schaffen: Die ganze Visualisierung und Bedienelemente einfach am PC machen, an das Tiny gehen nur neue Regelwerte für den PID, zurück vom Tiny kommen die Messwerte. Fertig ist das Praktikum.
:
Bearbeitet durch User
Dein gewählter Luftmesser ist aber ein Durchflussmesser, wie willst du den vor das Rohr bringen bzw. wie willst du das Rohr mit dem Sensor verbinden?! Im übrigen würde sich ein Servo für die Klappensteuerung besser eignen. Mal so am Rand. Da sparst du dir die H Brücke bzw. Treiber - und änderst immer nur einmal einen Puls auf der PWM zum Servo.- das kostet ein Systemclock Zeit (OCRxn = y). Und schon ist das Thema (bzw. isses bei dir ja Angst!) Multitasking vom Tisch. Warum braucht man eigentlich in solch einem Anwendungsfall so hohe Geschwindigkeiten?! o.O
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.