请教单片机PWM控制加热器用增量式PID,三个参数的选择

请教单片机PWM控制加热器用增量式PID,三个参数的选择,第1张

uint ZKB //定义占空比初始值

float zkc

int kkk

uint kp=4 //定团世义PID初始值

float ki=0.17

uint kd=16

uint uc=5000

float ek

float u_k

float uk

float uk1=0

float ek1=0

float ek2=0

uchar click=0//中断次数计数器变量

uint zhouqi=0

void deal(uint t)//加热控制函数

{ TR0=1

if(zhouqi==1) //进行PID算法,求新的占空比

{

zhouqi=0

ek=wendu_c-t//计算偏差

u_k=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2) //计算增量

uk=uk1+u_k

zkc=100*uk/uc

if (zkc>=95)

zkc=95

kkk=(int)zkc

}

if(t>=wendu_c) //大于设定值

shuchu=0 //输出高电平

else //小于设定值

{

ZKB=(int)zkc //调整新的脉宽拍斗定塌贺肢时,即新的占空比

if (click<=ZKB)// 判断脉宽定时周期是否到?当小于占空比值时输出高电平,高于时是低电平,从而实现占空比的调整

shuchu=1

else

shuchu=0

}

}

有PWM功能的单片机入STC12系列塌迹单片机,直接袜改给专用寄存器赋值开启相应定时器就可团好并以了。普通单单片机,PWM需要用自己来调配。比如:

#include<reg51.h>

unsigned char pwhh,pwhl,pwlh,pwll

bit flag

sbit pwm=P1^0

void t0isr() interrupt 1

{

if(flag)

{

TH0=pwhh

TL0=pwhl

}

else

{

TH0=pwlh

TL0=pwll

}

pwm=~pwm

}

main()

{

TMOD=0x01

pwhh=(65536-1000)/256

pwhl=(65536-1000)%256

pwlh=(65536-500)/256

pwll=(65536-500)%256

TH0=pwhh

L0=pwhl

TR0=1

ET0=1

EA=1

while(1)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12252156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存