eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaATmega, jak zaprogramować narastanie wartości sygnału, bez użycia operacji zmiennoprzecinkowych?Re: ATmega, jak zaprogramować narastanie wartości sygnału, bez użycia operacji zmiennoprzecinkowych?
  • Data: 2012-10-09 12:50:29
    Temat: Re: ATmega, jak zaprogramować narastanie wartości sygnału, bez użycia operacji zmiennoprzecinkowych?
    Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 09.10.2012 12:19, Robbo wrote:
    > Czas będzie zawsze liczony od zera. Prąd początkowy także będzie
    > narastać od zera.
    > Więc jeśli I(S0) = 0, S0 = 0. Zatem powyższe formuły można uprościć do:
    > I(s) = I(Se) * (s/Se)
    > I(s) = I(Se)/Se*s
    Dokładnie. Ale tak długo jak zmiany są liniowe to wystarcza raz policzyć
    iloraz różnicowy.

    >
    >> Przekształcasz to sobie na:
    >> I(t)=I(T0)+t*dI
    >> I(t)=I(t-1)+dI
    >>
    >> Raz wyliczasz iloraz różnicowy dI, potem masz w każdym cyklu jedno
    >> dodawanie i jeden shift.
    >
    > Tu bym prosił o wyjaśnienie. Mało spałem i chyba nie do końca myślę,
    > dlatego proszę o wybaczenie.
    >
    > Czy dI będzie wartością zmiennoprzecinkową?
    Stałoprzecinkową, np. o 16 bitach części całkowitej i 16 po przecinku:

    uint16_t I=0;
    uint32_t I_accu=0;
    uint32_t dI;
    time_t last_time=0;

    void new_setting(/**/){
    dI=(I_target<<16)/time_slices;
    }
    void calc(time_t t){
    I_accu+=dI*(t-last_time);
    I=I_accu>>16;
    last_time=t;
    }

    --
    Pozdrawiam
    Michoo

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: