Forum: Mikrocontroller und Digitale Elektronik ATmega 644: PWM-Modul von Robbe ansteuern


von closed_loop (Gast)


Lesenswert?

Hi uC.net Community,

ich versuche über einen ATmega 644 per PWM-Signal ein Pulsweitenmodul 
von Robbe (roxxy bl-control-960-6) anzusteuern, dieses dann per interner 
Regelung einen Motor von Robbe (bl-outrunner 4240/12, 7-15v) ansteuert.
Leider funktioniert das ganze nicht und nach langem recherchieren im 
INet und Datenblatt lesen, sowie vielen Tests muss ich mich hier melden.
Ich hoffe das vor allem das PWM-Modul einigen Usern hier ein Begriff 
ist, weil ich denke das vor allem hier das Problem liegt.

Wie schon erwähnt verwende ich einen ATmega644 und das PWM-Signal für 
das PWM-Modul habe ich bereits programmiert und mit einem Scope gemessen 
und das müsste normalerweise, nach den "Richtlinien" für die Ansteuerung 
für Servomotoren hier auf uC.net ( 
http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung ) 
richtig sein. Habe eine Frequenz von 50Hz (Periode 20ms) und meine 
Pulsweite stelle ich zwischen 0,9ms und 2,1ms ein, das stimmt doch so?

Wenn ich dann das Signal auf mein PWM-Modul übertrage passiert nichts.
Nur bei einer PWM-Weite von 1,5ms und mehrmaligen ein und ausschalten 
der Spannungsversorgung dreht sich mein Motor mit geringer Drehzahl, 
Zufall ?
Wenn ich dann mein PWM-Signal wegnehme hört der Motor auf sich zu 
drehen.

Also kommt am PWM-Modul ein Signal an, womöglich nur das Falsche, oder 
ein falsches Timing, warum sollte es sich sonst drehen ?

Hat hier jemand mal sowas gemacht bzw. Erfahrung ein PWM-Modul
anzusteuern ?
Benötige ich überhaupt ein PWM-Signal und wenn ja liege ich mit meinen 
50Hz richtig oder soll ich eine höhere Frequenz z.B 400Hz einstellen ?

Sehr viele Fragen ^^ ich danke schon mal allen die sich das durchlesen 
und sich die Mühe geben mir zu helfen und hoffe auf viele Antworten :)

mfg c_l

von Hc Z. (mizch)


Lesenswert?

Eine nur kurze schnelle Google-Suche ergab u.a.

http://www.2ehandsrc.nl/Robbe-ROXXY-BL-CONTROL-960-6-_2-6LI_-+V2-nr.-1-86348642-Pakket-N_art_13058.php

Und dort steht:

> High pulse frequency (32,000 Hz) for ultrafine speed control

Nichts mit 50 Hz also.  Also bringst Du am besten die Solldaten erst 
einmal in Erfahrung, evtl. durch Ausmessen einer vorhandenen Steuerung.

von closed_loop (Gast)


Lesenswert?

Hi,

danke schon mal für die Hilfe, die 32 Hz habe ich auch schon 
ausprobiert, mit dem gleichen Tastverhältnis der 50Hz, hat leider auch 
nicht funktioniert ( das habe ich vergessen zu erwähnen )

Bleibt das Tastverhältnis für einen Servomotor immer gleich wenn die 
Frequenz geändert wird ?

Leider habe ich keine Refernzschaltung bzw. Steuerung aufgebaut, deshalb 
kann ich bisher nichts vergleichen oder messen. Nur in der aufgebauten 
Schaltung...

von Hc Z. (mizch)


Lesenswert?

Das ist englischsprachiger Text (dort ist das Komma der 
Tausender-Indikator).  Die 32,000 Hz sind also 32 kHz.

von closed_loop (Gast)


Lesenswert?

Leider funktioniert es mit 32khz (dem gleichen Tastverhätlnis wie bei 
50hz) auch nicht.

von totalferngesteuert (Gast)


Lesenswert?

Hallo Closed Loop

die Ansteuerung eines Drehzahlsteller ist genauso wie die Ansteuerung 
eines Servos. Hast du mal versucht ein Modellbauservo anzuschliessen? 
Teste deine Hard. und Software mal mit einem Servo. Bei 1,5ms sollte das 
Servo etwa in Mittelstellung stehen.
Beim Regler ist dann wahrscheinlich das Problem, daß sich der Regler 
erst "scharf stellt" wenn du ihm die PWM für Motor aus schickst.
Teste erst mal das mit dem Servo.
Ansonsten später mehr.

Gruß Günter

von totalferngesteuert (Gast)


Lesenswert?

Hast du dir auch mal die Anleitung des Reglers angesehen?

http://data.robbe-online.net/robbe_pdf/P1122/P1122_1-8634.pdf

von P. S. (Gast)


Lesenswert?

Hc Zimmerer schrieb:

> Nichts mit 50 Hz also.  Also bringst Du am besten die Solldaten erst
> einmal in Erfahrung, evtl. durch Ausmessen einer vorhandenen Steuerung.

Das ist auf der Motorseite und hat nichts mit der Ansteuerung des 
Reglers zu tun. Ist ja schoen, wenn du helfen willst, aber so voellig 
ohne Ahnung ist das kontraproduktiv.

Wie andere schon schrieben, haben fast alle Modellbauregler einen Schutz 
gegen versehentliches hochdrehen beim Einschalten - wie der ueberwunden 
wird, steht in der Anleitung.

von totalferngesteuert (Gast)


Lesenswert?

RE: Hc Zimmerer

Die 32 kHz sind die Frequenz die der Regler intern für die Ansteuerung 
des Motors macht.
Die Verbindung µC-Regler läuft 100% mit 50Hz und die Impulse müssen 
zwischen etwa 1ms und 2ms lang sein.

Also zb. 1ms High und dann 19ms Low
oder 1,5ms High und dann 18,5ms Low

von Stefan W. (swessels)


Lesenswert?

Moin,

wichtig ist die Impulslänge. Die beträgt normalerweise 1,1ms bis 1,9ms, 
Mitte 1,5ms. Diese werten gelten für Graupner bei Servoweg 100%.

Die Periodendauer darf ruhig etwas schwanken, wobei die 20ms wohl der 
Quasistandard sind.

Du solltest am Steller den "Gasweg" einlernen, also minimale und 
maximale Impulslänge für 0-100%. Dan sollte es klappen.

Gruß,
Stefan

von Larsen (Gast)


Lesenswert?

Hallo Leute,

die 32 kHz beziehen sich nicht auf die Ansteuerung mit dem PWM-Signal 
sondern auf die Regelschleife für den Motor. Die Ansteuerung für das PWM 
Signal bleibt bei den typischen 20 Hz wie bei einem Servo.
Ich denke das Problem liegt darin, dass der Regler beim ersten mal 
programmiert werden muss (Nullstellung, Voll-Schubstellung, ...), sonst 
läuft er nicht an und der Start muss auch von der Nullstellung aus 
beginnen sonst startet der Motor aus Sicherheitsgründen nicht.

Grüße Larsen

von Stefan W. (swessels)


Lesenswert?

Äääh, das sind nicht 20 Hz, sonder 20ms, also 50Hz. Ist zwar nicht all 
zu kritisch, aber 20 Hz könnten doch etwas wenig sein.

Gruß,
Stefan

von closed_loop (Gast)


Lesenswert?

Hey Leute,

danke schon mal für die viele Hilfe, also ich habe mir jetzt einen 
Servomotor von einem Kollgen ausgeliehen, ihn direkt angesteckt und der 
läuft d.h, bei 1,5ms in Mittelstellung und bei 2ms in die "Endposition". 
Es liegt also definitiv am PWM-Modul, und entweder an einer 
Sicherheitsfunktion oder wirklich das ich alle Stellungen 
einprogrammieren muss.
Leider habe ich bis jetzt nur eine Fernsteuerung nicht das 
Programmermodul (ist bestellt). Ich kann aber leider nicht, egal mit was 
ich programmiere die Sicherheitsfkt. ausstellen z.B
- Anlaufschutz,verhindert ungewolltes Anlaufen des Motors
Ich denke es liegt am Anlaufschutz, da mein PWM-Signal kontinuierlich am 
PWM-Modul liegt sobald ich meiner Platine saft gebe und somit diese 
Funktion intern ausgeführt wird.

Sobald alles funktioniert werde ich dann noch mal eine komplette 
Zusammenfassung mit Lösung hier reinstellen.

Für weiter Lösungsvorschläge bin aber ich weiterhin sehr dankbar :)

von stefan hennig (Gast)


Lesenswert?

Aalso, ich kenne die Motorsteuerungen für die Roxxy Brushless Motoren 
so, dass man beim ersten Einschalten die Stellwege anlernen muss.
Das wird, wenn ich mich recht erinnere, durch das Blinken einer LED 
angezeigt.
Machst Du das?
Ich kann mich nicht erinnern, ob die Einstellungen erhalten bleiben, 
wenn die Betriebsspannung weg ist oder nicht. Könnte mir vorstellen, 
dass aus Sicherheitsgründen bei jedem Einschalten ein Anlernen notwendig 
ist.
Aber das stand eigentlich gut verständlich in der Anleitung. Hast Du da 
mal reingeschaut?

Grüße,
   Stefan

von Stefan W. (swessels)


Lesenswert?

closed_loop schrieb:
> Ich denke es liegt am Anlaufschutz, da mein PWM-Signal kontinuierlich am
> PWM-Modul liegt

Das kann sein. Probiere doch mal beim einschalten eine Pulslänge von >= 
1,1ms. Dann sollte der Anlaufschutz nicht greifen. Ansonsten schalten 
die meidten Steller bei ausfall des Signals den Motor ab.

Gruß,
Stefan

von tsaG (Gast)


Lesenswert?

Hi, der Impuls am PWM Signaleingnag (weiß) für den roxxy Regler muss 
alle 20ms kommen (nicht nur bei Änderung der Pulsweite).
Habe es selbst schon erfolgreich mit einem Mega8 am laufen. Pulsweiet 
(1ms-2ms und Periodendauer von 20ms)
Um den Regler zu nutzen, muss nach anschlißen des Akkus zuerst die 
Mittelstellung (1,5ms Puls) anliegen, dann piepst der Regler (ich glaube 
3x) und dann kann mit Änderung der Pulslänge die Drehzahl & Drehrichtung 
verstellt werden.
mfg

von tsaG (Gast)


Lesenswert?

Mit welcher Spannung betreibst du den roxxy-Regler? Möglicherweise 
erkennt der Unterspannung (leerer Akku) und lässt den Motor auf diesem 
Grund nicht anlaufen.

von closed_loop (Gast)


Lesenswert?

ich benutzen den vislero v2 11.1V 3S1P 2200mAH LiPO Akku, den wir vor 
kurzem nochmal aufgeladen haben.

Wenn wir direkt nach anschließen des Akkus, die Mittelstellung 1,5ms 
anlegen piepst er auch dreimal und die rote LED auf dem Regler leuchtet 
permanent. Nur leider will der Motor sich nicht drehen, auch nicht wenn 
wir die Pulslänge per Schalter umschalten.

Gestern habe ich das auch schon mit den 1,5ms Pulsweite probiert.
Als wir dann immer wieder an und ausgeschaltet haben, konnten wir 
zumindest erreichen dass der Motor dann irgendwann lief. Heute geht das 
leider nicht mehr. Er reagiert zwar kurz man hat das Gefühl er will 
losdrehen dann hört er aber direkt auf.

@Stefam
mit einer Pulslänge von 1,1ms genau das gleiche Verhalten.

Soll ich mal unseren Quelltext anhängen, vielleicht hilfts ja.

von tsaG (Gast)


Lesenswert?

Das die Rote LED leuchtet ist auch OK, dass habe ich auch nachdem er in 
Mittelstellung steht. Dann geht nach verändern der Pulslänge die LED aus 
und der Motor dreht sich.

closed_loop schrieb:
> Nur leider will der Motor sich nicht drehen, auch nicht wenn
> wir die Pulslänge per Schalter umschalten.

Evtl hat der Regler eine Fail-Save Funktion, die eine zu große 
sprunghafte Änderung der Pulsweite als Fehler erkennt. Am Besten mal nen 
Poti an den Mega644 anschließen, und mit dem Wert aus dem AD-Wandler 
damit die Pulsweite vorgeben. dann kann man sie auch in kleine Schritten 
verändern.

mfg

von us73 (Gast)


Lesenswert?

Hast Du das hier in der Anleitung gelesen ?

...
Falls nach (Punkt 3.1.2) die LED leuchtet, muß am Sender SERVO-
REVERSE betätigt werden, die Spannungsversorgung zum Regler
unterbrochen und erneut mit (Punkt 3.1.1) begonnen werden.
Die Vorwärtsposition des Knüppels muß in der Nähe des mechani-
schen Anschlags stehen.
...

Vielleicht hast Du vorwärts mit rückwärts verwechselt.

Also mal mit vorwärts (1,9ms) und rückwärts (1,1ms) probieren (evtl. 
sind die Signallängen auch andersrum, auswendig weiss ich das nicht). 
Signal anlegen, und dann den Regler einschalten. Der Rest steht in der 
Anleitung.

Ich würde mal drei fixe Längen programmieren, 1,1; 1,5; 1,9; und mit 
denen mal probieren.

closed_loop schrieb:
> Leider habe ich bis jetzt nur eine Fernsteuerung nicht das
Und wenn Du eine Fernsteuerung hast, hast Du mit dieser schon probiert, 
den Motor zum Laufen zu bringen ? Das würde ich doch zuerst machen, dann 
kannst Du Fehler von deiner SW ausschliessen - und verstehst, wie der 
Fahrtenregler / Motorsteller initialisiert werden will.
Und dann die Signalfolge, die Du ja mit dem Scope zur Not anschauen 
kannst, nachprogrammieren.

von Stefan W. (swessels)


Lesenswert?

Wenn Du nach der Anleitung vorgehst, mußt Du

- einen 1,9ms Impuls erzeugen (Vollgas)
- dann die Bestätigung des Stellers abwarten
- dann einen Impuls mit 1,1ms anlegen
- und wieder auf die Bestätigung des Stellers warten.

Damit hast Du dann den "Knüppelweg" respektive minimale und maximale 
Impulslänge für 'vorwärts / stop' eingelernt.

Wenn Du 'vorwärts  stop  rückwärts' benötigst, dann mußt Du noch die 
Mittelstelleung, z.B 1.5ms, dazwischeschieben. Siehe Anleitung 3.1.

Wenn dann die rote LED leuchtet das Ganze nochmal mit umgekehrten 
Impulslängen.

Wie schon weiter oben geschrieben gelten die von mir genannten 
Impulslängen für 100% Stellweg nach Graupner. Alles andere zwischen 
0.9ms un 2.1ms sollte auch funktionieren.

Grundsätzlich sollte das Umschalten per Schalter kein Problem 
darstellen. Wir machen es ja in unseren Fliegern (manchmal) genau so.

Wie erzeugst Du Dein Signal? PWM-Modus eines Timers oder CTC? letzteres 
wäre nicht ganz so schön....

Gruß,
Stefan

von Stefan W. (swessels)


Lesenswert?

stefan hennig schrieb:
> Könnte mir vorstellen,
> dass aus Sicherheitsgründen bei jedem Einschalten ein Anlernen notwendig

Hallo Stefan,

das kommt ganz auf den Steller an (ich wehre mich gegen den Begriff 
Regler).

- Mein Jeti erwartet eine Impulsweite von ~1.1ms oder kleiner, dann 
merkt er sich die Leerlaufstellung. Anschließend einmal Vollgas, dann 
weiß er wo das ist. Wird also jedes mal eingelernt.

- Meine Turnigys muss ich explizit auf den Sender einlernen, die merken 
sich das.

- Der alte PICO25 von Graupner muß auch explizit angelernt werden.

Gruß,
Stefan

von closed_loop (Gast)


Lesenswert?

@tsag
das war die Lösung!!!
Der hat scheinbar eine Fail-Save Funktion.
Ich habe nun nach Anschließen des Akkus zuerst die Mittelstellung (1,5ms 
Puls), dann stelle ich durch einen Schalter auf 1,58ms Puls und der 
Motor läuft.

Was ich noch nicht herausgefunden habe (aber auch für mich nicht 
wirklich essentiell ist), wie man den Motor in die andere Richtung 
drehen kann. Ich dachte, wenn ich den Puls kleiner als 1,5ms stelle 
würde er dann in die andere Richtung drehen.

An dieser Stelle möchte ich mich bei "Allen" für die vielen 
qualifizierten Antworten bedanken!

von P. S. (Gast)


Lesenswert?

Stefan Weßels schrieb:
> Äääh, das sind nicht 20 Hz, sonder 20ms, also 50Hz. Ist zwar nicht all
> zu kritisch, aber 20 Hz könnten doch etwas wenig sein.

Eigentlich sind es sogar 45Hz:

http://www.aerodesign.de/peter/2000/PCM/PCM_PPM.html#Anker234605

Zumindest fuer aktuelle Multiplex-Anlagen kann ich die angegebenen Werte 
bestaetigen.

von tsaG (Gast)


Lesenswert?

closed_loop schrieb:
> drehen kann. Ich dachte, wenn ich den Puls kleiner als 1,5ms stelle
> würde er dann in die andere Richtung drehen.
Das ist auch richtig so, aber es kann sein, dass der Regler in 
Werkseinstellung auf Bremsfunktion eingestellt ist, dann ist kurz nach 
der Mittelstellung Bremse und dann darüber hinaus dann Rückwärts. Das 
kann man aber mit dem Programmiertool umstellen.

von Stefan W. (swessels)


Lesenswert?

Peter Stegemann schrieb:
> Stefan Weßels schrieb:
>> Äääh, das sind nicht 20 Hz, sonder 20ms, also 50Hz. Ist zwar nicht all
>> zu kritisch, aber 20 Hz könnten doch etwas wenig sein.
>
> Eigentlich sind es sogar 45Hz:

Der Link ist klasse, den kannte ich noch gar nicht.

Da gibts bestimmt unterschiedliche Frequenzen / Periodendauern, ich habe 
es nie nachgemessen. Die 50Hz werden jedenfalls gerne gemommen.
Die MC22 hat eine Periodendauer von 22.5ms, die MX24 hat irgendwas um 
12ms im 5-Kanalbetrieb usw.

Auf keinen Fall wollte ich den Anschein unendlicher Weisheit erwecken... 
;-)

Gruß,
Stefan

von P. S. (Gast)


Lesenswert?

Stefan Weßels schrieb:

> Auf keinen Fall wollte ich den Anschein unendlicher Weisheit erwecken...

Meines Wissens gibt es keinen offiziellen Standard, solange es 
funktioniert, kann man also schlecht sagen, was richtig ist und was 
nicht... das macht es auch so leicht fuer einige Hersteller, sich so 
weit aus dem Fenster zu lehnen, damit es mit "Fremdprodukten" nicht mehr 
geht.

von Modellbauer (Gast)


Lesenswert?

Ich habe nun nicht den ganzen Thread gelesen, aber:

Zuerst musst Du den Regler programmieren. Also Timing, Akkutyp, 
Abschaltspannung, ...

GAAAAAAANNNNNNZZZZ wichtig:

Motor AUS Position des Knüpples am Sender, wenn der Motor aus sein soll. 
Also bei Deiner Schaltung die Länge des Impulses, wenn der Motor stehen 
soll und die Vollgas Position. Also bei Deiner Schaltung die Länge des 
Impulses bei maximaler Drehzahl.

Wenn Du das gemacht hast, dann läuft die Sache nur, wenn beim Anstecken 
des Antriebsakku die Motor AUS Impulslänge anliegt. Dann erst 
initialisiert (tüddelt ein paar Töne mit dem Motor) der Regler und erst 
nach dem Initialisieren kannst Du anfangen und Gas geben.

So sind die Modellbauregler alle. Sonst könnte man ja einen Heli bei 
Halbgas an den Akku stöpseln und bekäme die Finger verkloppt oder bei 
einem Flieger die Finger im Propeller zerhäckselt.

von P. S. (Gast)


Lesenswert?

Modellbauer schrieb:
> Ich habe nun nicht den ganzen Thread gelesen, aber:

Haettest du vieleicht machen sollen.

> So sind die Modellbauregler alle.

Nein, sind sie nicht. Und weiter oben steht das auch schon :-(

von Stefan W. (swessels)


Lesenswert?

Modellbauer schrieb:
> Sonst könnte man ja einen Heli bei
> Halbgas an den Akku stöpseln und bekäme die Finger verkloppt

In der Anfangszeit gab es auch so etwas......

Gruß,
Stefan

von Stefan W. (swessels)


Lesenswert?

Peter Stegemann schrieb:
> Meines Wissens gibt es keinen offiziellen Standard,

Den gibt es mit Sicherheit nicht. Ich denke mal das die Frequenz stark 
von der Anzahl der übertragenen Kanäle abhängt.

Im Prinzip brauche ich ja nur [Synchronisation(3ms?) + Kanalzahl * max. 
Impulslänge + (Kanalzahl-1) * Pause] zu berechnen, dann habe ich die 
Periodendauer. Ich vermute mal das es auch Sender mit variabler 
Periodendauer gibt.

Ich glaube ich muss mir mal ein Oszi leihen, dann messe ich mal MX16s 
und MC12 durch. Das interessiert mich jetzt.

Gruß,
Stefan

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.