Scheibenläufer und PWM

Die Elektronik des c't-Bot
Antworten
Katja84

Scheibenläufer und PWM

Beitrag von Katja84 » 13 Apr 2006, 20:36

Hallo Community,

ich habe die ct-Bot-Motoren in einen anderen Roboter verbaut und habe jetzt total die Probleme mit der Ansteuerung. Original hat der ne H-Brücke aus 4 Transistoren drin. Jetzt hab ich ihn schon umgebaut auf den Motortreiber-IC L293D. Trotzdem habe ich immer das gleiche Problem. Ich geh mit dem PWM-Wert auf die Hälfte, bekomme aber nicht die halbe Spannung raus. Voll aufgedreht sinds 5,5V und bei der hälfte sinds ca. 5,1. Das kann doch nicht sein. Dann hab ich mir mal mit nem Oszi die Spannung direkt an den Motorklemmen angeschaut. Von Rechtecken oder Flanken sieht man gar nichts. Nur wenn man den Motor mit der Hand kräftig abbremst, wird ein Rechtecksignal erkennbar. In diesem Fall wird dann auch die Spannnug runtergezogen.
Das komische ist, das dieses Phänomen nur bei den Scheibenläufern auftritt. Hänge ich konventionelle DC-Motoren dran, hab ich bei halbem PWM-Wert auch die halbe Effektivspannung und die halbe Drehzahl (bei schönen sauberen Flanken). Wie's eben sein soll...
Weiß vielleicht jemand rat?

lg Katja

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Apr 2006, 21:17

Hi Katja,

ich habe die Spannung bisher nicht nachgemessen (kann ich aber gern mal machen), dafür aber die Drehzahl. Wenn der Bot aufgebockt ist und die Räder keinen weiteren Widerstand haben, habe ich bei halbem PWM-Wert nicht die halbe Drehzahl, sondern deutlich mehr. Den genauen Wert habe ich jetzt nicht mehr im Kopf, kann ich aber nachreichen, wenn du was zum Vergleichen haben möchtest. Sobald der Bot aber auf einer Oberfläche steht und die Räder Widerstand haben, sehen die Drehzahlwerte schon viel "besser" aus, wobei es aber auch dann keinen wirklich linearen Zusammenhang gibt. :roll:
Ich hab das Thema "damals" auch mit Benjamin Benz im Chat besprochen, das Ziel ist letztlich ja eine MotorREGELUNG, mit den PWM-Werten so zu arbeiten ist eben nur eine vorläufige Vereinfachung. Darum geht's auch in einer der nächsten c'ts, siehe Roadmap. :)
Vielleicht hilft dir das ja schon mal ein wenig weiter. Ich denke letztlich hängt deine Beobachtung mit den Motoren und ihrem Innenwiderstand zusammen, genaueres müsste man sich dann mal anschaun, wenn man die Geschwindigkeit nicht per Software regeln will (was glaube ich aber sinnvoller ist).

LG Timo

marvin
Wiki Master
Wiki Master
Beiträge: 417
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 14 Apr 2006, 20:23

Hi Katja,

deine Messungen der Motorspannung kann ich bestätigen. Erklärung dafür hab ich leider keine.

In einem anderen Thread wurde schon mal festgestellt, das die Motorspeed nicht linear mit den eingestellten Speed Paramtern steigt. Ab Werten von 150 bis zum Maximum stieg die Geschwindigkeit kaum noch an. Ein Speed Wert 128 entspricht 50% PWM.

Zum Vergleich hab ich hier mal ein Bild mit den PWM Signalen bei verschieden Speed Werten gepostet.

Vielleicht ist der Scheibenläufer vom Wirkungsgrad einfach besser als ein normaler DC Motor. Sprich man braucht nur wenig Gas geben, damit er schnell läuft. Vollgas bringt praktisch nichts.

Vielleicht mal im Roboternetz nachfragen. Manf weiß da sicher besser Bescheid.

Gruß marvin

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 14 Apr 2006, 20:57

marvin hat geschrieben:[...]
Vielleicht ist der Scheibenläufer vom Wirkungsgrad einfach besser als ein normaler DC Motor. Sprich man braucht nur wenig Gas geben, damit er schnell läuft. Vollgas bringt praktisch nichts.
[...]
Das hängt wieder ganz davon ab, wie groß der Widerstand ist, im Leerlauf ist es sicher so, nur ist dieser Fall IMHO in der Praxis recht uninteressant ;)

Gruß Timo

Katja84

Beitrag von Katja84 » 18 Apr 2006, 11:48

vielen Dank für eure Antworten!
Leider kann ich an meinem Bot gerade nichts machen, da ich ein weiteres Hardwareproblem habe. Habe aber im Roboternetz-Forum erfahren, daß das Problem wahrscheinlich die niedrige PWM-Frequenz ist. Bei mir beträgt sie 2kHz und ließe sich auf maximal 16kHz erhöhen. Jetzt wollt ich mal fragen wie hoch die Frequenz beim ct-Bot ist (??). Es wäre auch super wenn mal jemand die PWM-Frequenz beim ct-Bot erhöhen könnte und sagen könnte ob sich eine annährende Proportionalität zwischen PWM-Bitwert und Drehzahl im Leerlauf einstellt. Was ich letztendlich brauche ist eine weitgehend belastungsunabhängige Proportionalität zwischen PWM-Bitwert und der Motorspannung. Dafür gibts doch schließlich die PWM, oder???

lg Katja

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 18 Apr 2006, 12:15

Hi Katja,

ich denke die PWM-Frequenz ist beim ct-Bot 16kHz.
Wie weit du die Proportionalität hinbekommst hängt aber IMHO auch von den Motoren ab...
In der aktuellen ct (ich hab sie ja leider noch nicht *grummel*) gibt es einen Artikel zu DrehzahlREGELUNG, das macht aber natürlich nur sind, wenn du die reale Drehzahl auch messen kannst und willst ;)

LG Timo

[edit]
Was meinst du denn mit "Motorspannung"? Die vom Treiber erzeugte (effektive) Spannung (= Vs * t_high / (t_high+t_low) ist natürlich immer proportional zum Bitwert.
[/edit]

marvin
Wiki Master
Wiki Master
Beiträge: 417
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 18 Apr 2006, 12:48

Hi Katja,

die PWM Frequenz beim c-t-Bot liegt bei 62Hz (nicht 16kHz Timo).
Hatte mal mit 8kHz PWM Frequenz probiert. Leider ohne Änderung beim Verhalten im Leerlauf. Dafür fiepen die Motoren damit recht kräftig.
Damit könnte man immerhin toll Musik machen. (gibt es ja auch schon für den Asuro) :wink:

Ich denke nicht das eine belastungsunabhängige Proportionalität zwischen PWM-Bitwert und der Motorspannung machbar ist. Bin allerdings nicht gerade Fachmann auf dem Gebiet.

Was hingegen machbar ist, ist die Drehzahlregelung mit PID Regler über Odometrie Feedback. Damit läuft der Bot lastunabhängig mit konstanter Geschwindigkeit.

Gruß marvin

Katja84

Beitrag von Katja84 » 18 Apr 2006, 13:20

also 62Hz kann ich mir nicht vorstellen. Ich hab bei mir wie gesagt 8kHz und das scheint schon viel zu niedrig zu sein. Laut Roboternetz könnte es so mit 20kHz besser werden. Kann das nicht mal jemand testen? Evtl. die PWM-Frequenz nöch höher schrauben und mal schauen was passiert.
Zur Belastungsunabhängigen Proportionalität: Bei meinen konventionellen DC-Motoren bekomm ich das nahzu hin. Nur die Scheibenläufer ziehen momentan noch bei Belastung die Spannung in den Keller. Im Attachment ist mal ein Ersatzschaltbild eines Gleichstrommotors. Das gleiche möchte ich auch für meinen Bot erzeugen und dann mal was simulieren. Nur dazu brauch ich halt die konstante Eingangsspannung am Motor.
Wie soll denn die Geschwindigkeitsregelung über die Odometrie funktionieren wenn auch dabei das Motorverhalten nicht abgebildet werden kann? Egal wie ich das anpacke, mein Motor sitzt halt nunmal in der Regelstrecke und muß daher in seinem Verhalten auch beschrieben werden (zumindest wenn ich die optimalen Regelparameter ermittlen will und nicht mit Trial & Error rummurksen will). Oder etwa nicht?
Dateianhänge
DC-Motor.jpg
(25.57 KiB) 199-mal heruntergeladen

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 18 Apr 2006, 13:33

Hi Katja,

ich versteh leider noch nicht so ganz, worauf du hinaus willst :roll:
Ich kann das leider zurzeit nicht testen mit einer höheren Frequenz, warum es dann besser werden sollte, leuchtet mir allerdings auch nicht so recht ein...
Konstant ist die per PWM erzeugte Spannung nie, kann sie ja auch nicht sein.
Zur Regelung: Letztlich ist das ein Optimierungsproblem, für dessen Lösung es durchaus einige Algorithmen gibt, das sollte nicht das Problem sein. Natürlich wäre es wesentlich einfacher, das ganze direkt per PWM zu steuern, nur wird das IMHO nie belastungsunabhängig gehen.

LG Timo

marvin
Wiki Master
Wiki Master
Beiträge: 417
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 18 Apr 2006, 14:00

Hi Katja,

doch die 62Hz sind korrekt. Wie man aus dem Bild selbst nachrechnen kann (ca. 16ms Periodendauer). Aus dem Programmcode ebenfalls (8-Bit PWM, Vorteiler 1024, 16MHz Taktfrequenz).

[syntax="c"]
/*!
* Timer 1: Kontrolliert die Motoren per PWM
* PWM löscht bei erreichen. daher steht in OCR1A/OCR1B 255-Speed!!!
* initilaisiert Timer 0 und startet ihn
*/

void pwm_1_init(void){
DDRD |= 0x30 ; // PWM-Pins als Output
TCNT1 = 0x0000; // TIMER1 vorladen

TCCR1A = _BV(WGM10) | // Fast PWM 8 Bit
_BV(COM1A1) |_BV(COM1A0) | // Clear on Top, Set on Compare
_BV(COM1B1) |_BV(COM1B0); // Clear on Top, Set on Compare

TCCR1B = _BV(WGM12) |
_BV(CS12) | _BV(CS10); // Prescaler = 1024
OCR1A = 255; // PWM löscht bei erreichen. daher steht in OCR1A 255-Speed!!!
OCR1B = 255; // PWM löscht bei erreichen. daher steht in OCR1B 255-Speed!!!

// TIMSK|= _BV(OCIE1A) | _BV(OCIE1B); // enable Output Compare 1 overflow interrupt
// sei(); // enable interrupts
}
[/syntax]

Gruß marvin

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 18 Apr 2006, 14:45

Danke Marvin, jetzt weiß ich auch wo mein Denkfehler war :oops:
Gruß Timo

marvin
Wiki Master
Wiki Master
Beiträge: 417
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 18 Apr 2006, 21:43

Die 62Hz stimmen mich doch etwas nachdenklich.
Nach allem was man so liest oder googelt, sollte die PWM Frequenz besser über 10kHz liegen. Vielleicht ist da doch noch was faul.

Werd mal eine email an Hr. Benz schicken.

Gruß marvin

Katja84

Beitrag von Katja84 » 23 Apr 2006, 11:19

Hab jetzt die Lösung für das PWM-Drehzahl-Problem. Als erstes hab ich die PWM-Freauenz auf das Maximum erhöht. Bei mir sind das 16kHz. Ich glaube beim ct-Bot gehen auch 32kHz. Als nächstes hab ich in die H-Brücke für die Motoransteuerung noch weitere Transistoren eingelötet. Und zwar die beiden Transistoren, die zwischen Motor und VCC hängen nochmal mit PNP-Transistoren gebrückt und lasse diese jetzt direkt durch das PWM-Signal aus dem MicroController ansteuern. So wird in der PWM-Low-Phase der Motor gegen VCC kurzgeschlossen und zieht die induzierte Spannung sofort runter auf null. Jetzt habe ich ein ganz schönes Rechtecksignal an den Motorklemmen und bei halbem PWM-Bitwert habe ich auch die halbe Spannung am Motor und die halbe Drehzahl. So solls sein!!!

lg Katja

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 23 Apr 2006, 14:33

Hi Katja,

freut mich, dass du das Problem gelöst hast :) Die Info wird sicher auch für andere hilfreich sein ;)

LG Timo

Antworten