Өнеркәсіптік қазандықты автоматтандыру Translated from English to Kazakh


PI температурасын басқаруға арналған C коды



бет34/35
Дата29.07.2023
өлшемі2,11 Mb.
#179655
1   ...   27   28   29   30   31   32   33   34   35
Байланысты:
Boiler Automation using microcontroller.en.kk

PI температурасын басқаруға арналған C коды


өзгермелі қолтаңбасыз int time_now = 0;
float AD_LSB, DA_LSB, wk,Kp, T, Ti, b, pk, pk_1, ek, sk, yk, y_high, y_low, Y1, Y2; unsigned char uk;
/* Бұл функция микроконтроллердің AN0 арнасынан аналогтық деректерді алуға болатындай A/D түрлендіргішін инициализациялайды */
void Initialize_AD(жарамсыз)
{
ADCON1 = 0x8E; /* +5V сілтемесі үшін AN0 конфигурациялау */ ADCON0 = 0x41; /* A/D түрлендіргіш сағатын таңдау */
}
/* Бұл функция A/D түрлендіргішінен деректерді оқиды және оны yk айнымалысында сақтайды */
void Read_AD_Input(жарамсыз)
{
істеу
{
ADCON0 = 0x45; /* A/D түрлендіруді бастау */
while((ADCON0 & 4) != 0); /* Түрлендіру аяқталғанша күтіңіз */ y_high=ADRESH; /* Түрлендірілген деректердің жоғары 2 байты */ y_low=ADRESL; /* Түрлендірілген деректердің төмен байты */ yk=256,0*y_high+y_low; /* yk түрлендірілген деректер */ yk=yk*AD_LSB; /* Сенсор шығысы мВ */
}
while(1);
}
/* Қызмет көрсету тәртібін үзу. Бағдарлама мұнда әрбір 10 мс сайын секіреді. */ жарамсыз есептеу_пи(жарамсыз)
{
Read_AD_Input(); /* A/D кірісін оқу */ ek = sk-yk; /* Қате мерзімін есептеңіз */
pk = b*ek + pk_1; wk = Kp*ek;
yk = wk+pk; /* шығысты есептеу */ yk = yk*DA_LSB;
if(yk>255) uk=255;
басқа
uk=(қол қойылмағанchar)yk; PORTB = Ұлыбритания;
//DA Write = 0; /* D/A түрлендіргішіне жазу */
//DA Write = 1; pk_1 = pk;
}
/* Негізгі бағдарлама. Негізгі бағдарлама айнымалы мәндерді, A/D түрлендіргішін, D/A түрлендіргішін т.б. инициализациялайды, содан кейін таймер үзілістерін шексіз циклде күтеді.
100 мс сайын орын алуы үшін */
void main()
{ БАСТАУ:
Kp = 279,0; T = 0,1; Ti = 6,6;
b = Kp*T/Ti; pk=0,0;
pk_1=0,0;
AD_LSB = 5000,0/1024,0; DA_LSB = 256,0/5000,0; TRISA=1;
TRISB=0; /* PORTB шығарылады */ TRISC=1;
if(PORTC.F3==1) sk=950; if(PORTC.F4==1) sk=850; if(PORTC.F5==1) sk=750;
Initialize_AD(); Read_AD_Input(жарамсыз); есептеу_пи; delay_ms(100);
START өту;
}


  1. Достарыңызбен бөлісу:
1   ...   27   28   29   30   31   32   33   34   35




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет