课程设计(论文)-基于单片机的转速控制系统设计.doc_第1页
课程设计(论文)-基于单片机的转速控制系统设计.doc_第2页
课程设计(论文)-基于单片机的转速控制系统设计.doc_第3页
课程设计(论文)-基于单片机的转速控制系统设计.doc_第4页
课程设计(论文)-基于单片机的转速控制系统设计.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆科技学院课程设计报告 院(系):电气与信息工程学院 专业班级: 测控08 学生姓名: 学 号: 设计地点(单位)_i512_ _ _设计题目:_ 基于单片机的转速控制系统设计 _ 完成日期: 2011 年 6 月 19日 指导教师评语: _ _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _ 课程设计重庆科技学院课程设计任务书设计题目:基于单片机的转速控制系统设计学生姓名课程名称智能义器义表设计与调试专业班级测控普08地 点实验楼i512起止时间2011.6.7至2011.6.17设计内容及要求要求设计的转速控制系统完成以下功能:1.基本功能按键设定并显示转速,实时显示实际转速按键控制电机起停、正反转pwm转速闭环控制。2. 扩展功能 实现与pc机的通讯:将转速的设定值和实测值发送到pc机显示,pc机可以设定速度,发送到单片机设计参数1.转速调节范围:1500转/分-3000转/分2.测速误差10%进度要求1. 布置任务、方案设计,硬件设计(1天)2. 画电路图(1天)3. 软件设计,画流程图(1天)4. 程序设计和调试(6天)5. 设计验收、撰写报告(1天)详见进度安排表参考资料1.程德福.智能义器. 机械工业出版社. 2009.92.胡文金.单片机系统实训教程.重庆:重庆大学出版社,20053.林金阳.基于mc51单片机的直流电机pwm调速系统.长春工程学院学报(自然科学版)2009年第10卷第3期其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任: 指导教师:钟秉翔、柏俊杰进度安排表:时间内容地点指导教师6.7上午布置设计任务及要求,查资料,准备方案i512、图书馆钟秉翔下午总体方案设计,硬件设计i512钟秉翔、柏俊杰6.8全天画硬件电路原理图i512柏俊杰、钟秉翔6.9全天显示、按键程序设计及调试i512钟秉翔、柏俊杰6.19全天电机pwm控制程序设计(1组)波形产生设计及调试(2组)温度采集设计及调试(3组)i512柏俊杰、钟秉翔6.13全天转速检测程序设计及调试(1组)波形产生设计及调试(2组)温度采集设计及调试(3组)i512钟秉翔、柏俊杰6.14全天控制算法设计及调试(1、3组)调频程序设计及调试(2组)、i512柏俊杰、钟秉翔6.15全天控制算法设计及调试(1、3组)调幅程序设计及调试(2组)i512柏俊杰、钟秉翔6.16全天综合调试程序,讲解设计报告要求i512钟秉翔、柏俊杰6.17上午设计验收i512钟秉翔、柏俊杰下午完成设计报告i512钟秉翔、柏俊杰课程设计11目录摘要ii1系统方案设计11.1硬件方案设计21.2软件方案设计22硬件电路设计32.1单片机最小系统32.2按键接口电路42.3电机转速采集控制电路42.4显示电路52.5 led指示灯电路63软件设计63.1主控模块程序63.2初始化程序73.2.1 定时器中断83.2.2外部中断93.3键盘扫描93.4lcd显示103.5led指示113.6pid计算程序124系统调试135结论14参考文献15附录1 硬件电路图16附录2 程序清单17摘要本设计以stc89c51单片机为核心,完成转速控制的设计。硬件系统包括stc89c51控制模块、按键模块、传感器模块、驱动模块、显示模块;软件部分由主函数控制模块、定时中断和外部中断模块、键盘部分、pid控制转速模块、lcd初始化模块、led指示模块等组成,软件编写由keil c51完成。设计原理是根据lcd显示原理、按键描显示原理、单片机的定时中断原理、外部中断将霍尔传感器所检测的脉冲进行计数原理。设计了一个可以控制电机的启动和停止,显示当前转速显示,设定转速,通过pwm的手动设置和pid算法的自动控制转速的系统。关键词:stc89c51 霍尔传感器 lcd显示屏 pwm控制 pid算法i1系统方案设计stc89c51单片机外围设备由四个独立按键、霍尔传感器、电机驱动、lcd显示屏组成。具体功能为:电源为单片机和驱动电机供电,通过键盘输入部分进行模式的选择,进行显示或参数修改等,单片机通过控制pwm占空比来控制电机的转速,通过外部中断计数霍尔传感器检测的脉冲数,再计算一分钟的转速,在lcd上显示实际速度,指示灯指示不同的模式和不同的参数设置。四个独立按键中mode键进行模式切换,up、dn键可以对速度、pwm占空比、pid参数进行修改,在电机“启动与停止”模式中,up和dn分别对应启动与停止,ent键在参数修改过程中做标志位选择,此外,为方便显示还加了指示灯做指示。在“实时速度显示”模块中,利用外部中断0对霍尔元件脉冲记数,输出送到单片机,在定时器0下对信号进行周期刷新,调用计算公式算出转速,在lcd上显示实时速度;在转速控制中可分为两种方法,一种可以手动控制pwm的值来控制电机转速,另一种通过pid算法计算控制得道相应的pwm,然后改变pwm的值实现对电机的控制。其系统组成结构图如1.1所示:电源指示灯指示显示转速51单片机速度采集驱动电机pwm控制键盘输入图1.1系统结构框图 1.1硬件方案设计本设计中,单片机stc89c51为整个系统的控制部件,是转速控制系统的核心控制部件。其中振荡电路采用外接晶体的接法,靠单片机利用内部时钟方式来完成。晶振采用频率为11.0592mhz和15pf电容。其复位电路采用外部复位电路,上电复位及按键复位的一种实用电路。p2口的p20-p23作为独立键盘的输入口,通过延时消抖实现按键功能。p32口接霍尔传感器的引脚3,完成脉冲记数;p14口为电机的驱动口,当其为低电平的时候,电机驱动;p15、p16、p17接指示灯显示,外部需要上拉电阻,低电平时点亮。硬件具体电路图见附录一,接线原理图如1.2所示:p14p10-p12指示灯电机lcdstc89c51单片机独立按键p15p15-p17p20-p23 图1.2硬件结构框图1.2软件方案设计本设计是单片机控制,通过不断地脉冲计数、计算速度、pwm占空比的调节、按键扫描执行相应功能、以及lcd显示,按照设计功能,先写lcd显示和按键扫描程序设计和调试,然后转速检测程序设计及调试,再进行pwm占空比的回路控制调节电机转速程序设计及调试,每完成一步就下载到实验箱中调试,看是否能达到预期的目的,在各个功能都调试好后,整体下载进行调试。 软件设计主要是用分成了几个模块完成,主函数控制模块、定时中断和外部中断模块、键盘部分、pid控制转速模块、lcd初始化模块,其模块结构图如1.3所示:pwm手动控制时速模式设置速度模式pid控制模块led指示模块键盘扫描模块定时中断、外部中断模块主控模块lcd显示模块启动停止、时速显示模式基于pid的自动控制时速模式 图1.3软件模块结构框图2硬件电路设计2.1单片机最小系统最小系统为转速控制的控制中心,包括一块stc89c51芯片、复位部分、晶振时间频率控制部分和电源部分。复位部分采用外部复位电路,接在单片机的rest引脚,晶振采用频率为11.0592mhz和15pf电容,接18、19引脚,ea接vcc高电平为访问片内程序存储器。电路如图2.1所示:图2.1单片机最小系统图2.2按键接口电路本系统采用独立键盘,实现模块切换和一些参数设置。其中mode键进行模式选择,up和dn键对参数进行加或者减,ent键对参数设置进行标志位选择,它们分别接p20p23。电路如图2.2所示:图2.2按键接口电路2.3电机转速采集控制电路电机转速控制采集部分电路由一个pnp三极管,一个电动机、一个霍尔传感器和两个电机组成,其中p14口通过单片机控制pwm占空比,p32口输出单位时间内的脉冲数到单片机。电路如图2.3所示:图2.3电机转速采集电路2.4显示电路系统采用lcd显示,lcd液晶为点阵字符型液晶显示,其内部有字符发生器和显示数据存储器。其中cs与单片机的p10口连接,sid与p11口连接,sclk与p12口连接,b_light为背光显示,可以不连接,通过lcd电路实现数据和命令的发送、汉字和字母的显示。电路如图2.4所示:图2.4 lcd显示电路图2.5 led指示灯电路3个共阴极发光二极管分别接p15 、p16、p17。当p1口有低电平0来时,相应的发光二极管亮,指示相应的模式。电路如图2.5所示:图2.5 led指示灯电路3软件设计根据系统功能描述,软件有:主函数模块,系统参数初始化模块,lcd初始化、显示汉字字母模块,按键识键和功能设置模块,中断模块和pwm控制模块。3.1主控模块程序主程序执行的过程就是先进入主程序初始化,如系统的初始化、lcd初始化和定时器的初始化,然后根据按键判断,没有按键按下的时候,lcd显示初始设置值,当有按键按下的时候,则执行按键所对应的功能,然后进一步在lcd上显示出来,通过led指示灯指示相应的模式。主程序流程图如图3.1所示:y指示灯指示执行按键功能子程序是否有按键?关闭电机,初始值为0定时器初始化lcd初始化系统初始化 开始lcd显示n图3.1主程序流程图3.2初始化程序返回开放中断等待外部中断0中断定时器中断设置定时器初值选择工作方式初始化入口这里的初始化设置是对定时器的初始化,过程为:选择定时器的工作方式,然后设置定时器的初值,等待外部中断,开放中断。流程图如3.2所示: 图3.2初始化流程图3.2.1 定时器中断 定时器t0为每隔一秒对采集到的脉冲处理,最后计算成每分钟的速度;同时定时器0还对pwm控制进行计算,实现pwm占空比的调节。通过定时器计算实时速度的流程图如3.3所示,通过定时器完成pwm控制调节流程图如3.4所示:yn返回计数值清0,采集脉冲清0采集脉冲,计算速度是否到1s?计数值加1定时器赋初值入口入口n返回ynpwm=1计数值清0计数值100?pwm=0计数值100?得计算值通过位置型pid算法计算计算当前误差与上次误差之差计算总偏差量偏差100?计算设置值与当前值的偏差pid参数初始设置占空比为0计算值5改为delay(100)后,此现象消失。2. 在实时速度显示中,电机的转速并没有显示在lcd上,定时器中断的程序也正确,后来发现并没有加上外部中断,加上外部中断后,实时速度可以得到显示;但是发现最高位为0,改为每秒钟的速度则显示正常,经分析发现在数据类型定义时出错了,把char型改为int型,此问题消失;同样的,在设置速度模式中,改为int型后,显示正常。3. 在手动控制转速模块中,发现改变了pwm占空比值后,转速并没有改变,也就是此时占空比与转速并没有连接,发现定时器中pwm的控制不正确,经反复调试修改后,在lcd上显示出来,但是此时占空比从0-100不断循环,将“=”改为“=”后,可以通过手动设置占空比值来控制转速。4. 在自动控制转速中,主要是用了pid算法,计算占空比值来达到目的,发现进入模式4后,并不能自动控制转速,把返回的占空比值放到主函数中,自动控制转速得到实现;在pid算法中,要注意形参并不能与主函数的实参相同,否则会出错。5结论本次的单片机转速控制系统设计,实现了对电机的启动与停止,可是设置转速、显示实时速度,实现用pwm转速的闭环控制;实验中转速调节范围为300r/min3400r/min,在控制转速部分,测速误差波动为上下60r/min,在要求的误差范围内,达到了较好的效果。系统设计是以stc89c51单片机为核心,硬件系统包括stc89c51控制模块、按键模块、传感器模块、驱动模块、显示模块;软件部分由主函数控制模块、定时中断和外部中断模块、键盘部分、pid控制转速模块、lcd初始化模块等组成。系统模式设置中,在模式1中按下up键启动电机,通过霍尔传感器接受信号,lcd显示实时转速,此时pwm值为100,转速为全速,一段时间后达到一个稳定值;在模式2设定转速模式,指示灯d1亮,在ent键下选择要更改的位,通过up与dn键对转速进行设置,并在lcd上显示输入的设定值;将设定值传给单片机,可以通过模式3手动设置pwm的值来控制转速;在模式4中,通过与设定的转速做比较,进行pid计算,确定新的pwm值来控制电机,使其达到设定的转速,并在lcd上显示出来。当按下复位键后,回到待机模式,设定值回到初始值,电机停止转动,pwm对应值为0。在软件调试中,主程序中要先关pwm,否则在实际调试过程中,开始没有启动电机,但lcd上会显示个小的实际速度值;在对电机进行停止和启动时,可以通过pwm占空比的值来进行设置,启动时pwm赋值为100,停止时pwm赋值0,要注意不能写成等于,而不能通过打开火关闭pwm来进行启动和停止。参考文献1 程德福智能义器机械工业出版社,200992 万文略单片机原理及应用重庆:重庆大学出版社,20043 3 胡文金单片机系统实训教程重庆:重庆大学出版社,20054 林金阳基于mc51单片机的直流电机pwm调速系统长春工程学院学报(自然科学版)2009年第10卷第3期5 张洪润单片机应用技术教程北京:清华大学出版社,20043附录1 硬件电路图附录2 程序清单#include reg51.h#include intrins.h void initlcd(); /lcd初始化void delay(char i); /延时void inttimer(); /定时器初始化void key_scan(); /键值扫描void function();void zhishi();unsigned char pid(unsigned int speedset,unsigned int currentspeed);sbit cs=p10; /lcd设置sbit sid=p11;sbit sclk=p12;sbit b_light=p27;sbit k_m=p20;/按键口定义sbit k_u=p21;sbit k_d=p22;sbit k_e=p23;sbit d1=p15; /指示灯定义sbit d2=p16;sbit d3=p17;sbit pwm=p14; /pwm定义sbit huoer=p32; /霍尔 中断采集脉冲 定义unsigned int count0=0; /从0值开始计数unsigned char mode=0; /模式0 待机 模式1“启动、停止”并实时速度 模式2 速度设定 模式3 pwm占空比 模式4 pid控制参数unsignedchar speed14=0000,speed24=1500,pwm13=000,pid3=000;/实时速度 速度设定 pwm占空比 pid参数unsigned int temp=0,temp1=1500,temp2=0;/实时速度 速度设定 pwm占空比unsigned int flag1=0,flag2=0,flag3=0;/速度设定位标志 占空比设定“位”标志 pid三个参数修改标志float kp=0.002,ki=0.006,kd=0.002; /pid三个参数 初值/*lcd初始设置*/void send_command(unsigned char command_data) /发送命令 unsigned char i; unsigned char i_data,temp_data1,temp_data2; i_data=0xf8; /操作命令,可以查看资料delay(10); cs=1; sclk=0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=command_data; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data=4; temp_data2=4; i_data=temp_data1|temp_data2; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; cs=0; void send_data(unsigned char command_data) /发送数据 unsigned char i; unsigned char i_data,temp_data1,temp_data2;i_data=0xfa; /操作命令,可以查看资料delay(10); cs=1; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; i_data=command_data; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data=4; temp_data2=4; i_data=temp_data1|temp_data2; i_data&=0xf0; for(i=0;i8;i+) sid=(bit)(i_data&0x80); sclk=0; sclk=1; i_data=i_data1; cs=0; void initlcd() /液晶初始化 send_command(0x30); /功能设置:一次送8位数据,基本指令集 send_command(0x06); /点设定:显示字符/光标从左到右移位,ddram地址加1 send_command(0x0c); /显示设定:显示开,游标关,反白关 send_command(0x04); /反白显示 send_command(0x01); /清ddram send_command(0x02); /ddram地址归位 send_command(0x80); /把显示地址设为0x80,即为第一行的首位/*x,y为起始座标 x(0=x=3),y(0=y=7),x为行座标,y为列座标; how为要显示汉字的个数; str是要显示汉字的地址 */void disphanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)unsigned char hi=0; /汉字显示if(x=0) send_command(0x80+y); /else if(x=1) send_command(0x90+y);else if(x=2) send_command(0x88+y);else if(x=3) send_command(0x98+y);for(hi=0;hihow;hi+)send_data(*(stri+hi*2);send_data(*(stri+hi*2+1);void dispzimu(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)/字母数字都可以显示unsigned char hi=0;/字母显示if(x=0) send_command(0x80+y);else if(x=1) send_command(0x90+y);else if(x=2) send_command(0x88+y);else if(x=3) send_command(0x98+y);for(hi=0;hihow;hi+)send_data(*(stri+hi);/*延时函数*/void delay(char i)unsigned char d,x;for(x=0;x=i;x+) for(d=0;d=200) /1s时间到 测转速 i=0; /实时速度显示 temp=count0;temp*=60; /每分钟的速度count0=0; if(j=100) /pwm周期(设置100点) j=0; /开始新的pwm周期 pwm=0; /pwm打开 if(temp2=j) /比较 脉冲数和设置占空比 相等后pwm关闭 pwm=1; /*按键扫描*/void key_scan(void)if(k_m=0|k_u=0|k_d=0|k_e=0) delay(100); /消抖处理if(k_m=0) /模式键按下 mode+; if(mode=5) mode=1; if(mode=1)/启动、停止模式 并显示实时速度 if(k_u=0) temp2=100; else if(k_d=0) temp2=0; if(mode=2)/设定转速 if(k_e=0) flag1+; /flag1为设定转速标志if(flag1=5)flag1=0; if(k_u=0)if(flag1=1)temp1+=1000; else if(flag1=2)temp1+=100;else if(flag1=3)temp1+=10;else if(flag1=4)temp1+=1;else if(k_d=0)if(flag1=1)temp1-=1000; else if(flag1=2)temp1-=100;else if(flag1=3)temp1-=10;else if(flag1=4)temp1-=1; else if(mode=3)/设定pwm占空比 if(k_e=0) flag2+; /flag2为设定占空比标志if(flag2=3)flag2=0; if(k_u=0) if(flag2=1) temp2+=10; if(flag2=2) temp2+=1;if(temp2100) temp2=0; if(k_d=0) if(flag2=1) temp2-=10; if(flag2=2) temp2-=1;if(temp23) flag3=0;if(k_u=0) /flag3为设定占空比标志 if(flag3=1)kp+=0.001; if(flag3=2)ki+=0.001; if(flag3=3)kd+=0.001;if(k_d=0) if(flag3=1)kp-=0.001; if(flag3=2)ki-=0.001; if(flag3=3)kd-=0.001; /*模式*/void function() disphanzi(0,0,5,实时速度:); /模式1 实时速度 speed10=temp/1000+0x30; speed11=temp/100%10+0x30; speed12=temp/10%10+0x30; speed13=temp%10+0x30; dispzimu(0,5,4,speed1); disphanzi(1,0,5,设置速度:); /模式2 速度设定 speed20=temp1/1000+0x30; speed21=temp1/100%10+0x30; speed22=temp1/10%10+0x30; speed23=temp1%10+0x30; dispzimu(1,5,4,speed2); disphanzi(2,0,4,占空比:); /模式3 pwm占空比 pwm10=temp2/100+0x30; pwm11=temp2/10%10+0x30; pwm12=temp2%10+0x30; dispzimu(2,5,3,pwm1); dispzimu(2,7,3,%); disphanzi(3,0,5,控制参量:); /模式4 pid控制 dispzimu(3,5,3,pid); pid0=kp*1000+0x30; pid1=ki*1000+0x30; pid2=kd*1000+0x30;/*led灯指示*/void zhishi() if(mode=0)/待机模式 d3=1;d2=1;d1=1; else if(mode=1)/“启动停止”并实时速度显示模式 d3=1;d2=1;d1=0; if(k_u=0)d3=0;/启动指示 el

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论