PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : einen PWM pin des ESP8266 als ersatz für einen poti nutzen?



inka
25.12.2021, 16:39
hallo,

irgendwie sehe ich den wald vor lauter bäumen nicht:

ich hatte die idee einen kleinen DC-getriebemotor (12V) testweise mit hilfe eines potentiometers an einer veränderbaren spannung zu betreiben (5-12V). Möchte mit dem poti die drehzahlen verändern. Ich denke dasss sich das in gewissen grenzen machen lässt...

Könnte ich die 12V spannung auch mit hilfe eines ESP8266 in verbindung mit einem motortreiber (hier konkret der 7881 (https://www.ebay.de/itm/263541569374?hash=item3d5c4d375e:g:iRsAAOSwSIJao1A l)) durch das manipulieren der PWM an einen der PWM-fähigen pinns erreichen? Im moment habe ich keine idee wie das gehen könnte und wahrscheinlich geht das auch nicht, oder?

Gnom67
25.12.2021, 18:14
Ein Poti würde hier einen Teil der Leistung einfach als Wärme verbrennen... das wäre nicht mal so wünschenswert.
PWM ist da deutlich empfehlenswerter. Schnelles Ein- und Ausschalten erscheint dem Motor wie eine reduzierte Spannung. Entscheidend ist das Zeitverhältnis zweischen Ein und Aus (PWM duty cycle).
Allerdings ist dieser Treiberbaustein ziemlich exotisch. Und er ist eigentlich auch nur für 10 V und 0,6-1 A ausgelegt. Kommt also auch noch ein wenig drauf an, wie viel Strom dein Motor zieht.
Es gibt diverse Motortreiber, die verbreiteter sind und auch einfacher anzusteuern. Da legt man PWM an den Enable Eingang und stellt unabhängig davon über andere Pins die Drehrichtung ein. Häuftig wird zum Beispiel der L293 (bis 46 V / 2 A) eingesetzt.

Rabenauge
25.12.2021, 18:25
Du kannst den Treiber doch ganz normal mit PWM ansteuern?
Das sollte mitm ESP auch klappen.

inka
26.12.2021, 09:20
ich muss glaube ich etwas weiter ausholen...

im verlauf des outdoor (https://www.roboternetz.de/community/threads/76146-outdoor-III/page6?p=664741&viewfull=1#post664741) projektes mussten ja irgendwannmal auch die antriebe drankommen: 12V getriebemotoren, 1:200 übersetzung, bordspannung ist 12V, aus der werden mit zwei stepdowns 5V und 3.3V erzeugt. Für die steuerung der antriebe habe ich ein "move-modul" gebaut:
35682356833568435685

die direkte ansteuerung der motortreiber und das auslesen der motorencoder erfolgt von dem nano aus, damit sind fast alle pins belegt. Was frei blieb ist A4,A5 für I2c und A6,A7, die sich nicht als digitale pins verwenden lassen. Die motoren werden alle per digitale pins angesteuert (für 4 motoren gab es nicht genügend PWM pins), sie lassen sich an/ausschalten und die richtung kann geändert werden. Das modul funktioniert so weit und das sollte auch so bleiben, ich würde da nicht gerne gross was ändern, ist mir zum löten jetzt schon zu eng...
Das modul ist bis jetzt "nur" über I2C erreichbar, das soll nun mit dem ESP8266 geändert werden, das modul soll wie auch das ortungsmodul per WIFI erreichbar sein, die zwei controler sollen per I2C komunizieren...

Jetzt kommt die geschichte mit der steuerung der geschwindigkeit. Eigentlich würde es reichen, wenn ich zusätzlich zu den 12V per "irgendwas" die geschwindigkeit halbieren könnte, stufenlos steuern wäre luxus und muss nicht sein...
Ich dachte an die zweckentfremdete verwendung eines motortreibers (mit dem ESP zusammen), der dann für alle vier motoren auf einmal als eine zweite möglichkeit (sozusagen einen schleichgang) die spannung von 12 auf 6 bis 7V reduziert, vielleicht gibt es aber eine einfachere möglichkeit?

Gnom67
26.12.2021, 09:36
Was sollte denn noch einfacher sein als ein Motortreiber mit PWM-Steuerung?
Da gehen auf der einen Seite 12V rein und auf der anderen kommen - sozusagen abhängig vom Tastgrad des PWM-Signals - weniger als 12 V raus - stufenlos.
Entweder verstehe ich dein Problem nicht oder du verstehst die Lösung nicht.

Rabenauge
26.12.2021, 09:54
Dann nimm doch Motortreiber, die z.B. per I2C angesteuert werden können.
Sowas, zum Beispiel: https://www.robotshop.com/media/files/content/w/wav/pdf/waveshare-2x3a-motor-driver-hat-for-rasberry-pi-datasheet.pdf
Bei dem müsstest du allerdings gucken, ob das mitm Arduino auch geht- das Ding hat ne 12bit-Auflösung für die PWM.
Alternativ wirf den Nano raus und bau einen Mega ein.
Wenn du keinen Platz hast: es gibt seit ner Weile auch Mega Pro Minis )oder so ähnlich, halt winzig in der Bauform, aber ein Mega).

Moppi
26.12.2021, 13:15
Eigentlich würde es reichen, wenn ich zusätzlich zu den 12V per "irgendwas" die geschwindigkeit halbieren könnte, stufenlos steuern wäre luxus und muss nicht sein...
... alle vier motoren auf einmal als eine zweite möglichkeit (sozusagen einen schleichgang) die spannung von 12 auf 6 bis 7V reduziert, vielleicht gibt es aber eine einfachere möglichkeit?

Ja, gibt es. Einstellbare Spannungsregler. Macht genau das, was Du möchtest. Es müssen nur die Widerstände zum Einstellen berechnet werden. Bei Steuerung über einen Widerstand gegen 0V kann man einen Transistor zwischen Widerstand und 0V einsetzen und so dann die Ausgangsspannung digital steuern. Bei einer Stufe mit Transistor wären das 2 Geschwindigkeiten (Transistor an oder aus). Bei zwei Stufen sind das vier Geschwindigkeiten. Pro Stufe wird ein Digitalausgang am µC benötigt.

Güße und frohe Weihnachtstage allen!

Moppi

inka
26.12.2021, 15:08
Ja, gibt es. Einstellbare Spannungsregler. Macht genau das, was Du möchtest. Es müssen nur die Widerstände zum Einstellen berechnet werden.
Du meinst einen stepdown der über einen transistor zu- oder abgeschaltet wird...

Moppi
26.12.2021, 17:19
Du meinst einen stepdown der über einen transistor zu- oder abgeschaltet wird...

Nicht Konverter, sondern Spannungsregler (wie LM3xx).

Gnom67
26.12.2021, 23:07
Dein Problem verstehe ich immer noch nicht.
Wenn du zu wenig Pins hast, dann häng eine Porterweiterung an I2C und mach ein paar von deinen PWM-Pins frei.
Und da hängst du einen HGW-Motortreiber dran.
Was hast du denn alles an 22 Digitalpins hängen, dass du keine mehr frei hast?

inka
27.12.2021, 09:41
Was hast du denn alles an 22 Digitalpins hängen, dass du keine mehr frei hast?
siehe pdf dokument der verdrahtung35688 Zumindest die mir bekannten digitalen pins sind belegt...

ansonsten geht es um eine änderung bzw. ergänzung ausserhalb der vorhandenen hardware. Ich kann weder einen mega 2560 oder mega-mini einsetzen, erstens wegen platz und weil ich an einer funktionierenden und - zumindest für mich - schwierigen lötarbeiten an der fertigen platine nichts ändern kann. Würde ich gerne, geht nicht. Und die erwähnte mögliche verwendung eines ESP sollte auch ein teil der lösung sein.

Gnom67
27.12.2021, 10:54
Du hast einen I2C frei und willst damit einen ESP verbinden, um ihn sozusagen als Erweiterung zu benutzen - hab ich das richtig verstanden?
Wo ist dann das Problem, einen PWM-Pin des ESP an einen hundsgewöhnlichen DC-Motortreiber (H-Brücke) anzuschließen?
Wenn ich die Vorschläge hier lese... Einen Linearregler über variable Widerstände zuschalten.... da rollen sich einem die Fußnägel hoch.

inka
27.12.2021, 11:14
Du hast einen I2C frei und willst damit einen ESP verbinden, um ihn sozusagen als Erweiterung zu benutzen - hab ich das richtig verstanden?
Wo ist dann das Problem, einen PWM-Pin des ESP an einen hundsgewöhnlichen DC-Motortreiber (H-Brücke) anzuschließen?

kein problem, so mache ich das auch. Es hätte ja sein können dass es noch andere möglichkeiten gibt...
Dem himmel sei dank hat keiner die frage gestellt warum ich meinen roboter nicht auf drei räder umbaue. Die reichen doch völlig :-) - und dann hätte ich ja pins genug...
Aber sonst war fast alles dabei. Also lass rollen...

Moppi
27.12.2021, 13:46
Wenn ich die Vorschläge hier lese... Einen Linearregler über variable Widerstände zuschalten.... da rollen sich einem die Fußnägel hoch.

Dafür gibt es nun mal Spannungsregler mit variabler Ausgangsspannung. Man schaue in die Datenblätter, dann findet man entsprechende Schaltungsvorschläge, genau so.

Es war eine Alternative gefragt, das ist eine. Muss man eben nur wissen.

Ich dann mal wieder raus, bei der Oberschlaumeierei hier. Da kommt einem ja die Galle hoch.

Viel Spaß allen!

Moppi

Gnom67
27.12.2021, 14:06
Oberschalumeierei ist bestenfalls, wenn man einen Linearregler zur Geschwindigkeitsregelung eines DC-Motors einsetzen will. Der Linearregler verbrennt die nicht genutzte Spannung in Wärme - sinnloser gehts wohl kaum für ein akkubetriebenes Fahrzeug! Wenn schon, dann nimm wenigstens einen regelbaren Stepdown, wie Inka es angeregt hat. Aber auch das ist, mit Verlaub, ziemlicher Unsinn.
Aber wozu gibts denn PWM-gesteuerte Motortreiber? Im zweifel kann jeder 20-Cent-µC (und der ESP erst recht) aus einem Analogsignal (von einem der noch freien Pins des Nano) ein passendes PWM-Signal machen. Das dürfte mit weniger als 10 Programmzeilen machbar sein.
Vermutlich benutzt du auch einen Holzknüppel als zweistufige Fahrradbremse - Holzknüppel zwischen die Speichen = bremsen - Holzknüppel nicht zwischen die Speichen = fahren...

Manf
28.12.2021, 07:32
Frohe Festtage noch.

Manf
17.04.2022, 20:06
Das Thema wird auf Wunsch wieder geöffnet. Hinweise auf bessere Lösungen sind ja immer willkommen, der TO sollte aber auch seinen Lösungsweg auchreichend verfolgen können.

inka
18.04.2022, 09:45
In meinem "move modul" sind inzwischen zwei microcontroler:

1) der nano steuert zwei dual-motortreiber ( HG7881 /800mA) mit jeweils zwei 12V DC-getriebemotoren dran. Das funktioniert, mit dem nano kann ich die vier motoren ein und ausschalten, die drehrichtung wechseln und auch die vier encoder auslesen...

2) ein ESP8266, auf dem läuft ein HTML-webserver nach fipsok (https://fipsok.de/Esp8266-Webserver/esp8266), da können die 4 getriebemotoren per buttons an- und ausgeschaltet und die drehrichtung geändert werden. Auf dem webserver läuft auch ein slider, auch nach fipsok (https://fipsok.de/Esp8266-Webserver/esp8266#ledpwm), der die drehgeschwindigkeit der motoren steuern soll.

diese idee gab es:

Aber wozu gibts denn PWM-gesteuerte Motortreiber? Im zweifel kann jeder 20-Cent-µC (und der ESP erst recht) aus einem Analogsignal (von einem der noch freien Pins des Nano) ein passendes PWM-Signal machen. Das dürfte mit weniger als 10 Programmzeilen machbar sein.

ich wollte in der umsetzung den letzten freien PWM-pin des nano (10) dafür nutzen per PWM die versorgungsspannung der motoren mit dem motortreiber DRV8871 eben auf z.b. 10 oder 11V zu reduzieren um die getriebemotoren (als alternative geschwindigkeit) mit halben drehzahlen drehen zu lassen.

Der versuch war nur halb erfolreich:

Die signale von den buttons und dem slider werden per I2C zum nano übertragen, wo sie dann mit hilfe des pins 10 des nano in PWM signale umgewandelt werden (bereich von 0 bis 255), das funktioniert...

Wenn ich den (in der 12V spannungsversorgung platzierten) motortreiber DRV8871 mit dem slider zu steuern versuche, drehen alle vier motoren mit einer kaum merkbar langsameren geschwindigkeit bis zu dem zeitpunkt, an dem nur noch einer der vier motoren ziemlich kraftlos und langsam weiterdreht, die anderen drei bleiben stehen, und das passiert ziemlich abrupt. Ich denke, dass das daran liegt, dass die versorgungsspannung bei einem bestimmten wert des sliders nicht mehr ausreicht um alle motoren anzutreiben.

Ist es evtl. möglich den bereich in dem die versorgungsspannung quasi zusammenbricht irgendwie zu „strecken“? Dass z.b. der bereich von 12V bis zu 11.5V über den ganzen PWM bereicht eben langsammer runtergeregelt wird? Wäre da der prescaler des PWM eine möglichkeit?

Gnom67
18.04.2022, 13:22
Ich glaube, dass dein Ansatz falsch ist. Du kannst ja auch dein Radio nicht an 120 Volt anschließen, wenn du mit halber Lautstärke hören willst.
Wenn ich das richtig verstehe, hast du ganz gewöhnliche Bürsten-Gleichstrommotoren.
Der Motor brauch 12V, um genügend Kraft aufzubauen, damit er sich bewegt. Wenn du die Spannung senkst, geht er nur irgendwann in die Knie.
Ich vermute, du musst mit der Frequenz des PWM-Signals genauer regeln. Die wird zu hoch sein. Der Motor muss kurz die vollen 12 V haben, dann fängt er an zu drehen und würde, wenn die Spannung dran bleibt, eben mit voller Geschwindigkeit drehen. Da du das nicht willst, musst du die Spannung wieder abschalten. Aber nicht zu früh. Du brauchst einen gewissen Strom durch die Spulen, damit der Motor dann überhaupt was macht. Du müsstest eigentlich mehr den Strom steuern als die Spannung. So weit ich weiß, gibts dafür auch spezielle Treiber.

Schau dir das hier (https://www.youtube.com/watch?v=zm5P0qfea78) mal an. Die Steuerung arbeitet alledings rein analog. Wie sie genau aussieht, weiß ich leider nicht. Aber hier wird die Drehzahl konstant gehalten und das Drehmoment (= Strom) an die Last angepasst.

Ich bin allerdings alles andere als wirklich gut bewandernt in Motoren... also vielleicht hat da ja noch jemand Details beizutragen.

inka
18.04.2022, 17:26
Wenn ich das richtig verstehe, hast du ganz gewöhnliche Bürsten-Gleichstrommotoren.
ja

Der Motor brauch 12V, um genügend Kraft aufzubauen, damit er sich bewegt. Wenn du die Spannung senkst, geht er nur irgendwann in die Knie. Ich vermute, du musst mit der Frequenz des PWM-Signals genauer regeln.
es reichen ihm auch vielleicht 11.8V. Aber deshalb ja auch die frage nach der streckung des regelbereichs: 11.8V bis 12V auf den PWM-bereich von 0 bis 255...


Du müsstest eigentlich mehr den Strom steuern als die Spannung. So weit ich weiß, gibts dafür auch spezielle Treiber.
muss ich mir anschauen...

Gnom67
18.04.2022, 17:43
Der Atmega hat einen 16 Bit Timer/Counter mit PWM. Den müsstest du aber wohl mit Registern ansteuern, wenn die Library keine 16 Bit unterstützt.
Damit könntest du 65k Abstufungen erreichen, das wären dann fas 1100 Stufen zwischen 11,8 und 12 Volt.

Allerdings müsstest du, um das richtig zu machen, jeden Motor einzeln ansteuern. Zumindest glaube ich nicht, dass es wirklich was bringt, die Motoren einach parallel an die gleiche Spannung zu hängen.
Hast du irgendeine Positionserkennung der Radstellungen? Drehgeber oder sowas?

inka
19.04.2022, 11:00
Der Atmega hat einen 16 Bit Timer/Counter mit PWM. Den müsstest du aber wohl mit Registern ansteuern, wenn die Library keine 16 Bit unterstützt. Damit könntest du 65k Abstufungen erreichen, das wären dann fas 1100 Stufen zwischen 11,8 und 12 Volt.

da muss ich noch suchen wie das geht, und ja, die motoren haben encoder sogar jeweils zwei...

Gnom67
19.04.2022, 14:07
Wahrscheinlich wäre es am besten, jeden Motor einzeln zu steuern. Über die Encoder weißt du ja dann, wo sie sind und kannst die Spannung erhöhen, wenn ein Moto runter last langsamer wird.
Eine reine Spannungsregelung wird dir nicht viel bringen, weil ja die Last auf jedem Rad anders sein kann. Eigentlich brauchst du für jeden Motor eine echte Regelung, die permanent die Drehzahl überwacht und die Pulsweite anpasst (genau dass macht die Steuerung aus dem Video - nur eben analog). Ob es praktikabel ist, mit einem Nano vier Motoren in dieser Art zu steuernm, weiß ich nicht, aber es wäre eigentlich ideal. Dann würdest du der Steuerung nur noch die Geschwindigkeit der Räder mitteilen und der Nano steuert alle vier Motoren entsprechend. Das müsste dann aber mit dem einen 16-Bit-Counter gehen.Da müsstest du etwas kreativ werden.