首页资源分类工业控制电机 > pid算法电机转速

pid算法电机转速

已有 460221个资源

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人消费电子

上传者其他资源

工业控制热门资源

本周本月全部

文档信息举报收藏

标    签: PID电机

分    享:

文档简介

pid算法控制电机转速

文档预览

#include #include #define uint unsigned int #define uchar unsigned char uchar code table[]="0123456789"; sbit k=P2^4; //k为检测高电平 sbit dula=P2^6; sbit wela=P2^7; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit or_out=P3^1; //输出引脚 uint m=0,num,num2,num1,a; //m为电机的转速 //num为检测高电平的次数 int n,t,j; uchar bai=0,shi=0,ge=0; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } /*显示子函数******************************/ void display(uchar bai,uchar shi,uchar ge) { write_data(table[bai]); write_data(table[shi]); write_data(table[ge]); write_com(0x80+0x00); } /*初始化子程序************************************/ void init() { or_out=0;//初始化I/O将其清零 TMOD=0x11;//设置两个定时器0为工作方式1 TL0=(65536-25000)/256; TH0=(65536-25000)%256; TL1=(65536-50000)/256; TH1=(65536-50000)%256; ET0=1; ET1=1; EA=1; TR0=1; TR1=0; dula=0; wela=0; num=0; lcden=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); write_com(0x80+0x00); } /******************************************************* pid计算部分 *******************************************************/ PIDCalc(uint num2) { float dError=0,Error=0; NextPoint=num2; Error =SetPoint-NextPoint; /* 计算当前偏差 */ SumError +=Error; /* 积分《总偏差》*/ dError =LastError-PrevError; /* 当前微分 */ PrevError =LastError; LastError = Error; /* 三个误差值移位 */ out=Proportion * Error + Integral * SumError +Derivative *dError; // if(out<-35535) out=-35535 ; // if(out>35535) out=35535; return(out); } void pidinit() { Proportion=8.46; Integral=0.12; Derivative=0; SumError=0; PrevError=0; LastError=0; SetPoint=10; //设定值为70转每分 } /*主程序**************************************************/ void main() { init(); pidinit(); while(1) { if(k==1) { num++; num1++; while(k); } if(n==60) { /* p=n*50.0/1000; q=p*(20.0/num); m=(1/q)*60; //计算电机的转速 bai=m/100; shi=m%100/10; ge=m%10; num=0; n=0; */ // p=num*0.1; // q=p/20; // m=q*60; //定时为3秒时num即为每分钟的转速 // if((num>=30)&&(num<40)) // num=SetPoint; bai=num%1000/100; shi=num%100/10; ge=num%10; n=0; num=0; display(bai,shi,ge); } } } void timer0() interrupt 1 { TL0=(65536-50000)/256; TH0=(65536-50000)%256; n++; j++; or_out=1; TR1=1; if(j==1) { j=0; num2=num1*60; num1=0; t=PIDCalc(num2); } } void timer1() interrupt 3 { TL1=(65536-10000-t)/256; TH1=(65536-10000-t)%256; or_out=0; TR1=0; }

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。