Liebe Alle, ich versuche mich an meinem ersten Projekt und scheitere gerade in vollem Umfang. Final ist angedacht, dass über einen der 8-Bit PWM-Port (PB3, Timer/Counter2) des Atmega8 ein BUZ21 einen kleinen Motor und dessen Umdrehungsgeschwindigkeit regelt. Vorab versuche ich eine Testschaltung auf dem Steckbrett und folgenden Minicode: /* Schnipp */ void main(void) { DDRB=0xff; PORTB=0xff; TCCR2 = _BV(COM21) | _BV(WGM20); TCCR2 = _BV(CS20); while(1) { OCR2=200; } return 0; } /* Schnapp */ Die Lektüre des Datenblattes sagt mir, dass ich damit den gewünschten PWM Phase Correct Mode erziele und die Clock ohne Prescaler nutze. Meinem Verständnis nach sollte nun eine unterschiedliche Motorgeschwindigkeit erzielt werden wenn ich OCR2 = 100; in der Schleife habe oder OCR2 = 200; Leider erziele ich keinen Unterschied bei unterschiedlichen Werten des OCR2. Da ich vermute, dass es es Softwareproblem ist stelle ich meinen Versuchsaufbau mal noch nicht dazu. Wenn jemand einen Tipp hat wäre ich sehr dankbar. Mit freundlichen Grüßen Carsen
Hi > TCCR2 = _BV(COM21) | _BV(WGM20); > TCCR2 = _BV(CS20); Entscheide dich mal. MfG Spess
Hallo, Entschuldigung, leider kann ich mit diesem Hinweis nichts anfangen. Ich verstehe nicht was du meinst, meiner Auffassung nach setzen die 3 Bits die ich aktiviere jeweils unterschiedliche Themenbereiche (PWM, Setmode und Prescaler für die Uhr). Ist dem nicht so? Viele Grüße Carsen
Hi > meiner Auffassung nach setzen die 3 Bits >die ich aktiviere jeweils unterschiedliche Themenbereiche (PWM, Setmode >und Prescaler für die Uhr). Ist dem nicht so? Nein. Mit der zweiten Zuweisung überschreibst du die erste. MfG Spess
Um es mal zu verdeutlichen was Spess dir eigentlich zu vermitteln mag: Falsch:
1 | TCCR2 = _BV(COM21) | _BV(WGM20); |
2 | TCCR2 = _BV(CS20); |
Richtig:
1 | TCCR2 = _BV(COM21) | _BV(WGM20) | _BV(CS20); |
;)
Dass die zweimalige Setzung des Register die erste überschreibt ist mir nun klar und ist behoben. Leider bringt mein Versuchsaufbau immernoch die gleichen (nicht)-Ergebnisse. Der Motor läuft nicht. Versuchsaufbau ist identisch (Atmega8, PB3 speißt über Widerstand den Buz21, Widerstand + LED an anderem Ausgang), ich initialisiere jetzt mit: TCCR2 = _BV(COM21) | _BV(WGM20) | _BV(CS20); Ist die Anweisung prinzipiell richtig um ein PWM Signal zu erzeugen? Bei dem Testaufbau beobachte ich ferner, dass die LED (obwohl auf gänzlich anderem Pin) plötzlich statt konstantem Leuchten nur noch schwach glimmt/flackert. Setze ich den OCR2 auf 0 habe ich wieder konstantes Leuchten - je höher der Wert desto niedriger die Leuchtleistung. Liegt das an einem Störsignal auf dem Teststeckbrett oder an dem Timercode? Der Code hat sonst keinen Inhalt außer die Anweisung die LED Pin auf Ausgang und High zu setzen. Für Tipps wie immer dankbar. Beste Grüße
Hmm... scheint alles richtig zu sein... Du bist aber schon an Port B Pin 3? also Pin 17 mit deinem Motorcontroller?! Denn dein Verhalten deiner LED spricht ganz und gar dafür das dort ein PWM Signal anliegt. EDIT: Ein Oszi zur Hand?! Oder wenigstens ein Multimeter mit Freqenzmesser?
Hi nochmal, ich habe noch kurz den Schaltplan angehängt. Ich habe Port B3 (Pin17) mehrfach überprüft, ich hänge am richtigen Pin. Macht es etwas das auf gleichem Pin die Programmierschnittstelle liegt? Ich ziehe für meine Tests die ISP nach der Übertragung immer ab. Viele Grüße und schon mal Danke für die bisherigen Antworten
Wo kommt die Stromversorgung her? Keine Entstörkondensatoren? Keine Blockkondensatoren? Da wundert es mich nicht, dass dein µC abstürzt, sobald der Motor anfängt Strom zu ziehen und die Versorgungsspannung versaut. Ersetz doch mal den Motor durch eine LED+Vorwiderstand. Die ist etwas gnädiger was die Stromversogung angeht. Und dann natürlich: Blockkondensatoren an den µC ran!
ich habe die Spannungsversorgung mit deem Spannungsregler aus dem Avr Tutorial davor, es kommen überall stabile 5 v an. Dachte das sei nicht erwähnenswert, da liegt auch nach meinen Messungen kein Fehler! Grüße
Hans B. schrieb: > ich habe die Spannungsversorgung mit deem Spannungsregler aus dem Avr > Tutorial davor, es kommen überall stabile 5 v an. Das entbindet dich nicht davon, an jedes Vcc/GND Pärchen vom Mega einen 100nF Kondensator zu hängen. > Dachte das sei nicht > erwähnenswert, da liegt auch nach meinen Messungen kein Fehler! Womit misst du? Mit einem Voltmeter wirst du die kleinen Einbrüche nicht sehen. Die sind im Bereich von µ-Sekunden! Wie gesagt: Ersetz mal den Motor (was ist das überhaupt für einer? Wieviel Strom braucht der?) durch eine LED. Mittels OCR musst du die dann sauber dimmen können.
Hi wie gesagt ich habe den Schaltplan für die Spannungsversorgung gewählt aber wenn ich dich richtig verstehe muss zusätzlich noch an jedes Vcc/GND Pärchen einen Kondensator vorschalten. Ich messe leider nur mit einem Voltmeter daher kann ich das wahrscheinlich wirklich nicht erkennen, aber der Atmega funktioniert bei den anderen Sachen wie LED schalten oder über einen Taster den Eingang schalten ohne Probleme. Das mit der LED statt Motor werde ich morgen mal probieren und dann berichten. Gruß Carsen
Jep, kommt auch ein wenig darauf an welchen 7805 du verwendest. Wenn du einen "kleinen" hast - schaft der gerade mal 0,5A oder bei der 78L05 sogar nur 100mA. Wenn dein Motor nun die Einschaltspannung bekommt, wird er vermutlich weit darüber liegen, sodas dein gesamtes System kurzfristig lahmgelegt wird.
Liebe Alle, hab es jetzt mit einer LED probiert und diese lies sich dimmen. Insofern scheint mein Hardwareaufbau nicht korrekt zu sein. Mir ist z.B. nicht ganz klar wo ich die Kondensatoren vor die VCC/GNC Pärchen des Atmega hängen muss - bei meinen Testläufen habe ich nur mit der Kombination auf dem Schaltbild überhaupt eine lauffähige Konfiguration erreicht. Wenn ich die Kondensatoren wie im Schaltbild oben nun drin habe, komme ich jedoch leider zum gleichen Ergebnis - es besteht kein Unterschied zum vorherigen Verhalten. Wenn ich die LED nun durch den Motor (den ich übrigens von einem Spiel meiner Kinder geklaut habe - leider keine weiteren Angaben verfügbar als das es ein sehr kleiner Motor ist) ersetze und ihn (wie im Schaltbild) auf 9 V gebe dreht er sich sehr unkontrolliert - mal schnell, mal langsam. Obwohl ich den OCR2-Wert nicht verändere. Ziehe ich ihn auf die 5 V nach dem Spannungsregler dreht er sich gar nicht. Der Spannungsregler ist übrigens ein LF 50 CV. Die Spannungsversorgung ist ein 9 V Trafo mit 500 mA. Falls jemand einen Tipp für mich hat freu ich mich natürlich. Viele Grüße Carsen
Hans B. schrieb: > Liebe Alle, > > hab es jetzt mit einer LED probiert und diese lies sich dimmen. Gut > Insofern > scheint mein Hardwareaufbau nicht korrekt zu sein. Mir ist z.B. nicht > ganz klar wo ich die Kondensatoren vor die VCC/GNC Pärchen des Atmega > hängen muss So nahe wie möglich an die physikalischen Pins. Da die klugerweise von Atmel direkt nebeneinander am Chip angeordnet wurden braucht man einfach nur einen 100nF neben den Chip auf Höhe der Vcc/GND Pins einsetzen und mit den Pins verdrahten. > - bei meinen Testläufen habe ich nur mit der Kombination auf > dem Schaltbild überhaupt eine lauffähige Konfiguration erreicht. Solange keiner die Versorgungsspannung verschmutzt, braucht keiner diese Kondensatoren. Nur leider ist die reale Welt nicht so einfach. Jeder Schaltkreis verursacht kleine Störungen auf der Versorgungsspannung. Und diese Kondensatoren dienen dazu, sie wieder zu eliminimieren. Allerdings geht das nur in einem gewissen Umfang. Wenn es zu viele/zu große Störungen sind, dann helfen auch die Kondensatoren nichts mehr. > Wenn > ich die Kondensatoren wie im Schaltbild oben nun drin habe, komme ich > jedoch leider zum gleichen Ergebnis - es besteht kein Unterschied zum > vorherigen Verhalten. Wieviel Strom will dein Motor? Motoren sind 1) Dreckschleudern, indem sie dir die Versorgungsspannung versauen. 2) sie wollen Strom haben! Überhaupt im Moment des Einschaltens. Diesen Strom muss aber jemand liefern können! Dein 7805 kann nicht beliebig viel Strom liefern. Zieht der Motor zuviel Strom dann geht der 7805 in die Knie und die Spannung bricht ein. Spannungseinbruch ist aber schlecht, weil dann der µC resettet. > Wenn ich die LED nun durch den Motor (den ich übrigens von einem Spiel > meiner Kinder geklaut habe - leider keine weiteren Angaben verfügbar als > das es ein sehr kleiner Motor ist) Dann miss erst mal nach! Häng den Motor über ein Amperemeter an die Versorgungsspannung und miss die Stromaufnahme. > ersetze und ihn (wie im Schaltbild) > auf 9 V gebe dreht er sich sehr unkontrolliert - mal schnell, mal > langsam. Obwohl ich den OCR2-Wert nicht verändere. Ein Indiz dafür, dass dir die Versorgungsspannung einbricht. > Ziehe ich ihn auf die > 5 V nach dem Spannungsregler dreht er sich gar nicht. Dann wird der Motor wahrscheinlich bauartbedingt auch nicht mit 5V laufen. > Der Spannungsregler ist übrigens ein LF 50 CV. Die Spannungsversorgung > ist ein 9 V Trafo mit 500 mA. 500mA ist nicht viel. Miss mit dem Amperemeter nach, wieviel der Motor zieht. Und dabei Bedenken: im Einschaltmoment will der Motor ein Vielfaches vom Dauerstrom. > Falls jemand einen Tipp für mich hat freu ich mich natürlich. Miss deinen Motor aus und bau eine ordentliche Spannungsversogung die dem gewachsen ist. Du kannst noch so viel herumjammern. Ohen vernünftige Spannungsversorgung wird das nichts. Und nein: wie groß der Motor ist, spielt keine Rolle. Auch kleine Motoren können ordentlich Ströme ziehen.
Besten Dank vorab, mit dem Kondensator am Atmega bekomme ich jetzt das gewünschte Verhalten. Ich werde trotzdem am Wochenende mal den Motor ausmessen und auch im Hinblick auf die anderen Bereiche überprüfen ob meine Stromversorgung ausreichend ist. Vielen Dank für die Unterstützung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.