基于单片机的直流电机转速pid控制系统设计_毕业设计论文(编辑修改稿)内容摘要:
0x66,0x6d,0x7d,0x07, 0x7f,0x6f }。 uchar code chose[]={0x01,0x02,0x04,0x08,0x10,0x20}。 uint shu[6]={1,2,3,4,5,6}。 uchar q=0,i=0,m=0,n=0。 uint count,miaoshu,sv,k=0,k2=0,sv1,sv2。 //定义计数值,实际温度值,设定的温度值 uchar sec,tt,flag,flag1。 int rk,yk,uk,uk_1=0,ek,ek_1=0,ek_2=0。 //PID计算参数 signed char T=20,Kp=30,Td=8,Ti=100,q0,q1,q2。 //PID 参数其值经反复调试得来 uchar data buf[4]={0,1,1,1}。 //字型显示中间变量 /******************************************************************** 21 **************/ 延时子程序用来产生 1ms的延时,用于在程序中的等待 /**********************************************************************************/ //延时 1ms 子程序 void delay(uchar z) { uchar x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } /**********************************************************************************/ 显示子程序用来在数码管中显示电机的设定转速或计算转速以及实际转速 /**********************************************************************************/ //显示子程序 void display(uint a,uint b) { char i。 shu[0]=a/100。 shu[1]=a%100/10。 shu[2]=a%10。 shu[3]=b/100。 shu[4]=b%100/10。 shu[5]=b%10。 for(i=0。 i6。 i++) { P2=chose[i]。 P0=table[shu[i]]。 delay(5)。 } } /**********************************************************************************/ 定时器中断子程序用来产生 秒的中断,以此来测量电机的转速 22 /**********************************************************************************/ // 定时器中断 0子程序 void t0(void) interrupt 1 using 0 //定时 T0 中断服务函数 { tt++。 //每过 250ust tt 加一 if(tt==40) //计满 40 次( 1/100 秒)时 { tt=0。 //重新再计 sec++。 if(sec==10) //定时 秒,在从零开始计时 { sec=0。 TH0=0x06。 //对 TH0 TL0 赋值 TL0=0x06。 miaoshu=count。 count=0。 } } } /**********************************************************************************/ 用来记录中断数,从而得到转速 /**********************************************************************************/ void sdf(void) interrupt 2 using 0 //外部中断服务函数 { count=count+1。 } /**********************************************************************************/ 接收来自另一个单片机的中断并放入一个数组中以便在显示函数中方便调用此数据,其中加了 容错程序,通过一个特殊字符’ 11’ ,来区别哪一个是三位数的百位,十位,个位。 /**********************************************************************************/ 23 void jieshou()//接收子程序 {uchar g。 if(RI==1) {g=SBUF。 if(g==11) m=0。 buf[m]=g。 m++。 if(m==4) m=0。 RI=0。 //REN=1。 } } /**********************************************************************************/ 检测按键值计算对应的数值 /**********************************************************************************/ //左移一位 void yishu(uchar num) { uchar bai,shi,ge。 bai=sv1%100/10。 shi=sv1%10。 ge=num。 sv1=bai*100+shi*10+ge。 k2=sv1。 //xinjia } /**********************************************************************************/ 检测对应的按键 /**********************************************************************************/ //按键子程序 void key() { uchar i,temp,lie,hang,shu。 for(i=0。 i4。 i++) //求 出按键值 { P1=~chose[i]。 24 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) { hang=i。 if(temp==0xe0) lie=1。 else if(temp==0xd0) lie=2。 else if(temp==0xb0) lie=3。 else if(temp==0x70) lie=4。 break。 } } shu=hang*4+lie。 //数为对应的按键 switch(shu) { case 1: if(!flag) yishu(0)。 break。 case 2: if(!flag) yishu(1)。 break。 case 3: if(!flag) yishu(2)。 break。 case 4: if(!flag) yishu(3)。 break。 case 5: if(!flag) yishu(4)。 break。 case 6: if(!flag) yishu(5)。 break。 case 7: if(!flag) yishu(6)。 break。 case 8: if(!flag) yishu(7)。 break。 case 9: if(!flag) yishu(8)。 break。 case 10: if(!flag) yishu(9)。 break。 case 11: flag++。 /*flag1++*/。 break。 case 12: sv1=0。 miaoshu=0。 flag=0。 flag1=0。 break。 case 13: flag1++。 break。 25 default: break。 } while(temp!=0xf0) //放键检测 { temp=P1。 temp=tempamp。 0xf0。 for(i=0。 i10。 i++) display(sv1,miaoshu)。 } } //按键检测程序 void keyscan() { uchar temp。 P1=0xf0。 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) { delay(5)。 //消除抖动 P1=0xf0。 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) key()。 } } /**********************************************************************************/ 进行 pid 的计算,用来在后面的程序中进行电机的闭环控制 /**********************************************************************************/ void pid(void) //PID 计算输出量 {sv2=100*buf[1]+10*buf[2]+buf[3]。 if(p26==0)//低电平时正常显示设定值 sv=sv1。 26 if(p26=。基于单片机的直流电机转速pid控制系统设计_毕业设计论文(编辑修改稿)
相关推荐
数模转换是整个系统的纽带部分,它连接着单片机控制电路和输出稳压运放电路,它可以将数字信号转换为模拟信号,数字信号由单片机 口输出。 电路如图 所示: 常熟理工学院毕业设计(论文) 8 图 DAC电气连接图 显示 模块 在显示 电路设计初期犹豫是选择 LCD1602 液晶还是数码管做为本设计的显示模块。 因此也在网上寻找了许多关于液晶显示和数码管显示的各个优点。 数码管显示内容单一
33%。 2. 磁悬浮的发展前景问题 由于磁悬浮系统以电磁力完成悬浮、向导和驱动功能的,断电后磁悬浮的安全保障措施,尤其是列车停电后的制动问题仍然是要解决的问题。 其高速稳定性和可靠性还需要很长时间的运行考验。 常导磁悬浮技术的悬浮高度降低,因此对线路的平 整度、路基下沉量级道岔结构方面的要求较超导技术更高。 超导磁悬浮技术由于涡流效应悬浮能耗较常导轨技术更大,冷却系统重
8:数字量输出端, D1 为高位。 OE: OE 为输出允许端,高电平能使 D1D8引脚上输出转换后的数字量。 REF+、 REF:参考电压输入量,给电阻阶梯网络供给标准电压。 Vcc、 GND: Vcc 为主电源输入端, GND 为接地端,一般 REF+与 Vcc 连接在一起, REF与 GND 连接在一起 . CLK:时钟输入端。 ADC0808 的内部结构及工作流程 ADC0808 由
到红外传感器可以检测的范围内时,红外传感器就输出一个变化的信号,通过单片机读取后就知道衣架现在运动到什么位置了。 实物图如图 所示。 图 红外检测传 感器 如图 所示,三极管 Q 采用 9013 小功率三极管,单片机通过 IO 口驱动三极管的 b极,通过 1K 电阻进行限流,防止电流过大烧毁三极管和单片机。 红外接收管的工作功率为 75mW,开启电压 ,为了实现接收,采用如图 所示,
m { el s e 13 3. 单片机模块 由 GPS 模块接收的数据接收到微控制器的数据,分析,处理,将处理后的数据, 由液晶显示 器显示。 其流程图如图 12所示: } RE V _ N O。 0。 r ev _ s to p 0。 g p s _ f lag }。 G P S _ I n it( ) 20。 er r o r _ n u m RMC_ N O。 { 14
其低价质优的优势,占据一定的市场分额。 此外还有 MOTOROLA公司的产品,日本几大公司的专用单片机。 在一定的时期内,这种情形将得以 延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道 路。 单片机的硬件结构及特点 美国 Intel 公司 1980 年推出了 MCS51 系列高档 8 位单片机。 提高了芯片的集成度,性能上大为提高,增加了多种片内硬件功能