logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PWM i Atmega8 [C] Jak zmienić wypełnienie?

SpooN 03 Kwi 2009 17:45 2740 7
REKLAMA
  • #1 6370455
    SpooN
    Poziom 11  
    Witam,
    MAm taki oto problem... zainicjowalem sobie PWM do sterowania silnikiem DC za pomoca L298.

    Mam problem bo jak podpialem do oscyloskopu to nie generuje mi sie prostokat (50% wypelnienie) ... Nie wiem na jakiej zasadzie powinienem dobrac parametr OCR1x ...

    Czy moglby ktos mi wyjasnic na jakiej zasadzie zmieniac moge wypelnienie ?

    // Incjalizacja PWM 
    	// PWM Phase Correct 8bit (WGM10 -> 1)
    	// Ustawienie OC1A i OC1B (COM1A1,COM1B1 -> 1)
    	TCCR1A = _BV(WGM13)|_BV(WGM11)|_BV(COM1A1)|_BV(COM1B1);
    	// Prescaler Zegara 1/8 (CS11 -> 1)
    	TCCR1B = _BV(CS11);
    	// ICR 100Hz (Wzor na freq w DOKUMENTACJI)
    	ICR1 = 5000;
    	OCR1A = 500;


    Z gory dziekuje za pomoc...
    Chyba ze powinienem zmienic sposob inicjowania PWM-a ?
    Chce poprostu generowac prostokat 50Hz lub 100Hz i zmieniac jego wypelnienie.
  • REKLAMA
  • Pomocny post
    #2 6370478
    zumek
    Poziom 39  
    SpooN napisał:
    ...Chyba ze powinienem zmienic sposob inicjowania PWM-a ?

    Powinieneś sprawdzić w dokumentacji, czy aby na pewno bit WGM13, znajduje się w rejestrze TCCR1A.
  • REKLAMA
  • #3 6372929
    SpooN
    Poziom 11  
    Ahh... No właśnie a kilka razy czytałem te rejestry w dokumentacji i nie zauważyłem.

    	// Incjalizacja PWM 
    	// PWM Phase Correct 8bit (WGM10 -> 1)
    	// Ustawienie OC1A i OC1B (COM1A1,COM1B1 -> 1)
    	TCCR1A = _BV(WGM11)|_BV(COM1A1)|_BV(COM1B1);
    	// Prescaler Zegara 1/8 (CS11 -> 1)
    	TCCR1B = _BV(WGM13)|_BV(CS11);
    	// ICR 50Hz (Wzor na freq w DOKUMENTACJI)
    	ICR1 = 5000;
    	OCR1A = 2500;


    Teraz zmieniłem. I działa poprawnie.
    Poniżej zdjęcie z oscyloskopu:
    PWM i Atmega8 [C] Jak zmienić wypełnienie?
    Podziałka X -> 2ms
    Zgodnie z oscyloskopem freq ~50Hz

    Teraz tylko jeszcze pytania z natury teoretycznej bo po prostu chciałbym sprawdzić czy poprawnie zrozumiałem zasadę sterowania PWM-em.

    Z godnie z moimi ustawieniami zainicjowałem PWM Phase Correct gdzie TOP-em jest ICR1. ICR1 to obliczona częstotliwość prostokąta.
    OCR-em steruje wypełnieniem ?
    Czyli gdy OCR1x = ICR1 / 2 to uzyskuje 50% ?
    W moim przypadku:
    OCR1A = 2500 -> 50 %
    OCR1A = 3750 -> 75 % ??

    A gdy zmieniłbym freq na 100Hz to
    ICR1 = 10000
    a OCR1A = 5000 -> 50% ??
  • #4 6372958
    crazy_phisic
    VIP Zasłużony dla elektroda
    Aż tak trudno to sprawdzić? Masz już podpięty oscyloskop :)
  • #5 6372981
    SpooN
    Poziom 11  
    OK zgadza sie z moimi przemyśleniami :)

    A to w takim razie co by się stało gdyby OCR > ICR ?
  • REKLAMA
  • #6 6372994
    _Robak_
    Poziom 33  
    Wypelnienie bedzie 100% ? ;)
  • REKLAMA
  • #7 6373100
    SpooN
    Poziom 11  
    A to przy okazji wyjasnie jeszcze jedną sprawe:

    Jaka jest zależność:
    Wypełnienie a Moment i Predkosc ?

    Bo zauważyłem ze przy małych wypełnieniach silnik przestaje się obracać... albo się obraca ale bardzo powoli ze słabym momentem.

    Na jakiej zasadzie powinienem dobrać takie parametry ? Chyba ze to nie ten dział...
  • #8 6373754
    janbernat
    Poziom 38  
    No bo tak jest.
    Jak silnikowi dajesz mało prądu(średnio) to nie ma siły się kręcić.
    Parametry musisz sprawdzić doświadczalnie i przed wpisaniem do rejestru licznika przeliczyć w programie.

    Dodano po 4 [minuty]:

    To nie jest aż tak proste.
    Należy uwzględnić indukcyjność uzwojeń i częstotliwość PWM.
REKLAMA