Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie serwem za pomocą ATmega

oficerJK 18 Paź 2014 22:15 717 3
  • #1 18 Paź 2014 22:15
    oficerJK
    Poziom 9  

    Witam,
    Próbuję sterować serwem za pomocą Atmega 32 po PWM
    Sygnał na OCR1A podaję z przetwornika ADC w skali od 0 do 1023 .
    OCR1A dla mojego serwa musi mieć wartość od min=400 max=1300 . Jak to sprytnie przeliczyć dla kodu w C AVR aby uniezależnić się od wpisanych min i max wychylenia serwa?

    Ja to realizuję w ten sposób ale niestety dzielenie przez 1023 bez reszty daje niedokładne wyliczenie dla OCR1A

    value = ADCW;
    v1= ((servo_max-servo_min)*11)/1023; (co daje w przybliżeniu 10)

    v2=(v1*(value))/11;

    OCR1A=servo_min+v2;
    Czy jest jakiś inny bardziej dokładny sposób tak aby faktycznie serwo osiągało wartości min i max zdefiniowane na początku programu?

    0 3
  • Pomocny post
    #2 18 Paź 2014 22:27
    michalko12
    Specjalista - Mikrokontrolery

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #3 18 Paź 2014 22:52
    dondu
    Moderator Mikrokontrolery Projektowanie

    A tutaj masz program testowy:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    który możesz skompilować w CManiaku: http://mikrokontrolery.blogspot.com/p/cmaniak-kompilator-jezyka-c-online.html

    by sprawdzić jak to ładnie przelicza podany przez Michalko12 sposób :)

    Sprawdź sobie wartości graniczne ADC=0 i ADC=1023.

    0
  • #4 19 Paź 2014 11:51
    oficerJK
    Poziom 9  

    Pięknie wszystko działa , problem był w zakresie zmiennych "UL"

    I wszystko śmiga.
    Pozdrawiam

    0