И металл тоже разный, есть магнитится а есть нержавейка. Тут тоже на любителя
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
Код: Выделить всё
ваща
.....
.....
хренограмаКод: Выделить всё
#define ERROR_MAX 2000 // Ограничение ошибки сверху
#define ERROR_MIN -2000 // Ограничение ошибки снизу
#define INTEGR_MAX 200 // Ограничение интегратора вверх
#define INTEGR_MIN -200 // Ограничение интегратора вниз
(...)
// Здесь thermo_in и thermo_fb увязаны между собой по масштабу и смещению.
// Одна единица соответствует приблизительно 0.155 градуса.
error=(int16_t)thermo_in-(int16_t)thermo_fb;
if(error<ERROR_MIN) error=ERROR_MIN;
if(error>ERROR_MAX) error=ERROR_MAX;
// Начальное значение pwm (50%)
pwm_out=0;
// Пропорциональная часть регулятора температуры
prop=(int16_t)((int32_t)error*kp_reg/1000);
// Инкремент счётчиков времени и интегральная часть регулятора температуры
t++;
if(t>=200)
{
integr+=(int16_t)((int32_t)error*ki_reg/10000);
if(integr>INTEGR_MAX) integr=INTEGR_MAX;
if(integr<INTEGR_MIN) integr=INTEGR_MIN;
t=0;
}
pwm_out+=prop;
pwm_out+=integr;
// Ограничение переменной pwm и отработка ШИМ
if(pwm_out<-100) pwm_out=-100;
if(pwm_out>100) pwm_out=100;
if(t<(pwm_out+100)) {outpwm_1();}
else {outpwm_0();}
Код: Выделить всё
#define ERROR_MAX 2000 // Ограничение ошибки сверху
#define ERROR_MIN -2000 // Ограничение ошибки снизу
#define INTEGR_MAX 200 // Ограничение интегратора вверх
#define INTEGR_MIN -200 // Ограничение интегратора вниз
(...)
// Здесь thermo_in и thermo_fb увязаны между собой по масштабу и смещению.
// Одна единица соответствует приблизительно 0.155 градуса.
error=(int16_t)thermo_in-(int16_t)thermo_fb;
if(error<ERROR_MIN) error=ERROR_MIN;
if(error>ERROR_MAX) error=ERROR_MAX;
// Начальное значение pwm (50%)
pwm_out=0;
// Пропорциональная часть регулятора температуры
prop=(int16_t)((int32_t)error*kp_reg/1000);
// Инкремент счётчиков времени и интегральная часть регулятора температуры
t++;
if(t>=200)
{
integr+=(int16_t)((int32_t)error*ki_reg/10000);
if(integr>INTEGR_MAX) integr=INTEGR_MAX;
if(integr<INTEGR_MIN) integr=INTEGR_MIN;
t=0;
}
pwm_out+=prop;
pwm_out+=integr;
// Ограничение переменной pwm и отработка ШИМ
if(pwm_out<-100) pwm_out=-100;
if(pwm_out>100) pwm_out=100;
if(t<(pwm_out+100)) {outpwm_1();}
else {outpwm_0();}
Код: Выделить всё
if(iter==1){
if(run>1){
if(run>70){
OCR1A=250;
}
run--;
OCR1A=OCR1A-1;
} else {
if(freqtaho==1) {
pval=OCR1A;
}
if(freqtaho>1) {
if(OCR1A>0x00){
error=pval-OCR1A;
if(error<10){
OCR1A=OCR1A-error;
}
OCR1A=OCR1A-1;
}
}
if(freqtaho<1) {
if(OCR1A<0xff){
OCR1A=OCR1A+1;
error=OCR1A-pval;
if(error<10){
OCR1A=OCR1A+error;
}
OCR1A=OCR1A+1;
}
}
}
iter=0;
}