matlab_23550/Inu/Src/N12_Libs/not_use/pi_adaptive.c
Razvalyaev 7e0063eee0 #3 Скомпилилось, но пока ничего не вызывается
Все основные файлы подтянуты без изменений

Изменены (только папка main_matlab):
- заглушки для ненужных функций (main_matlab.c)
- iq библиотека (IQmathLib_matlab.c)
- библиотеки DSP281x
2025-01-13 11:09:58 +03:00

41 lines
1.1 KiB
C

#include <stdio.h>
// Ïàðàìåòðû ðåãóëÿòîðà
double kp = 0.5; // Êîýôôèöèåíò ïðîïîðöèîíàëüíîé ñîñòàâëÿþùåé
double ki = 0.2; // Êîýôôèöèåíò èíòåãðàëüíîé ñîñòàâëÿþùåé
double e_prev = 0; // Ïðåäûäóùåå çíà÷åíèå îøèáêè
double i_term = 0; // Èíòåãðàëüíàÿ ñîñòàâëÿþùàÿ
// Ôóíêöèÿ, ðàññ÷èòûâàþùàÿ óïðàâëÿþùåå âîçäåéñòâèå
double calculate_control_action(double setpoint, double process_variable)
{
double error = setpoint - process_variable; // Âû÷èñëÿåì îøèáêó
// Âû÷èñëÿåì èíòåãðàëüíóþ ñîñòàâëÿþùóþ
i_term += ki * error;
// Àäàïòèâíûé êîýôôèöèåíò ïðîïîðöèîíàëüíîé ñîñòàâëÿþùåé
double adaptive_kp = kp / (1 + (i_term * i_term));
// Âû÷èñëÿåì óïðàâëÿþùåå âîçäåéñòâèå
double control_action = adaptive_kp * error + i_term;
// Ñîõðàíÿåì ïðåäûäóùåå çíà÷åíèå îøèáêè
e_prev = error;
return control_action;
}
int main()
{
double setpoint = 25.0; // Çàäàííîå çíà÷åíèå
double process_variable = 20.0; // Èçìåðåííîå çíà÷åíèå
// Ïå÷àòàåì óïðàâëÿþùåå âîçäåéñòâèå
printf("Control action: %f\n", calculate_control_action(setpoint, process_variable));
return 0;
}