Archiv verlassen und diese Seite im Standarddesign anzeigen : DMA Kanäle als PWM auf dem Raspi
Hallo Freunde, ich beschäftige mich mit der Aufgabe 8 RGB-LEDs mit einem Raspi zu steuern. Der Raspi hat so wie ich verstanden habe 2 fest mit bestimmten GPIOs verbundene PWM-Hardware, für meine Aufgabe habe ich aber 24 PWM-Signale zu erzeugen, damit ich über "Schieberegler" im GUI die Intensität jeder einzelnen RGB-LED und jedes LED-Chips in der RGB-LED einzeln reglen kann. Nun habe ich gelesen, aber noch nicht richtig verstanden, dass man mittels der DMA-Hardware, insbesondere der zugehörigen Timer 15 DMA Kanäle hat. meine Frage:
Bedeutet es, dass ich 15 PWMs in Hardware durch Nutzung der 15 DMA Kanäle erzeugen kann?
DMA bedeutet ja Daten ohne unmittelbar die CPU zu belasten, hier an ein GPIO kopiere. So wage kann ich mir vorstellen dass man so an 15 verschiedenen GPIOs PWMs erzeugen kann. ich habe versuucht die Information auf der RPIO-seite zu verstehen, bin aber mit der Frage zu den 15 Kanälen nicht weitergekommen.
Der andere Pfad mit welchem ich mich beschäftige, auch aus anderen Anwendungsideen resultierend ist es ein minimal Kernel gemäß Prof. Quade zu erzeugen und dann in einem für Echtzeitbetrieb reservierten Core solche PWMs zu erzeugen.
Peter(TOO)
23.04.2016, 00:05
Hallo Helmut,
Welche Frequenz und welche Auflösung brauchst du für die PWM?
Für eine Software-PWM brauchst du nicht wirklich einen Echtzeit-Kernel, es genügt wenn die Interrupts nicht gesperrt werden.
Allerdings benötigst du einen Timer, welcher den periodischen Interrupt erzeugt.
Ganz spurlos geht die DMA nicht an der CPU vorbei, die DMA klaut der CPU Speicherzyklen.
Die schnellste Ausgabe-Methode ist, wenn du die 24 Bits auf 3 8-Bit Ports verteilen kannst.
Dann baust du einen Ring-Buffer und schreibst bei jedem Interrupt. per Software oder DMA die 3 Bytes in die Ports.
wenn du also 1% Auflösung willst, muss der Ring-Buffer 3*100Bytes gross sein.
Das Hauptprogramm füllt dann den Ring-Buffer mit 1er, entsprechend der gewünschten PWM-Werte.
MfG Peter(TOO)
Hallo Peter, vielen Dank für deinen Vorschlag. Ich werde es experimentel ausprobieren. Für die RGB-LEDs für mein Panel sollte ich 100 Hz Frequenz Rate verwenden, also alle 10 ms einen Zyklus. Da könnte ich mit deinem Vorschlag sicher schon mit einem Raspi Zero auskommen, sobald man den irgendwann wo bekommt! Für die Aufgaben wie Strom un spannungen zu messen und in einem GUI wiederzugeben, sollte es eigentlich auch keine Probleme geben.
Ich habe, als ein Ergebnis meiner Beschäftigung mit dem PWM Thema, gerade 2 boards in China mit dem PCA9685 bestellt, knapp 14.- Euro inkl. Versand mit Tracking Nummer. Bei Adafruit kann man sich sogar die Software herunterladen um das Board vom Raspi aus zu steuern.
Mit dem Thema Linux und Echtzeit beschäftige ich mich aus anderen Gründen. Ich mag es wenn ich keine "black-box" im Einsatz habe. Mit Büchern von Prof. Quade und Kofler, sowie mit der Artikelserie vom prof. Quade in dem Linux-Magazin, Kern-Technik, ist es eine für mich interessante Aufgabe mir auf dem Raspi ein selbst erzeugten Linux-kernel zu erstellen und mit dem Echtzeitkern "Cobalt" zu spielen! Ein Raspi ist so preiswert und so mächtig, dass man im Modellbau dafür äußerst interessante Anwendungen findet. Gerade wegen deines Satzes: „Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?”, hier noch die Info, dass ich ein selbst am konzipierenden Schotsystem für Modellsegler dieses mit Modelica aus dem systemModeler heraus modellieren, simulieren und optimiert zu designen. Ich verspreche mir gerade bei SiL und HiL mit dem Raspi und der Wolfram-Software auf dem PC interessante Studien und Experimente!
Peter(TOO)
23.04.2016, 06:56
Hallo,
Gerade wegen deines Satzes: „Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?”, hier noch die Info, dass ich ein selbst am konzipierenden Schotsystem für Modellsegler dieses mit Modelica aus dem systemModeler heraus modellieren, simulieren und optimiert zu designen. Ich verspreche mir gerade bei SiL und HiL mit dem Raspi und der Wolfram-Software auf dem PC interessante Studien und Experimente!
Der Spruch bezieht sich vor allem auf die Elektronik und teilweise auf die heutige Art der Ausbildung!
Die Simulation einer Schaltung verleitet zum basteln, man schraubt an den Bauteilwerten rum, bis der Simulator was gültiges auswirft.
Da hat dann aber meistens keiner eine Ahnung wieso das läuft.
Die Simulationen geben auch gerne mal falsche Werte aus, wie z.B. negative Ausgansspannungen an einem OP obwohl gar keine negative Spannung vorhanden ist...
Und die Umsetzung in die Realität ist dann nochmal so was. Vieles wird von der Simulation gar nicht bewertet, was dann aber in der Praxis eine grosse Rolle spielt. Weil man aber gar nicht wirklich weiss, wie die Schaltung eigentlich funktioniert, kommt man nicht weiter.
Ich habe ganz früher mal Lehrlinge ausgebildet und in den letzten Jahrzehnten ab und zu Semester- und Diplomarbeiten von Studenten betreut.
Ich denke ich habe im Bereich Elektronik eine gewisse Übersicht.
MfG Peter(TOO)
für den RasPi gibt es die WiringPi Libs, mit denen kannst du auf allen Pins Software-PWM erzeugen.
Ist relativ einfach, s. hier:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&p=67780#p67785
https://projects.drogon.net/raspberry-pi/wiringpi/software-pwm-library/
ps,
sehe gerade: du willst einen eigenen Linux Kernel bauen...
dann willst du das mit WiringPi sicher nicht.
Na ja, HaWe, zwischen wollen und können ist noch ein weiter Weg! Inzwischen sind meine beiden Boards mit jeweils einem PCA9685 angekommen. Die Qualität sieht gut aus! Jedes Board enthält im PCA9685 16x eine PWM Hardware! Wiringpi ist mir bekannt, vielen Dank für den Hinweis trotzdem!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.