Hallo Leute,
ich habe eine Anwendung bei der ich einen DC-Motor mit 256 Imp Encoder, ein LCD, zwei Analog-Ports und drei Schalter, betreiben muss. Jetzt habe ich das Problem, dass mein Programm sehr langsam abgearbeitet wird und die Reaktionszeiten sehr langsam sind. Da die Anwendung dummer weise sehr schnelle Reaktionen erfordert, ist das nicht so schön.
Meine Idee ist nun entweder benötige ich einen Microcontroller mit wesentlich mehr Rechenpower, oder ich versuche das Programm auf zwei Minis zu paralelisieren.
Was würdet Ihr Empfehlen?
Viele Grüße
DrFlopp
Die Möglichkeit Interrupts zu nutzen, fällt aus?
Hallo flomei,
warum, haben die Minis keine Interrupts? Dann kann ich die Idee gleich vergessen, denn ohne Interrupts funktioniert die Encoder-Auswertung nicht. Ich habe zusätzlich gehofft, durch den Einstz von zwei Board zwei zusätzlich Interrupts zur Verfügung zu haben.
Gruß
DrFlopp
Die Arduino Minis haben Interrupt wie die großen. Sie hätten 8 Digital-Eingänge wovon 2 aber nicht auf die Stifte gerausgeführt sind.
Ja, das teilen der Aktivitäten auf 2 Arduinis könnte helfen, aber der Datentrasfer zwischen den beiden frißt wieder Rechenpower. Aber eine gute auf Zeitersparnis optimierte Programmierung könnte auch einiges bringen.
Geüße Uwe
DrFlopp:
Hallo flomei,
warum, haben die Minis keine Interrupts?
Doch. Meine Frage implizierte eher, ob deine Anwendung vielleicht die Möglichkeit Interrupts zu nutzen ausschließt...
Vielen Dank für Eure Tipps,
ich bin mir sicher keine optimale Programmierung zu haben, da zu bin ich auch noch viel zu neu in der Materie. Mein Arduino ist an allen PINS belegt, die Reaktionszeiten auf Ereignisse sind sehr übel. Ich könnte mir vorstellen, dass der Encoder den Programmablauf vollständig ausbremst, denn der befeuert über die zwei Interrupts ständig mit 100-300Hz.
Wenn man zwei Boards koppelt könnte man über einen I2C-Bus arbeiten, aber das serielle Übertragen von Werten erscheint mir nicht unbedingt zielführen zu sein. Hätte ich die Möglichkeit über 3 digital Pins parallel zu kommunizieren.
Nur wie kann ich "analoge" Daten übertragen? Könnte man diese Als PWM-Ausgeben und über Analog-Input einlesen? Braucht man dazu eine zusätzliche Beschaltung?
Vielen Dank für eure Unterstützung
DrFlopp
DrFlopp:
Vielen Dank für Eure Tipps,
ich bin mir sicher keine optimale Programmierung zu haben, da zu bin ich auch noch viel zu neu in der Materie. Mein Arduino ist an allen PINS belegt, die Reaktionszeiten auf Ereignisse sind sehr übel. Ich könnte mir vorstellen, dass der Encoder den Programmablauf vollständig ausbremst, denn der befeuert über die zwei Interrupts ständig mit 100-300Hz.
Wenn man zwei Boards koppelt könnte man über einen I2C-Bus arbeiten, aber das serielle Übertragen von Werten erscheint mir nicht unbedingt zielführen zu sein. Hätte ich die Möglichkeit über 3 digital Pins parallel zu kommunizieren.
Nur wie kann ich "analoge" Daten übertragen? Könnte man diese Als PWM-Ausgeben und über Analog-Input einlesen? Braucht man dazu eine zusätzliche Beschaltung?
Vielen Dank für eure Unterstützung
DrFlopp
Du machst eine Komplizierte Schae noch komplizierter.
Analog vergiß es. Zuest treibst Du den Aufwand um beide Flanken des Encoders zu triggern und dann versaust Du die messung indem Du den Wert in 256 auflösung übertragen wllst? meßungenuigkeiten nicht berücksichtigt.
Nimm entweder I2C oder SPI.
Grüße Uwe
Wenn das Programm geschickt geschrieben ist, hast du garkein Problem damit, wenn du die Interrupts mit 100-300 Hz unter Beschuss nimmst. Außer die Interrupt Rotienen sind riesig.
Hallo Uwe,
das ist ein Missverständnis, ich will natürlich nicht die Daten des Encoders übertragen, sondern die Differenz zweier analoger Eingänge, um damit die PWM des Aktors zu regeln. Dann könnte ich die Analogdatenverarbietung auf das Master-Board begrenzen, ich könnte mir vorstellen das Slave-Board für die Motorregelung dadurch entlastet werden könnte. Alternativ muss ich beide A/D-Wandlungen auf beiden Boards durchführen. Was schneller ist kann ich zur Zeit nicht beurteilen. Zum Programmieren ist die zweite Variante wahrscheinlich einfacher.
Den Interrupt des Master-Boards würde ich bnutzen um im Falle, dass die analoge Eingangsspannung auf Null geht schnell reagieren zu können. Das ist eine Sicherheitsschaltung, dass im Falle eines Kurzschlusses der Aktor schnell zurückgezogen wird. Die dazu erforderliche analoge Schaltung habe ich gerade in Arbeit. Ich werde versuchen das Eingangssignal gleichzurichten, durch einen Tiefpassfilter zu glätten, mit einer Z-Diode zu begrenzen, und mit Hilfe eines Spannungsteilers den Pegel auf die Schaltschwelle des Interrupt-Ports einzustellen. Die Gleichrichtung und der Tiefpass funktioniert schon, der Spannungsteiler fehlt noch. Ich bin gespannt ob das Funktioniert.
Die Minis habe ich heute bestellt, hoffentlich kommen die bald.
Gruß
DrFlopp
Oh, kleiner Nachtrag erforderlich, ich brauche noch einen OP-Verstärker um die Spannungen addieren zu können. Das könnte glaube ich dann Funktionieren.
Gruß
DrFlopp
Hallo Leute,
Ich habe heute meine zwei Arduino Mini Pro bekommen. Ich habe jetzt tatsächlich mal wieder einige Fragen bezüglich der Pinbelegung und der Beschriftung.
Stromversorgung sott über den Pin VCC oder RAW geschehen.
Verstehe ich das Richtig:
Über RAW kann ich eine Unstabilisierte Spannung von größer 7,5 V einspeisen?
Der Pin 0 ist mit TXD und der Pin 1 mit RXI beschriftet?
Gruß
DrFlopp
Über RAW kann ich eine Unstabilisierte Spannung von größer 7,5 V einspeisen?
Der Pin 0 ist mit TXD und der Pin 1 mit RXI beschriftet?
ja, ja und ja.
Grüße Uwe
Cool,
dann habe ich jetzt doch alles richtig gemacht und verdratet. Der alte Arduino war komplett belegt, jetzt musste ich alle Ports auf zwei Controller aufteilen und neu verdraten. Ich habe zwei Ports für die parallele Kommunikation freigehalten. Damit habe ich die Möglichkeit alle erforderlichen Informationen zu Übertragen. Ich habe dabei das Master und Slave Prinzip angewendet, ich übertrage Daten vom Master zum Slave und nicht andersherum, dadurch wird die Kommunikation auf ein Minimum reduziert. Jetzt arbeite ich an der Programmierung, den Master habe ich jetzt soweit fertig, am Slave muss ich noch etwas arbeiten. (Aber nicht mehr heute)
Viele Grüße
DrFlopp
Hallo Leute,
mit dem Wissen ist es wohl so wie mit der Katze - "Wenn man eine Katze am Schwanz zieht, wird es immer dicker."
Ich habe jetzt die beiden Minis aufgebaut angeschlossen und das Programm auf beide Aufgeteilt. Ich benutze den "Master" um damit die Bedienelemente Schalter und LCD zu bedienen. Der Master gibt über Zwei Kanäle die Steuerbefehle an den "Slave" weiter. Der Slave über nimmt dann die Vorschubregelung des Linearantriebs (DC-Motor mit Encoder + Spindel).
Einiges funktioniert bereits. Doch leider Tuts das LCD nicht. Mein Verdacht ist, dass ich hier das gleiche Problem wie bei der Stepperansteuerung habe. Ich habe das LCD an die Pinne 10, 11, 12, 13, 14, 15. Pin 10 und 11 sind als PWM gekennzeichnet, kann es sein dass diese Ports nicht geeignet sind um ein LCD anzusteuern?
Kann ich das trotzdem hin bekommen?
Vielen Dank für Eure Hilfe,
DrFlopp
Antwort selbst gegeben,
Statt der Pinne 10 und 11 habe ich die Pinne 18 und 19 benutzt und siehe da es geht.
Also hier noch ein mal meine Frage: Warum können die mit PWM gekennzeichneten Ports nicht zur Ansteuerung von LCD und Stepper-Treiber benutzt werden?
Vielen Dank
DrFlopp
Hi, bei mir gehen die PWM Pins auch für die Datenleitungen eines LCD`s.
Hast du in der Setup Funktion die Pins mit pinMode(pwm_pin, OUTPUT); deklariert ?
Hallo Jomelo,
nein das habe ich nicht, das wird doch so dachte ich durch die Liquidcristal.H gemacht.
Gruß
DrFlopp
soweit ich weiß und gemäß der Beispiele (zb in LiquidCrystal - Arduino Reference ) brauchen die Pin nicht als Ausgänge deklariert werden. Das müßte die Bibliothek machen.
Viele Grüße Uwe
Hallo,
ich habe jetzt die Analogports als Digitalausgänge benutzt und die fraglichen LCD-Pinne dort angeschlossen. Das funktioniert einwandfrei. Es muss etwas mit der internen Funktion der PWM-Kanäle zu tun haben.
Nach dem ich jetzt noch einen Tag für Fehlersuche und -behebung investiert habe, funktioniert die Rgelung und Steuerung der Vorrichtung jetzt. Der Umstieg auf die Parallelverarbeitung hat den gewünschten Effekt der wesentlich bessere Reaktionszeiten voll gebracht. Ich habe nun ohne Änderungen an den Algorithmen, eine sehr gute Steuerung und Regelung hinbekommen.
Bedenkt man, dass die zwei Minis nur 15€ gekostet haben, war das eine sehr gute Investition. Die Einschätzung, dass die Minis nicht für den Einstig geeignet sind, kann ich nur unterstützen. Sie sind sehr klein und dadurch nicht so leicht zu handhaben. Die fehlende USB-Schnittstelle macht die Bedienung aucht etwas komplizierter.
Ich möchte mich für Eure Unterstützung ganz Herzlich bedanken.
DrFlopp