eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAlgorytm regulatora PIDAlgorytm regulatora PID
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not
    -for-mail
    From: "roxy" <k...@o...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Algorytm regulatora PID
    Date: Mon, 10 May 2010 23:29:11 +0200
    Organization: http://onet.pl
    Lines: 72
    Message-ID: <hs9tr9$m81$1@news.onet.pl>
    NNTP-Posting-Host: 91.214.36.65
    X-Trace: news.onet.pl 1273526953 22785 91.214.36.65 (10 May 2010 21:29:13 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Mon, 10 May 2010 21:29:13 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5843
    X-RFC2646: Format=Flowed; Original
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
    X-EsetScannerBuild: 7097
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:588241
    [ ukryj nagłówki ]

    Znalazlem na stronie Atmel'a fragment programu realizujacy regulator PID dla
    uC.
    Czy w linii 93 nie ma aby bledu?
    Wedlug mnie powinna ona wygladac raczej tak

    d_term = pid_st->D_Factor * (processValue - pid_st->lastProcessValue);

    czy ktos moze potwierdzic poprawnosc ktores z wersji?




    00060 {
    00061 int16_t error, p_term, d_term;
    00062 int32_t i_term, ret, temp;
    00063
    00064 error = setPoint - processValue;
    00065
    00066 // Calculate Pterm and limit error overflow
    00067 if (error > pid_st->maxError){
    00068 p_term = MAX_INT;
    00069 }
    00070 else if (error < -pid_st->maxError){
    00071 p_term = -MAX_INT;
    00072 }
    00073 else{
    00074 p_term = pid_st->P_Factor * error;
    00075 }
    00076
    00077 // Calculate Iterm and limit integral runaway
    00078 temp = pid_st->sumError + error;
    00079 if(temp > pid_st->maxSumError){
    00080 i_term = MAX_I_TERM;
    00081 pid_st->sumError = pid_st->maxSumError;
    00082 }
    00083 else if(temp < -pid_st->maxSumError){
    00084 i_term = -MAX_I_TERM;
    00085 pid_st->sumError = -pid_st->maxSumError;
    00086 }
    00087 else{
    00088 pid_st->sumError = temp;
    00089 i_term = pid_st->I_Factor * pid_st->sumError;
    00090 }
    00091
    00092 // Calculate Dterm
    00093 d_term = pid_st->D_Factor * (pid_st->lastProcessValue -
    processValue);
    00094
    00095 pid_st->lastProcessValue = processValue;
    00096
    00097 ret = (p_term + i_term + d_term) / SCALING_FACTOR;
    00098 if(ret > MAX_INT){
    00099 ret = MAX_INT;
    00100 }
    00101 else if(ret < -MAX_INT){
    00102 ret = -MAX_INT;
    00103 }
    00104
    00105 return((int16_t)ret);
    00106 }



    __________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow
    5103 (20100510) __________

    Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

    http://www.eset.pl lub http://www.eset.com




Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 10.05.10 22:32 J.F.
  • 11.05.10 03:45 SM

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: