STM32的 PID和PWM墨水温度控制系统 控制方案: K_SENSOR热电偶作为温度传感器,50w电烙铁作为加温设备作为控制对象,预先设定一个温度值,微处理器为ARM公司 查看全部>>
void key()
{
static uchar keycnt;
static bit keyesc;
funcnt=0x00;
funval=0x00;
if(keydone) //上次按键任务已完成
{
if(K1==0&&K2&&K3&&K4) {funcnt++;funval=0x01;}
else if(K2==0&&K1&&K3&&K4) {funcnt++;funval=0x02;}
else if(K3==0&&K2&&K1&&K4) {funcnt++;funval=0x03;}
else if(K4==0&&K2&&K1&&K3) {funcnt++;funval=0x04;}
}
if(!funcnt)
{
shans=1;
keypre=0x00;
keyesc=0x00;task=0x00;keycnt=0x00;
}
else if(!keyesc)
{
if(funcnt>1) keyesc=1;
else if(funval!=keypre)
{
keypre=funval;
keycnt=0x00;
}
else
{
keycnt++;
switch(task)
{
case 0:
if(keycnt==N)
{
shans=1;
keyprocess=1;
if(K1==0||K4==0) keyesc=1;
else
{
task++;
keycnt=0;
}
}
break;
case 1:
if(keycnt==MaxRate)
{
shans=0;
keyprocess=1;
keycnt=0;
task++;
}
break;
case 2:
if(keycnt==MinRate)
{
shans=0;
keyprocess=1;
keycnt=0;
}
break;
}
}
}
}
//功能键处理
void key1()
{
if(!keymark)
{
pb=&buffer[0];
blink=0x01;
keymark=1;
shans=1;
}
else
{
pb++;
blink<<=1;
if(pb>=&buffer[4])
{
pb=&buffer[0];
blink=0x01;
}
}
}
////
void key2()
{
if(keymark)
{
pb+=1;
if(pb>=0)
pb=0x00;
}
}
////
void key3()
{
if(keymark)
{
if(pb<=0) pb=9;
else pb-=1;
}
}
void key4()
{
if(keymark)
{
blink=0x00;
keymark=0;
write_add(9,buffer[1]);
write_add(10,buffer[2]);
write_add(11,buffer[3]);
}
}
void keyXZ()
{
if(keyprocess)
{
keydone=0;
keyprocess=0;
switch(keypre)
{
case 0x01:key1();break;
case 0x02:key2();break;
case 0x03:key3();break;
case 0x04:key4();break;
}
keydone=1;
}
}
////
/
功能:定时器0中断服务程序
/
void timer0() interrupt 1
{
TH0=V_TH0;
TL0=V_TL0;
flash();
key();
}
那要看你计算出来的是什么了,如果直接是一个电流,那么直接用它来驱动加热炉就行,如果是一个误差值(理想值与真实值之差),那么就要先计算出要是电炉达到理想温度的电流值是多少,再用计算出的电流来驱动。希望能对你有帮助。
以上就是关于stm32单片机温度控制pid代码全部的内容,包括:stm32单片机温度控制pid代码、AT89S52单片机控制继电器用电炉子对水加热。通过DS18B20传感器采集温度,采用PID算法的键盘程序、单片机是怎么用PID控制算法实现对电加热等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)