pid温度控制c语言程序,温度控制的PID算法的C语言程序 - 图文

/*********************************************************** 写一位数据子程序

***********************************************************/ void write_bit(unsigned char bitval) {

EA=0;

DQ=0; /*拉低DQ以开始一个写时序*/ if(bitval==1) { _nop_();

DQ=1; /*如要写1,则将总线置高*/ }

delay(5); /*延时90us供DA18B20采样*/ DQ=1; /*释放DQ总线*/ _nop_(); _nop_(); EA=1; }

/*********************************************************** 写一字节数据子程序

***********************************************************/ void write_byte(unsigned char val) {

unsigned char i; unsigned char temp; EA=0; /*关中断*/ TR0=0;

for(i=0;i<8;i++) /*写一字节数据,一次写一位*/ {

temp=val>>i; /*移位操作,将本次要写的位移到最低位*/ temp=temp&1;

write_bit(temp); /*向总线写该位*/ }

delay(7); /*延时120us后*/ // TR0=1; EA=1; /*开中断*/ }

/*********************************************************** 读一位数据子程序

***********************************************************/ unsigned char read_bit() {

unsigned char i,value_bit; EA=0;

DQ=0; /*拉低DQ,开始读时序*/ _nop_(); _nop_();

DQ=1; /*释放总线*/ for(i=0;i<2;i++){} value_bit=DQ; EA=1;

return(value_bit); }

/*********************************************************** 读一字节数据子程序

***********************************************************/ unsigned char read_byte() {

unsigned char i,value=0; EA=0; for(i=0;i<8;i++) {

if(read_bit()) /*读一字节数据,一个时序中读一次,并作移位处理*/ value|=0x01<

delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/ } EA=1; return(value); }

/*********************************************************** 复位子程序

***********************************************************/ unsigned char reset() {

unsigned char presence; EA=0;

DQ=0; /*拉低DQ总线开始复位*/ delay(30); /*保持低电平480us*/ DQ=1; /*释放总线*/

delay(3);

presence=DQ; /*获取应答信号*/

delay(28); /*延时以完成整个时序*/

EA=1;

return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/ }

/*********************************************************** 获取温度子程序

***********************************************************/ void get_temper() {

unsigned char i,j; do

{

i=reset(); /*复位*/

}while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设备定位命令*/ write_byte(i);

i=0x44; /*发送开始转换命令*/ write_byte(i); delay(180); /*延时*/ do

{

i=reset(); /*复位*/ }while(i!=0); i=0xcc; /*设备定位*/ write_byte(i);

i=0xbe; /*读出缓冲区内容*/ write_byte(i); j=read_byte(); i=read_byte(); i=(i<<4)&0x7f;

s=(unsigned int)(j&0x0f); s=(s*100)/16;

j=j>>4;

temper=i|j; /*获取的温度放在temper中*/ }

/*==================================================================================================== Initialize PID Structure

=====================================================================================================*/ void PIDInit (struct PID *pp) {

memset ( pp,0,sizeof(struct PID)); }

/*==================================================================================================== PID计算部分

=====================================================================================================*/

unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) {

unsigned int dError,Error;

Error = pp->SetPoint - NextPoint; // 偏差 pp->SumError += Error; // 积分

dError = pp->LastError - pp->PrevError; // 当前微分 pp->PrevError = pp->LastError; pp->LastError = Error;

return (pp->Proportion * Error//比例 + pp->Integral * pp->SumError //积分项 + pp->Derivative * dError); // 微分项 }

/*********************************************************** 温度比较处理子程序

***********************************************************/ compare_temper() {

unsigned char i; if(set_temper>temper) {

if(set_temper-temper>1) {

high_time=100; low_time=0; } else {

for(i=0;i<10;i++) { get_temper(); rin = s; // Read Input

rout = PIDCalc ( &spid,rin ); // Perform PID Interation }

if (high_time<=100)

high_time=(unsigned char)(rout/800); else

以上是由77cn范文大全为大家整理的温度控制的PID算法的C语言程序 - 图文的相关范文,本文关键词为温度控制,PID,算法,语言程序,图文,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。

温度控制的PID算法的C语言程序 - 图文.doc

免费范文网为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。

已有11人下载

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库温度控制的PID算法的C语言程序 - 图文在线全文阅读。

本文来自:免费范文网(www.77cn.com.cn) 转载请注明出处!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值