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

Sterowanie 4 silnikami DC przez PWM na Atmega32 w C – konfiguracja rejestrów

NSCNT 24 Lip 2007 11:13 1743 1
  • #1 4109461
    NSCNT
    Poziom 11  
    Posty: 17
    Buduję sterownik 4 silników komutatorowych, każdy musi być sterowany niezależnie. W tym celu chcę wykorzystać wszystkie cztery kanały PWM dostępne w Atmedze 32. Każdy PWM steruje jednym tranzystorem mosfet (irf530). I tu zaczynają się schody, bo od trzech dni usiłuje zebrać jakieś szczątki informacji o tym jak zaimplementować tego PWM-a i jak na razie nie umiem tego zrobić, bo mam mętlik w głowie jeśli chodzi o ustawianie tych wszystkich rejestrów TCCR,TCNT,OCR itd. Wsparcie fachową literaturą też nie pomogło (Pawluczuk, Baranowski). Dodam tylko, że programuję w C i z poziomem asemblera nie miałem większej styczności do tej pory.
    1.Jak zrobić tego PWM-a? Najlepiej w C, bardzo będę wdzięczny jakby ktoś wyjaśnił to od początku do końca, bo skrawków informacji zebrałem sporo ale nie umiem tego przekuć w działający program. (Częstotliwość stała, zmienne wypełnienie).
    2.Czy warto dołączać do silnika równolegle kondensator? Skoro silnik pobiera do 5A prądu to powinien tam się znaleźć jakiś duży elektrolit, (i to i tak przy jakiejś dużej częstotliwości sterowania) żeby to w ogóle miało sens. W takim wypadku można narazić się chyba na prąd rzędu kilkudziesięciu A (przy początkowym ładowaniu kondensatora). W takim przypadku chyba dioda nie jest potrzebna bo prąd przez silnik płynie w sposób ciągły.
    3. Przełączanie prądu rzędu 5A (x 4 silniki) generować będzie zapewne spore zakłócenia w układzie. Co oprócz rezystorów podciągających można/trzeba zastosować żeby zapewnić stabilną pracę układu.
    Z góry dziękuję za każdą pomoc. Dodam żę najbardziej zależy mi odpowiedzi na pierwsze pytanie.
  • #2 6915602
    LARGO
    Poziom 11  
    Posty: 13
    Pomógł: 1
    Ja osobiście jak narazie pisze w Bascomie.
    W Bascomie wygląda to tak:

    Cytat:


    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 ' Konfiguracja Timera1 dla Pwm1a i Pwm1b
    Config Timer2 = Pwm , Async = Off , Pwm = On , Compare Pwm = Clear Down , Prescale = 1 ' Konfiguracja Timera2 dla Ocr2

    Config Pinb.3 = Output
    Config Timer0 = Pwm , Prescale = 1 , Compare Pwm = Clear Down ' Konfiguracja Timera0 dla Ocr0
    Set Tccr0.pwm0
    Set Tccr0.com00
    Set Tccr0.com01
    Set Tccr0.cs00


    Pwm1a = 125 'Przykładowa wartosc startowa
    Pwm1b = 125
    Ocr2 = 125
    Ocr0 = 125





    Powyższy rozwiązanie stosuję w Atmega16 i 32 jak do tej pory z pozytywnym skutkiem ;).
    Co do [C] to z tego co słyszałem rozwiązanie PWMów nie jest wcale trudne, jednak narazie pracuje na tym co już dosyć dobrze znam ;)

    Jeśli chodzi o zapewnienie bezpieczeństwa mikrokontrolerowi można by pomyśleć o optoizolacji.



    Moderowany przez crazy_phisic:

    Archeologia nagradzana jest ostrzeżeniem, proszę o tym pamiętać.

REKLAMA