Forum: Mikrocontroller und Digitale Elektronik Welchen Mikrocontroller zur Ansteuerung eines DC-Motors?


von Steff G. (steff_123)


Lesenswert?

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

von flip (Gast)


Lesenswert?

gerade für regelungen ist der avr besser als ein linux-sbc.

von Zack (Gast)


Lesenswert?

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)

von m.n. (Gast)


Lesenswert?

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"

von Georg M. (g_m)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Steff G. (steff_123)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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.

von Steff G. (steff_123)


Lesenswert?

Eine Richtung würde genügen.
Min. Drehzahl ist leider noch nicht festgelegt.

Alles klar vielen Dank

von Manfred (Gast)


Lesenswert?

m.n. schrieb:
> eignet sich gut als Fertigbaugruppe

Wenn es eine Fertigbaugruppe sein soll, kann auch ein Arduino Nano auf 
das Board gepackt werden.

von m.n. (Gast)


Lesenswert?

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.

von Steff G. (steff_123)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Steff G. (steff_123)


Lesenswert?

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?

von m.n. (Gast)


Lesenswert?

Ja. Anstatt der Dateiendung .c erwartet die Arduino-IDE .ino.

von Stefan F. (Gast)


Lesenswert?

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

von Vn N. (wefwef_s)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

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

von Nico W. (nico_w)


Lesenswert?

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
Noch kein Account? Hier anmelden.