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
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
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.