Hallo Leute, ich habe sicherlich eine ziemlich allgemeine Frage für euch. Ich bin noch Neuling auf dem Gebiet der Mikrocontroller. Meine Aufgabe ist es einen Gleichstrommotor (DSMP523) zu regeln (nicht nur ansteuern) + zusätzlich müssen noch Daten über einen Drehmomentensensor eingelesen werden. Hierfür bin ich momentan auf der Suche nach einem passenden Mikrocontroller. Hierbei stehen mir zwei grundsätzlich verschiedene Optionen zur Verfügung: - Beaglebone Black - Arduino (UNO/MEGA) Soweit ich bis jetzt recherchiert habe ist der Beaglebone nicht so "benutzerfreundlich für Einsteiger" und es benötigt eine gewisse Einarbeitungszeit. Zusätzlich gibt es mehrere Möglichkeiten den Beaglebone zu programmieren: Python, ... Gibt es hier eine empfohlene Methode für Einsteiger? Auf der anderen Seite steht der Arduino, welcher meiner Meinung nach leichter zu programmieren ist und, aber leistungstechnisch nicht so stark ist. Mir ist bewusst, dass eine pauschale Aussage zu diesem Thema schwierig ist, aber ich wäre um jede Hilfe dankbar. Viele Grüße
gerade für regelungen ist der avr besser als ein linux-sbc.
Stefan G. schrieb: > Hierfür bin ich momentan auf der Suche nach einem passenden > Mikrocontroller. > > Hierbei stehen mir zwei grundsätzlich verschiedene Optionen zur > Verfügung: > - Beaglebone Black Das ist kein Mikrocontroller; bleibt also > - Arduino (UNO/MEGA)
Eine Regelung findest Du hier. Den Encoder brauchst Du nicht unbedingt, falls er fehlen sollte. Das Programm läuft auf einem Arduino Uno. Nebenbei noch einen weiteren Sensor abzufragen und die Daten auszugeben, ist kein Problem. Beitrag "Drehzahlregler für DC-Motor, ATmega48-328"
Stefan G. schrieb: > - Arduino (UNO/MEGA) > >... aber leistungstechnisch nicht so stark ist. Mit 8 Bit und 16 MHz ist Arduino UNO sicherlich kein Supercomputer. Man muss also schon wissen, welche Rechenleistungen für konkrete Applikationen benötigt werden. https://www.youtube.com/watch?v=5mDnKBNl9sY
@ Stefan G. (steff_123) >Meine Aufgabe ist es einen Gleichstrommotor (DSMP523) zu regeln (nicht >nur ansteuern) Was willst du denn regeln? Die Drehzahl? Das ist eher einfach. Das Drehmoment? Das ist schon schwieriger. > + zusätzlich müssen noch Daten über einen >Drehmomentensensor eingelesen werden. Daran soll es nicht scheitern. >- Beaglebone Black Das ist eher ein Großkaliber ala Arduino mit einem Linux drüber. Das Problem ist dabei, daß man als Nicht-Superfreak dort nicht so einfach eine wirklich schnelle Reglung mit schnellem Hardwarezugiff hinbekommt. >- Arduino (UNO/MEGA) Der ist deutlich einfacher handhabbar und man kann auch direkt auf die Hardware zugreifen, was die Sache einfach und leistungsfähig macht. >Soweit ich bis jetzt recherchiert habe ist der Beaglebone nicht so >"benutzerfreundlich für Einsteiger" und es benötigt eine gewisse >Einarbeitungszeit. Braucht der Arduino auch. > Zusätzlich gibt es mehrere Möglichkeiten den >Beaglebone zu programmieren: Python, ... Phyton für eine Regelung? Machbar, aber nicht sinnvoll. >Gibt es hier eine empfohlene Methode für Einsteiger? Arduino. Mit dem bekommt man ohne große Tricks eine digitale Regelung mit 1 kHz Abtastfrequenz hin. Wenn man weiß was man tut auch 10 kHz. >Auf der anderen Seite steht der Arduino, welcher meiner Meinung nach >leichter zu programmieren ist und, Ja. > aber leistungstechnisch nicht so stark ist. Für deine Aufgabe reicht er.
Vielen Dank schon mal für die Antworten. Also es soll die Drehzahl des DC-Motors geregelt werden - Encoder ist am Motor verbaut. Wenn möglich sollte auf ein fertiges Board (eben Arduino/Beaglebone) zurückgegriffen werden, um eine einfache Reproduzierbarkeit zu gewährleisten. Bis auf den Motortreiber usw. - der muss ja sowieso extra verbaut werden. Aber wie ich aus den Antworten mitbekomme wird hier eher zu Arduino geraten. Ok also mit dem Beaglebone wäre es grundsätzlich möglich, jedoch deutlich mehr Aufwand für die Einarbeitung + Umsetzung der Regelung.
Stefan G. schrieb: > Also es soll die Drehzahl des DC-Motors geregelt werden - Encoder ist am > Motor verbaut. Eine Richtung oder vorwärts - rückwärts? Wie langsam soll der Motor drehen? Der Encoder liefert max. 20 Flanken/Umdrehung, was bei niedriger Drehzahl nicht gerade viel ist. Stefan G. schrieb: > Bis auf den Motortreiber usw. - der muss ja sowieso extra verbaut > werden. Da noch einen ATmega328 + Quarz + RS232-Treiber draufzusetzen, dürfte eigentlich kein Problem sein. Auch, wenn Du einen Arduino (ggf. als abgespecktes Board) als fertiges Teil einsetzen möchtest, programmiere direkt in C und nicht mit setup() und loop() der Arduino IDE. Andernfalls kannst Du Timer+IO nicht frei verwenden. Dafür bräuchtest Du allerdings noch einen ISP-Programmer. Als Anfänger wird es Dich vermutlich zu sehr fordern, aber ein STM32Fxxx-Nucleoboard eignet sich gut als Fertigbaugruppe, bietet gute Leistung und läßt sich deutlich einfacher programmieren und debuggen. Dies nur am Rande.
Eine Richtung würde genügen. Min. Drehzahl ist leider noch nicht festgelegt. Alles klar vielen Dank
m.n. schrieb: > eignet sich gut als Fertigbaugruppe Wenn es eine Fertigbaugruppe sein soll, kann auch ein Arduino Nano auf das Board gepackt werden.
Manfred schrieb: > Wenn es eine Fertigbaugruppe sein soll, kann auch ein Arduino Nano auf > das Board gepackt werden. Das o.ä. hatte ich mit "abgespecktem Board" gemeint. Stefan G. schrieb: > Eine Richtung würde genügen. Wenn Du erste Tests machen möchtest, kannst Du ja o.g. Beispiel verwenden.
m.n. schrieb: >Auch, wenn Du einen Arduino (ggf. als abgespecktes Board) als fertiges >Teil einsetzen möchtest, programmiere direkt in C und nicht mit setup() >und loop() der Arduino IDE. Andernfalls kannst Du Timer+IO nicht frei >verwenden. >Dafür bräuchtest Du allerdings noch einen ISP-Programmer. Könnte mir jemand genauer erklären was mit Timer+IO gemeint ist bzw. die Drehzahlregelung ist direkt in C einfacher umzusetzen? Ist es also nicht möglich direkt über das mitgelieferte USB-Kabel des Arduinos einen reinen C-Code auf das Board zu bekommen? Falls dies nicht möglich ist, ist der einzige Vorteil des Arduinos, dass die Pins usw. verbaut sind und ich nichts selbst löten muss? Viele Grüße
@ Stefan G. (steff_123) >>Auch, wenn Du einen Arduino (ggf. als abgespecktes Board) als fertiges >>Teil einsetzen möchtest, programmiere direkt in C und nicht mit setup() >>und loop() der Arduino IDE. Andernfalls kannst Du Timer+IO nicht frei >>verwenden. Naja, mal nicht den Teufel an die Wand malen! Auch beim Arduino kann man die anderen Timer außer Timer 0 frei verwenden, auch die IOs! >>Dafür bräuchtest Du allerdings noch einen ISP-Programmer. Ist für den Anfang nicht nötig. >Könnte mir jemand genauer erklären was mit Timer+IO gemeint ist bzw. die >Drehzahlregelung ist direkt in C einfacher umzusetzen? >Ist es also nicht möglich direkt über das mitgelieferte USB-Kabel des >Arduinos einen reinen C-Code auf das Board zu bekommen? Doch, mit Hilfe des Arduino-Bootloaders, der schon auf dem Board ist. >Falls dies nicht möglich ist, ist der einzige Vorteil des Arduinos, dass >die Pins usw. verbaut sind und ich nichts selbst löten muss? Auch das. Nimm den Arduino mit normalem USB-Kabel, das reicht für den Anfang dicke.
Stefan G. schrieb: > Könnte mir jemand genauer erklären was mit Timer+IO gemeint ist Damit ist gemeint, daß die Arduino IDE schon Teile des ATmega328 benutzt, ohne daß dies auf den ersten Blick ersichtlich ist. Setup() und loop() machen dies intern. Läßt man diese Funktionen einfach weg, kann man die gesamte Peripherie des µCs uneingeschränkt verwenden.
Ok danke für eure Antworten. Ergo: Wenn ich in der Arduino-Software ohne Setup() und Loop(), sondern rein in C programmiere kann ich das Programm auf den Arduino bringen ohne mir einen ISP-Programmer zulegen zu müssen?
Ja. Anstatt der Dateiendung .c erwartet die Arduino-IDE .ino.
Der ISP Programmieradapter ist nicht nötig, wenn du einen Mikrocontroller mit vorinstalliertem Bootloader verwendest. Das ist bei allen originalen Arduino Boards der Fall. Aber bei chinesischen clones ist es reine Glücks-Sache. Früher oder Später wirst du ohnehin einen ISP Programmieradapter brauchen, also bestelle gleich einen mit. Bei Aliexpress bekommst du so ein Teil ab 1 Euro! Sogar mit 64 Karat (hä?) https://de.aliexpress.com/item/1pcs-New-USBASP-USBISP-AVR-Programmer-USB-ISP-USB-ASP-ATMEGA8-ATMEGA128-Support-Win7-64K/32649685244.html
Auch wenn das Forum hier sehr AVR-orientiert ist, würde ich anstelle des Arduinos dann doch eher das MSP430 Launchpad in den Raum werfen. Falk B. schrieb: > Die Drehzahl? Das ist eher einfach. > Das Drehmoment? Das ist schon schwieriger. Weil?
@vn nn (wefwef_s) >Auch wenn das Forum hier sehr AVR-orientiert ist, würde ich anstelle des >Arduinos dann doch eher das MSP430 Launchpad in den Raum werfen. Viele Wege führen nach Rom. >> Die Drehzahl? Das ist eher einfach. >> Das Drehmoment? Das ist schon schwieriger. >Weil? . . . das Drehmoment direkt proportional zum Strom ist, also muss der Strom geregelt werden. Das passiert bei einem modernen Motorregler sinnvollerweise mit der Frequenz der PWM-Ansteuerung. Diese ist im Normalfall deutlich hochfrequenter (=breitbandiger) als eine Drehzahlsteuerung, welche über die Speisespannung erfolgt. Wenn man es richtig machen will, muss man mittels schneller Strommessung und Komparator in jedem PWM-Zyklus bei Überstrom die PWM abschalten. Bei ein paar kHz kann man das noch per Software machen, irgendwann sollte es lieber rein in Hardware erfolgen.
Mit der Arduino IDE kann man auch in reinem C programmieren. main ist weak bei Arduino. Also nackte ino-Datei und dann einfach ein void main() in einer c-Datei. Fertig. DigitalWrite und der ganze Klimbim geht dann natürlich nicht mehr.
:
Bearbeitet durch User
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.