PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit PWM und L298N (RN-Control Board)



davebastard
24.04.2007, 20:13
Hab mir für meinen Kettenbot eine Motoransteuerung mit dem L298N aufgebaut.verwendet hab ich die Schaltung aus dem Wiki mit den 8 dioden.Allerdings tritt bei der Ansteuerung, egal mit welcher PWM-Frequenz folgendes Problem auf: egal welchen wert ich für die geschwindigkeit eingebe ich bekomm nur 2V am motor heraus bei 12V Versorgungsspannung.Außerdem wird der l298 nach ca einer minute ziemlich heiß.
Ich bin mir ziemlich sicher dass es nicht an der software liegt da ich an den pwm ausgängen des µC ja die richtigen werte messe. z.B. 2,47V für halbe geschwindigkeit.Deswegen müsste ja der Fehler bei der L298 Schaltung liegen, aber auch dort habe ich nichts entdecken können.
Kann es sein das bei der Schaltung aus dem Wiki irgendwas fehlt (ich denk da an Kondensatoren) ?
Die motoren haben bei meinen messungen nie mehr als 0,8 A /motor gezogen also sollte der l298n ja ausreichen.Bin momentan sehr planlos was der Fehler sein könnte.
bei den motoren ist noch ein dünnes Kabel mit einigen Kondensatoren angelötet (soll wohl zur Entstörung dienen).Dieses kabel hab ich derweil nicht angelötet.Denke aber nicht dass das so viel ausmacht.

hier mal mein programm in c:
main.c

#include <avr/io.h>
#include "pwmlib.h"

int main(void)
{
PWMinit();
changespeed(256,256,FORWARD,FORWARD);
for(;;)
return 0;
}



pwmlib.h

#define LEFT_HIGH OCR1AH
#define LEFT_LOW OCR1AL
#define RIGHT_HIGH OCR1BH
#define RIGHT_LOW OCR1BL
#define FORWARD 1
#define BACKWARD 0
#define BRAKE 2


void PWMinit(void);
void changespeed(unsigned int,unsigned int,char,char);

void PWMinit ()
{
TCCR1A|=(1<<WGM11) | (1<<COM1A1) | (1<<COM1B1) ;
TCCR1B|=(1<<WGM12) | (1<<CS10 ) | (1<<CS11);
DDRD|=(1<<DDD4)|(1<<DDD5);
DDRB|=(1<<DDB0)|(1<<DDB1);
DDRC|=(1<<DDC6)|(1<<DDC7);
//DDRB = _BV(DDB0) | _BV(DDB1);
//DDRC = _BV(DDC6) | _BV(DDC7);
}

void changespeed(unsigned int speedleft,unsigned int speedright,char dir_right,char dir_left)
{
if(speedleft>511)speedleft=511; if(speedright>511)speedright=511;
if(speedleft<0 )speedleft=0 ; if(speedright<0 )speedright=0 ;
if(dir_right==0) {PORTB|=(0<<PB0)|(1<<PB1);} if(dir_right==1) {PORTB|=(1<<PB0)|(0<<PB1);} if(dir_right==2) {PORTB|=(0<<PB0)|(0<<PB1);} else {}
if(dir_left==0) {PORTC|=(0<<PC6)|(1<<PC7);} if(dir_left ==1) {PORTC|=(1<<PC6)|(0<<PC7);} if(dir_left ==2) {PORTC|=(0<<PC6)|(0<<PC7);} else {}
LEFT_HIGH = speedleft/256 ;
LEFT_LOW = speedleft%256 ;
RIGHT_HIGH = speedright/256 ;
RIGHT_LOW = speedright%256 ;
}

Hubert.G
25.04.2007, 13:56
Spannungen an einem PWM-Ausgang zu messen ist ziemlich Sinnfrei, da die meisten Meßgeräte bei höheren Frequenzen ohnehin Unsinn anzeigen. Da nützt nur ein Oszi.
Schon mal ohne µC probiert? Dann weist du was Schuld ist.
In der Schaltung fehlt ausser den üblichen Kondensatoren von VCC und VS nach GND nichts, die sind aber kaum für das fehlverhalten verantwortlich.
Hubert

Gock
25.04.2007, 14:25
Hi!
Habe Deinen Code nicht geprüft.
Hast Du schnelle Dioden verwendet?
Prüfe mal, ob die SensEingänge wirklich auf GND liegen und löte sie am besten nochmal nach.
Dreht sich der Motor denn oder pfeift er wenigstens mit der PWM Frequenz?
Stell' doch die Frequenz mal auf zb 0,5 Hz runter und messe den Strom dann.
Gruß

davebastard
26.04.2007, 13:27
Spannungen an einem PWM-Ausgang zu messen ist ziemlich Sinnfrei

wieso stimmen dann die werte, wenn ich direkt am controller messe ? wenn ich zum beispiel halbe geschwindigkeit einstelle hab ich 2,5V. bei 1/4 mess ich 1,25V usw.Also direkt am portpin gehts auf jedenfall mit dem Multimeter.
Ein Oszi hab ich aber eh schon bei ebay ersteigert.Sollte bald ankommen.
Ohne Mikrokontroller hab ichs noch nicht versucht, danke für den tipp.

Ich verwende bvy28 dioden, hoffe die sind schnell genug ?
der motor dreht bzw. piepst , darum glaub ich auch, dass die messung von 2v halbwegs stimmt, da das die spannung ist bei der der Motor gerade genügend kraft hat um das getriebe zu drehen.Senseingänge sind sicher auf GND hab ich schon kontrolliert.


Stell' doch die Frequenz mal auf zb 0,5 Hz runter und messe den Strom dann.

Wie stell ich die frequenz auf 0,5Hz ? so niedrige frequenzen kann ich ja nur per software pwm einstellen oder ?

danke für die antworten :-)

Gock
26.04.2007, 14:14
Hi!
Wenn Du mit Deinem Multimeter das misst wie Du schreibst, dann ist das Ok, es geht aber nicht mit jedem so gut, vor allem bei niedrigen Frequenzen.

Um die Frequenz runterzustellen, musst Du dir wohl ein kleines Testprogramm schreiben. Ich hielt das für gut, weil DU dann für 2s Gleichstrom hast und Du die einzelnen Schritte besser überwachen kannst.
Gruß

robocat
26.04.2007, 15:10
könnte daran liegen, dass kondensatoren fehlen:

davebastard
26.04.2007, 16:25
mhh hab leider nur Ko's mit 1µF hier. geht das auch ?

noch eine frage: muss die masse vom pin 8 des l298 mit der masse von der versorgungsspg des motors verbunden werden oder nicht (ich habs bis jetzt so dass ich sie auf den massepin des RN-Control board zurückführe)?

übrigens hab ich jetzt mal den l298 ohne µC(nur mit Gleichspannung) angesteuert ,der l298 funktioniert er dürfte also nicht kaputt sein.

Gock
26.04.2007, 17:08
Ja, Massen müssen verbunden sein!
Gruß

davebastard
26.04.2007, 17:11
ok habs jetzt mal am motoransteuerboard verbunden, wahrscheinlich wären die massen aber sowieso schon am rn-control board verbunden gewesen.

mfg

Gock
26.04.2007, 17:36
Hast Du eine niedrigere Frequenz probiert? Vielleicht hast Du einen sehr trägen Motor mit hoher Induktivität.
Liefert Deine Sannungsversorgung geug Saft?
Sind die Zuleitungen in Ordnung?
GRuß

recycle
26.04.2007, 17:54
noch eine frage: muss die masse vom pin 8 des l298 mit der masse von der versorgungsspg des motors verbunden werden oder nicht (ich habs bis jetzt so dass ich sie auf den massepin des RN-Control board zurückführe)?

Grundsätzlich sollten alle Massepunkte einer Schaltung gut leitend miteinander verbunden werden und irgendeine Verbindung zwischen dem GND Anschluss deines L298 und der Masse deiner Versorgungsspannung muss es natürlich auch geben.
Ich vermute aber, dass das auch der Fall ist, du wirst deine Versorungsspannung ja sicherlich nicht nur mit einer Leitung an deine Schaltung angeklemmt haben.

Die Masseverbindung zwischen der Versorungsspannung deiner Motoren und dem GND Anschluss des L298 sollte schon vernünftig sein.
2 mal 0,8 A für die Motoren ist zwar nicht schrecklich viel Strom, aber wenn dafür nur eine Masseverbindung über ein dünnes Flachbandkabel und eventuell noch ein paar unsaubere Lötstellen besteht, ist das sicherlich nicht optimal.

Schlecht verbundene Massepunkte können schnell zu Störungen in einer Schaltung führen, besonders bei Signalen mit höheren Frequenzen wie z.B. PWM Signalen - besonders wenn dann auch noch bei Entstörkondensatoren gespart wird.

Keinme Ahnung ob es die Ursache für dein Problem ist, aber eine zusätzliche direkte Verbindung zwischen GND vom L298 und der Masse deiner Motor-Versorgungsspannung kann sicher auch nicht schaden.

davebastard
26.04.2007, 22:58
Hab jetzt einige der lötstellen nachgelötet und ich glaub jetzt dürfte es passen. Bei einer PWM Frequenz von ca 500Hz und 9v versorgungsspannung bekomm ich 6,5V heraus (bei vollgas), falls der messwert stimmt. Der Motor dreht auch mit Vollgas und piepst nicht. D.h. ich hätte ca. 2,5V Verlust, liegt das noch in einem normalen bereich ?

Leider funktioniert im moment nur ein Motor also dürfte trotzdem noch wo ein Fehler sein.keine Ahnung worans liegt, werds mir morgen nochmal genauer ansehen.

Wegen der Frage mit der Masse von vorher; hab die beiden Massen nochmal am Motoransteuerungsboard verbunden, vielleicht hat das ja auch was bewirkt.

Gock
27.04.2007, 11:43
Hi!

2,5V Verlust
???
Das geht nicht, Spannung kann nicht verloren gehen und nicht verbraucht werden!
Wenn Du an den Motor 9V anlegst, dann müssen auch 9V anliegen, ansonsten stimmt was nicht.

Vollgas bei einer PWM-Frequenz von...
???
Vollgas heißt für mich: Gleichspannung
Wenn Deine Quelle nicht genug liefert, dann geht sie in die Knie, d.h. die Spannung fällt an deren Innenwiederstand ab.
Gruß

davebastard
07.05.2007, 23:10
heute ist mein oszi endlich geliefert worden. Hier mal ein bild des signals.
Es ist deutlich zu erkennen, dass die fallenden flanken nicht schnell genug sind (Schräge). Durch was entsteht sowas ? Durch zu langsame Dioden ? fehlende Kondensatoren ?
Jedenfalls ist deutlich zu erkennen das die Software keine Fehler hat, sowohl das tastverhältnis als auch die Frequenz stimmen.

edit: mein Netzgerät ist auf jedenfall stark genug da sind schon viel leistungshungrigere Schaltungen dran gelaufen.

Gock
08.05.2007, 12:23
Hi!
Wenn wir jetzt noch wüssten, was Du da eigentlich woran gemessen hast, mit welcher Frequenz und Amplitude, dann könnten wir vielleicht auch eine Antwort finden....
Und wenn DU schon dabei bist: Was ist das eigentlich fürn Motor???
Gruß

davebastard
08.05.2007, 18:07
jo sry ich hätt wirklich ein paar genauere angaben machen können. Es ist das Signal das direkt an den motoren anliegt also an den ausgängen der motoransteuerung. f=4kHz Umax ist 9v. Die Messung ist aber ohne Motor dran da der leider nur piepst und sich fast gar ned bewegt.

Der Motor ist aus dem Kettenfahrzeug also der war schon dabei, es wurde nur mit einem 6v-akku versorgt also wird der motor auch nur für 6v ausgelegt sein. hat ca.3cm durchmesser.

davebastard
09.05.2007, 15:48
so, ich hab jetzt mal einen Satz Kondensatoren bestellt, vielleicht bringts ja was. Ansonsten werd ich das Flachbandkabel vom Motoransteuerungsboard zum Rn-Control board noch tauschen.Vielleicht hab ich da ja wo einen Kontaktfehler.

Wenn das auch nichts hilft werd ich die Schaltung vermutlich nochmal ganz von neu aufbauen, vielleicht komm ich so auf den Fehler drauf.

davebastard
13.05.2007, 20:40
hier noch ein foto vielleicht kann ja der eine oder andere was drauf erkennen, für mich sieht es aus als wäre da irgendwo eine kapazität die die e-funktion rein bringt.Wüßte allerdings nicht wo diese "Störkapazität" herkommen sollte.

Wenn jemand eine idee hat, nur her damit ich bin für jeden Vorschlag dankbar!

übrigens: ich hab mir einen neuen l298n bestellt da ich irgendwie den verdacht hab das ich ihn irgendwann bei meinen versuchen abgefackelt hab, sonst fällt mir einfach nix mehr ein.

foto:

davebastard
27.05.2007, 20:50
leider hat das austauschen des l298 auch zu keinem ergebnis geführt, er war also nicht kaputt :( Kondensatoren hab ich jetzt auch alle.

Langsam bin ich schon am überlegen ob ich nicht ganz einen anderen IC verwende, ich find den fehler einfach nicht.

robocat
27.05.2007, 21:25
nicht aufgeben, der 298 ist wirklich ziemlich einfach anzusteuern. am besten erstmal einen motor in gang bringen.

gucken ob..
- die ausgänge deines controllers an den richtigen pins des motortreibers hängen.
- motor1-eingang1 auf HIGH geht, motor1-eingang2 muss dann LOW sein und umgekehrt
- an enable1 ein sauberes rechtecksignal anliegt (bzw aus dem controller rausgeht)
- dein pwm richtig konfiguriert ist, ich dachte der kann nur 8 bit. dann ist 255 das maximum, dann sollte der pwm-port gleichspannung ausgeben.

wenn du sagst, es geht "ohne controller" also mit enable und eingang1 auf high, dann wird es am controller oder den verbindungen dazwischen liegen.

gruesse

davebastard
27.05.2007, 23:47
- die ausgänge deines controllers an den richtigen pins des motortreibers hängen.

sind richtig hab ich alles schon 3 mal kontrolliert und auch gemessen.


motor1-eingang1 auf HIGH geht, motor1-eingang2 muss dann LOW sein und umgekehrt

so hab ich das auch, damit wird ja die richtung(vorwärts,rückwärts) angegeben.


- an enable1 ein sauberes rechtecksignal anliegt (bzw aus dem controller rausgeht)

es kommt ein sauberes Rechteck raus, hab ich mir schon mit dem oszi angesehen.Ich kann mir deshalb auch nicht vorstellen das es an der software liegt.


- dein pwm richtig konfiguriert ist, ich dachte der kann nur 8 bit. dann ist 255 das maximum, dann sollte der pwm-port gleichspannung ausgeben.

so wie ich das sehe kommt es darauf an welchen Fast-PWM Modus man verwendet.Es gibt 8,9 und 10 bit Modi. d.h. für 8-bit ist der größte wert (gleichspg.) 255, bei 9 bit 511 und bei 10 bit 1023.


wenn du sagst, es geht "ohne controller" also mit enable und eingang1 auf high, dann wird es am controller oder den verbindungen dazwischen liegen.


ja irgendwo muss da ein Fehler sein, wennst du dir das zweite oszi bild ansiehst merkt man deutlich die e-funktion die im Signal drinnen ist. Wie bei einem RC Glied. Ich hatte die Probleme aber schon als ich noch gar keine Kondensatoren in der schaltung hatte also kanns auch nicht an einem falsch gelötetem Ko liegen. Naja ziemlich aussichtslos die situation :-( Weiß nicht mehr wirklich weiter

edit: ich werd morgen ein besseres Bild vom Signal machen das jetzige Foto ist qualitativ nicht wirklich gut.Ich werd dann auch einzeichnen was ich mit der e funktion meine.

tia

davebastard
29.05.2007, 14:28
hier das foto, vielleicht fällt ja jemanden was ein

edit: das war jetzt bei 250 Hz, beim obigen bild waren es 2 kHz