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