имеется код с ПИД контролем, и ФИМ упралением, только вот неправильно както работает. расчет ПИД (взят тут на форуме с проекта HASS, за что ему спасибо):
Код: Выделить всё
read_adc(3); //Считываем данные АЦП нагревателя
TempADC=(20+(ADCW/2)); //Макс значению 1024 соответствует 512 градусов + 22
Error=TempSET-TempADC;
if ((MaxPower>Power)&(Power>MinPower)) Integral=Integral+Error; //Чтоб ошибка не увеличивалась
P=(long)Kp*Error;
P=P/10;
In=(long)Ki*Integral;
In=In/10;
D=(long)Kd*(Error-pre_err);
D=D/100;
TempPower=P+In+D;
if (TempPower>MaxPower) Power=MaxPower; //Задаем предел мощности
if (TempPower<MinPower) Power=MinPower; //
if ((MaxPower>TempPower)&(TempPower>MinPower)) Power=(int)TempPower; //Если предел не достигнут
pr=Power;
этот расчет запускается на каждом периоде, в итоге имеем плавное управление, только вот нагреватели аж свистят. Если посмотреть на китайскую термовоздушку, то она не овсем плавно регулирует а заметными миганиями, тоже самое и на оборудовании "термопро". как сделать также?