mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Atmega8 auf dem 2. 8 Bit Timer/Counter


Autor: Carsen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>  TCCR2 = _BV(COM21) | _BV(WGM20);
>  TCCR2 = _BV(CS20);

Entscheide dich mal.

MfG Spess

Autor: Hans B. (hans_b92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um es mal zu verdeutlichen was Spess dir eigentlich zu vermitteln mag:

Falsch:
  TCCR2 = _BV(COM21) | _BV(WGM20);
  TCCR2 = _BV(CS20);

Richtig:
  TCCR2 = _BV(COM21) | _BV(WGM20) | _BV(CS20);

;)

Autor: Hans B. (hans_b92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Begriffen. Herzlichsten Dank!

Autor: Hans B. (hans_b92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Hans B. (hans_b92)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Hans B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hans B. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rubelus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW... der BUZ21 schaltet doch eh erst bei 10V voll durch, oder wie war 
das?!

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hans B. (hans_b92)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Hans B. (hans_b92)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.