Razvalyaev
7e0063eee0
Все основные файлы подтянуты без изменений Изменены (только папка main_matlab): - заглушки для ненужных функций (main_matlab.c) - iq библиотека (IQmathLib_matlab.c) - библиотеки DSP281x
41 lines
1.1 KiB
C
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;
|
|
}
|
|
|
|
|