Forum: Mikrocontroller und Digitale Elektronik Die PWM will einfach nicht.


von Mark S. (mark_sedl)


Lesenswert?

Hallo,

ich versuche derzeit 6 PWMs auf einem ATMega128 ins laufen zu kriegen. 
Aber egal was ich auch mache, tue, setze. Entweder habe ich 100% oder 
garnichts.

Also ich habe am PWM PIN einen Transistor, der widerrum betreibt einen 
Lüfter. Mit I/O lässt sich der Lüfter ein und ausschalten. Perfekt

Nun will ich aber mittels PWM die Geschwindigkeit steuern...

Ich habe die ganze Nacht nun alle ermöglichen Varianten probiert.. Die 
PWM will einfach nicht laufen...
1
//      TCCR0 = (1<<WGM01); // CTC Modus
2
//      TCCR0 = (1<<CS02); // Prescaler 64
3
        // ((1200000/64)/1000) = 187,5
4
//      OCR0 = 187-1;
5
6
        // Timer 1 PWM
7
        DDRB |= (1<<PB5);
8
        ICR1 = 0xFFFF;
9
        // set TOP to 16bit
10
        OCR1A = 0x3FFF;
11
        TCCR1A |= (1 << COM1A1)|(1 << COM1B1);
12
        TCCR1A |= (1<<WGM12) | (1 << WGM11);
13
        TCCR1B |= (1 << WGM13);
14
        TCCR1B |= (1 << CS10);
15
//      TCCR1A |= (1<<WGM10) | (1<<COM1A1);
16
//      TCCR1B |= (1<<CS11) | (1<<CS10);
17
18
        // Timer 3 PWM
19
//      TCCR3A = (1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1) | (1<<WGM31) | (1<<WGM30);
20
//      TCCR3B = (1<<WGM32) | (1<<CS30);
21
22
//      OCR1A = 180;
23
//      OCR1B = 1000;
24
//      OCR1C = 1000;
25
26
//      OCR3A = 1000;
27
//      OCR3B = 1000;
28
//      OCR3C = 1000;
29
30
        // Compare Interrupt erlauben

Das ist jetzt mein letzter Test gewesen...

Egal auf welchen Wert ist OCR1A auch setze... der Lüfter "piept" oder 
"summt" nur so ganz komisch. Setzte ich den PWM Wert also OCR1A aber auf 
254 oder in anderen versuchen auf 1023 dann dreht der Lüfter mit voller 
Geschwindigkeit.

Setze ich den Wert auf darunter geht nichts mehr...

Ich verzweifel langsam.

Es ist ein ATMega128 mit 12Mhz externem Quarz.

Ich hoffe ihr könnt mir weiter helfen.

: Verschoben durch Moderator
von Flip B. (frickelfreak)


Lesenswert?

Die elektronik im lüfter läuft bei jedem.puls frisch los. Das klappt vor 
allem bei hohen frequenzen nicht.

Messe mal am ausgangspin dein signal nach.

: Bearbeitet durch User
von Mark S. (mark_sedl)


Lesenswert?

hab kein oszi...

naja das ist doch einfach nur nen motor.. an einem irlz das sollte doch 
einfach per pwm steuerbar sein...

von MaWin (Gast)


Lesenswert?

Wie sehen die Fuses bei dir aus?

JTAG deaktiviert?

von Mark S. (mark_sedl)


Lesenswert?

avrdude: safemode: Fuses OK (E:FF, H:D9, L:EE)

von Falk B. (falk)


Lesenswert?

Mark S. schrieb:
> hab kein oszi...
>
> naja das ist doch einfach nur nen motor.. an einem irlz das sollte doch
> einfach per pwm steuerbar sein...

Eine PWM kann man auch mit einem Multimeter messen, Mittelwert = 
Tastgrad * Vcc.

von Klaus R. (klara)


Lesenswert?

Mark S. schrieb:
> hab kein oszi...

Aber doch sicher einen Spannungsmesser.
mfg Klaus

von Mark S. (mark_sedl)


Lesenswert?

Du meinst ein Multimeter?

Also ich habe jetzt mal einen LED Strip angehängen anstatt dem Lüfter..
1
        TCCR1A |= (1<<WGM10) | (1<<COM1A1);
2
        TCCR1B |= (1<<CS11) | (1<<CS10);
3
        OCR1A = 10;

Das Stripe lässt sich dimmen. Aber ab 40 nicht mehr. Also ich kann von 0 
- 40 Dimmen... Dann wird 40 Wohl TOP sein.. was ich nicht ganz 
nachvollziehen kann.


Aber warum lässt sich der Lüfter nicht regulieren?

Ich habe den Lüfter mal an 5V und mal an 12V geklemmt (ist nen 12V 
Lüfter) also da dreht auch schneller und langsamer...

Und die PWM macht ja nichts anderes...

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Mark S. schrieb:
> Und die PWM macht ja nichts anderes...

Und? Ändert sich die Spannung am Multimeter wenn Du steuerst?
mfg Klaus

von J. Zimmermann (Gast)


Lesenswert?

WGM12 gehört zu TCCR1B, nicht TCCR1A, dadurch machst Du Phase correct 
PWM.
mfg
Achim

von Mark S. (mark_sedl)


Lesenswert?

Ja habe ich...

0 - 11,4V also das passt soweit.
1
        // Timer 1 PWM
2
        DDRB |= (1<<PB5);
3
        TCCR1A |= (1<<WGM11) | (1<<WGM10) | (1<<COM1A1);
4
        TCCR1B |= (1<<CS11) | (1<<CS10);
5
        OCR1A = 200;

So habe ich die PWM jetzt laufen..

Also das müsste ja jetzt sein:

PWM, Phase Correct, 10-bit      (WGM11 und WGM10)

Prescale von 64                 (CS11 und CS10)

Komischerweise ist der Wert trotzdem nur OCR1A 0 - 255... müsste dieser 
nicht 0 - 1023 sein?

Wenn ich mich recht erinnere habe ich nun 12.000.000  1024  (2 * 
64/prescale)) also 91,55 Hz... korrekt?

Damit müsste doch auch jeder Lüfter laufen....

LEDs kein Problem...

Setze ich den Prescale auf 1 dann piepen die Lüftermotoren laut.. je 
höher ich den Prescaler setze um so leiser wird das piepen.. sie drehen 
aber nicht..

ab einem prescale von 256 blinken die leds und dimmen nicht mehr

Wenn ich die Lüfter anfasse dann spüre ich den Strom... komisch zu sagen 
aber ich merke wie da Spannung anliegt nur sie drehen eben nicht.. Das 
fühlt sich so komisch an.. als ob die Motoren brummen oder er andrehen 
will aber nicht kann weil er blockiert wäre oder so komisch..

: Bearbeitet durch User
von Brummbär (Gast)


Lesenswert?

Mark S. schrieb:
> Das Stripe lässt sich dimmen. Aber ab 40 nicht mehr. Also ich kann von 0
> - 40 Dimmen... Dann wird 40 Wohl TOP sein.. was ich nicht ganz
> nachvollziehen kann.

Da wird wohl noch was passieren, Du sieht es aber nicht mehr.
Deine Augen arbeiten logarithmisch. Im unteren Helligkeitsbereich siehst 
Du schnell irgendwelche Änderungen, im oberen nicht mehr.

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
Noch kein Account? Hier anmelden.