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.

PWM - pwm w okreslonym zakresie potencjometru jak ?

Kakalia 13 Paź 2012 15:49 1101 2
  • #1 13 Paź 2012 15:49
    Kakalia
    Poziom 18  

    Witam

    Mam taki przypadek ze potrzebuje sterować wypełnieniem PWM z zakresie od 0 do 100% ale tylko w okreslonym zakresie (750R to 1500R), dla układu np. 0-10K nie mam problemu, tutaj nie wiem jak ugdyzc temat raczej sod strony matematycznej.

    PWM i ADC w rozdzielczosci 9 bitów

    dla 750R - wartosc ADC=380
    dla 1500R - wartosc ADC=245

    robilem zawsze tak ze przpisywalem wartosc ADC do PWM i wszystko gralo, tylko jak teraz ugryzc to

    750R=100% PWM
    1500R = 0 % PWM

    Bardzo prosze o pomoc.

    0 2
  • #2 13 Paź 2012 16:28
    tehaceole

    Poziom 28  

    Po kolei:
    750R=100%
    1500R=0%
    Musisz to przeskalować, żeby znać krok regulacji. Dla uproszczenia przyjmijmy, że będziesz reugulować z krokiem 1%. Od większej wartości R odejmujesz mniejszą. Dostajesz 750. Teraz Dzielisz to przez ilość kroków regulacji: czyli 100 - otrzzymujesz 7,5. Teraz tak:
    Dla wartości <=750R utrzymujesz 100% wypełnienia, dla wartości 750R - twoja wartość - 1500R Robisz tak:
    100%-((twoja wartosc - 750R)* wyznaczony krok)
    Dla wartości powyżej 1500R utrzymujesz 0%.

    Oczywiście skalowania dokonałem dla wartości rezystancji, tymczasem Ty dysponować będziesz wartością napięcia zmierzonego przez ADC i to dla tych wartości musisz dokonać skalowania. Oczywiście liniowa wartość przyrostu zmierzonego napięcia musi się po tej operacji liniowo pokrywać z wartościami po przeskalowaniu.

    0
  • #3 13 Paź 2012 22:18
    MirekCz
    Poziom 35  

    Piece of cake :-)
    Znasz różnicę pomiędzy minimalną a maksymalną wartością ADC (380-245=135) i to jest Twój zakres.
    Teraz skoro PWM ma być 9bitów (512 wartości - 0..511) to w uproszczeniu masz na jedną wartość ADC 511/135 wartości PWM.
    Cały kod wygląda tak:

    Code:

    //odejmuje adcmin - zakres musi byc long, zebyśmy potem mogli PWM obliczyć
    long zakres = adcaktualny-adcmin;
    //sprawdzamy warunki brzegowe
    if (zakres<0) zakres = 0;
    if (zakres>135) zakres = 135;
    //przeliczamy adc na pwm
    zakres = zakres*511/(adcmax-adcmin);


    w tej chwili zakres będzie od 0..511 - czyli 9 bitowe PWM.
    adcmin i adcmax to stałe - podane przez ciebie wartości.

    0