计算机控制技术课程设计报告_第1页
计算机控制技术课程设计报告_第2页
计算机控制技术课程设计报告_第3页
计算机控制技术课程设计报告_第4页
计算机控制技术课程设计报告_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机控制技术课 程 设 计单闭环直流电机调速系统1 设计目的计算机控制技术课程是集微机原理、计算机技术、控制理论、电子电路、自动控制系统、工业控制过程等课程基础知识一体的应用性课程,具有很强的实践性,通过这次课程设计进一步加深对计算机控制技术课程的理解,掌握计算机控制系统硬件和软件的设计思路,以及对相关课程理论知识的理解和融会贯通,提高运用已有的专业理论知识分析实际应用问题的能力和解决实际问题的技能,培养独立自主、综合分析与创新性应用的能力。2 设计任务2.1 设计题目单闭环直流电机调速系统实现一个单闭环直流电机调压调速控制,用键盘实现对直流电机的起/停、正/反转控制,速度调节要求既可用键盘

2、数字量设定也可用电位器连续调节,需要有速度显示电路。扩展要求能够利用串口通信方式在PC上设置和显示速度曲线并且进行数据保存和查看。2.2 设计要求2.2.1 基本设计要求(1)根据系统控制要求设计控制整体方案;包括微处理芯片选用,系统构成框图,确定参数测范围等;(2)选用参数检测元件及变送器;系统硬件电路设计,包括输入接口电路、逻辑电路、操作键盘、输出电路、显示电路;(3)建立数学模型,确定控制算法;(4)设计功率驱动电路;(5)制作电路板,搭建系统,调试。2.2.2 扩展设计要求(1)在已能正常运行的微计算机控制系统的基础上,通过串口与PC连接;(2)编写人机界面控制和显示程序;编写微机通信

3、程序;实现人机实时交互。3方案比较方案一:采用继电器对电动机的开或关进行控制。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。方案二:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。方案三:采用由电力电子器件组成的H型PWM电路。用单片机控制电力电子器件使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在电力电子器件的饱和截止模式下,效率非常高;H型电路保证了可以简单地实

4、现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。兼于方案三调速特性优良、调整平滑、调整范围广、过载能力大,因此本设计采用方案三。4单闭环直流电机调速系统设计4.1单闭环调速原理4.1.1 闭环系统框图4.1.2 调速原理直流电机转速有:常数Ke Ka不变,Ra比较小。 所以调节Ua就能调节n。4.2 系统框图4.3系统基本原理通过键盘按键控制电机的启停、正反转、加速和减速,单片机接收键盘信号与反馈信号进行比较处理,也可以通过电位器调速,将模拟调节量转换为数字量后送给单片机处理,电机的速度由传感器测量后回馈给单片机处理,单片机接收到各路信号后控制显示器显示特

5、定的内容,同时控制电机驱动电路工作,从而控制直流电机的转速。5系统硬件电路设计5.1电机驱动电路电机驱动电路主要有L298N和四个二极管组成,其中PWM驱动原理如下 i. Ud是有效值,调节占空比就能调节Ud进而调节n.ii. PWM驱动器由L298来实现的,L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。3iii 如图4,L298的封装和功能表。通过改变C、D的状态来改变电机的正反转和急停和调节占空比进而调速;Ven直接接高电位。是对C、D分别输出0和PWM波或者PWM波和0来进

6、行的,初始化的占空比为50%。5.2 测速电路图5测速整形电路测速电路用自制的光电编码盘,通过红外接收发射管和施密特触发器组成。当接收管接收到发射管发出的低电平信号,再通过施密特整形送给单片机的INT0,进而通过程序进行计算速度。5.3 显示电路图6 LCD显示电路LCD 1602显示电路用于显示转速设定值与当前值。5.4 键盘图7键盘控制电路0-9按键为数值的设定,CLR为后退按键,ENT为确定键,KEY为键盘输入按键,REP为电位器调速按键,RUN为运行/正转按键,F为运行/反转按键, STOP为停止按键。5.5 模拟调速电路图8 模拟调速电路模拟调速电路由电位器分压输出给定电压,再经过A

7、D转换器ADC0831输入的单片机中。5.6 电源电路5图9 电源电路6V /0.5A的外部输入电压Vin经过由MC7805ACK与两个由470Pf、一个100uf的电解电容组成的稳压电路,稳压成5V的电压,供系统使用。5.7 串口通信电路图10 串口通信电路主要用来烧写程序进去单片机。MAX232将ttl电平转换成可以和电脑串口匹配的电压。从而与PC机进行通信。6图11 STC-ISP上图位stc单片机专用ISp下载软件。5.8 晶振和复位电路图12 晶振和复位电路左边为复位电路、右边为12M的晶振电路,这两块与单片机组成最小系统。76 软件设计l 如图12,主程序是先初始化LCD1602和

8、中断,然后进入转速设定和调节循环。其中INT0中断是用来测试辅助的,TO和T1配合参数PWM波和调节占空比(其中PWM为一个8位二进制数0-255),转速的反馈调节主要是进行优化的P调节。l 如题13和图14,是T0和T1的中断服务程序,TO设定256us的循环和初始化T1,然后对电机进行正转、反转、停机(急停)三个判断;T1中断服务程序只负责关闭T1中断。l 如图14,外部中断INT0处理调理好的测试脉冲,中断服务程序对每一个测速脉冲对变量n进行加+,返回到主函数的测速程序。l PWM的优化型P控制算法,对转速比较尽兴分级调节,当实际值无设定值相差超过1000rpm时PWM调整15,相差超过

9、500rpm时调整10,相差超过300时调整6,相差超过100时调整2,相差小于100时调整1。8图12 主程序程序框图9107 电路与程序仿真和软件调试7.1 Proteus仿真电路可以导入HXE文件,对编写好的程序和电路图进行仿真。117.2Keil程序编写与编译。128 硬件焊接与调试8.1 焊接与高度l 单片机最小系统的焊接,成功后进行下一步。l 串口通信电路焊接,焊完进行串行通信,通过与PC机进行通信、刷写程序进入单片机,成功进行下一步。l 键盘电路与LCD1062显示电路焊接,程序已经写进单片机里面,可以进行参数设置来检查按键与显示是否正常,成功进行下一步。l 模拟调速电路焊接,焊

10、完进行模拟调速设置,从显示器能观察是否正常。l 电机驱动电路焊接,焊完进行调试,发现电机接上之后系统不稳定,经分析发现是电源功率不足,电源是一个6V0.5A的小型电源,正好驱动芯片L298的电源电路分开供电,用另外的电源给电机供电,改装完后系统正常,进行下一步。l 测速电路焊接,连接到单片机后一切正常。l 整体焊接完成后对软件进行实物调试,通过不断的运行测试和重新刷写程序,主要克服的问题有:调速反应迟钝、速度显示精度、PWM调试算法。l 成品系统。138.2 系统参数与实验数据n 系统的调试参数:转速测量误差范围:+ 30 rpm所使用电机PWM调压范围:07.5V所使用电机PWM稳定调速范围

11、:正转时3902460rpm 反转时3902700rpmn 调试结果表格设定转速420610100012001600180020002400实际转速42060099012001580180020102400偏差值010100-200100上述调试结果表明:实际转速跟设定转速的差值不超过30rpm,效果较好,符合设计要求。149 结论在此次课程设计中,设计了PWM单闭环调速系统,它由STC89C52RC单片机的I/O口输出PWM信号,直接用TTL电平控制驱动芯片L298实现对电动机进行调速,这样能够充分发挥单片机的效能,对于简易速度控制系统的实现提供了一种有效的途径。软件方面,它采用计数法加软件

12、延时法进行设计的思路,为采用纯软件对电机速度的平滑调节提供了一种不错的解决方案。运行实验表明,系统硬件接口电路简单,工作稳定可靠,满足了调速的功能要求,有很好的可操作性和维护性,具有较大的理论及实用价值。10 心得体会通过这次课程设计,我们在收获知识的同时,还收获了阅历,收获了成熟。在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在课程设计上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。在如今单一的理论学习中,很少有机会能有实践的机

13、会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契。我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。课程设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。对我们而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!11 致谢感谢我们的指导老师,不管在选题阶段,还

14、是在设计阶段,在制作阶段,正是她给予我不断的指导与鼓励,我们才能顺利地完成我的课程设计,她那种对待学生和蔼亲切,对待工作一丝不苟的品质和精神值得我们每一个人学习。借此,向我们的指导老师毕老师表示衷心的感谢。在此我要感谢我的同学们,在电路设计、程序编写和焊接过程遇到困难时,正是由于同学们的指导我们才能顺利地完成本次课程设计。1516附录(一)小组分工情况表17附录二 总电路图18附录(三)元器件清单序 号名 称型 号、规 格数 量1单片机芯片STC12C5A08S212插座DIP4013电解电容10uf54排针2排58位数据线26MAX23217插座DIP1638串口1对9LCDLCD16021

15、10插孔(排孔)2排11电位器10k112功率电阻10欧0.5w113触电按键1814上拉电阻10k1015排阻8位10k216电位器20k117AD芯片ADC0831118插座DIP8119DC电机RS-365(10w左右)120PWML298121施密特触发器74LS14122插座DIP14223红外对管2套24二极管1N4007425电解电容1uf526瓷片电容100n1027瓷片电容0.1u528瓷片电容30p529万用版2302位电源插孔及插线231连接用线1捆32发光二极管1033互锁开关3附录(四)控制程序#include#include #define LCM_Data P0

16、/数据接口#define uchar unsigned char#define uint unsigned int uchar code uctech = SSpeed=;uchar code net = RSpeed=;uchar code Data=0,1,2,3,4,5,6,7,8,9; uchar idata plus8=0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03;uchar SSpeed4=0,0,0,0;uchar RSpeed4=0,0,0,0;uchar k; FLAG;uchar PWM=0x7f ; /赋初值uint n=0; num=0

17、; /T0中断次数和INT0中断次数uint speed; /实际转速uint SetSpeed; / 数字和模拟速度设定值20sbit D=P20;sbit A=P21;sbit Run=P22; sbit Fan=P23; sbit Stop=P24;sbit LCM_E=P25;/定义接口sbit LCM_RW=P26;sbit LCM_RS=P27;sbit IN1=P34; /L298两驱动端口sbit IN2=P35;sbit SCL2=P37;/连接ADC0831SCL脚sbit SDA2=P36;/连接ADC0831SDA脚sbit CS=P33;void LCM_WriteD

18、ata(uchar WDLCM); /LCD写数据void LCM_WriteCommand(uchar WCLCM,BuysC); /LCD写命令uchar LCM_ReadData(void); /LCD读数据 uchar LCM_ReadStatus(void); /LCD读状态void LCM_Init(void); /LCD初始化void DisplayOneChar(uchar X, uchar Y, uchar DData); /LCD显示1个字符void DisplayListChar(uchar X, uchar Y, uchar code *DData); /LCD显示一串

19、字符void break_Init(void); /定时器和中断初始化void delay200us(void); /延时200usvoid delay400ms(void); /延时400msvoid delay10ms(void); /延时10msvoid Getch (void); /键值判断函数void GetchIt(void); /键值获取函数void InputSet(void); /键盘设定函数void motorPWM(void); /PWM调速void RSpeeddisplay(void); /实际转速显示21uchar ad0831read(void);/定义该函数为读

20、取ADC0831的数据void Vvchange(void); /AD采集与转速转换,同时显示电位器设定转速值void main(void) delay400ms();/启动等待,等LCM讲入工作状态 LCM_Init();/LCM初始化 delay200us();/延时片刻(可不要) DisplayListChar(1, 0, uctech); DisplayListChar(12,0,RPM); DisplayListChar(1, 1, net); DisplayListChar(12,1,RPM); LCM_WriteCommand(0x0c,1);/ 显示关光标设置 指令4:置功能

21、LCM_WriteCommand(0x0c,1);/ 显示关光标设置 指令4:置功能 break_Init(); /中断初始化 while(1) Run=1;Fan=1; D=1; A=1;if(D=0) /按数字参数设定键可设定一次参数,此处是为了节省CPU工作资源,使CPU运行效率更高! InputSet(); LCM_WriteCommand(0x0c,1);/ 显示关及光标设置 指令4:置功能n=0;22 if(A=0) /按电位器模拟参数设定Vvchange();n=0if(n=745) /每0.2S进行一次实际速度计算,同时显示实际转速,进行一次PWM调速。speed=30*num

22、; num=0; n=0; RSpeeddisplay(); /显示实际转速 motorPWM(); /PWM调速 /* 键盘和转速设定函数 */void delay10ms(void) /延时程序 uchar i,j; for(i=20;i0;i-) for(j=248;j0;j-); void Getch () unsigned char X,Y,Z;P1=0xff;P1=0x0f; /先对P1置数 行扫描23if(P1!=0x0f) /判断是否有键按下 delay10ms(); /延时,软件去干扰if(P1!=0x0f) /确认按键按下X = P1; X=P1; /保存行扫描时有键按下时

23、状态P1=0xf0; /列扫描Y=P1; /保存列扫描时有键按下时状态 Z=X|Y; /取出键值switch ( Z ) /判断键值(那一个键按下) case 0xee: k=1;FLAG=0;break; /对键值赋值,10代表清零,11代表确认case 0xde: k=2;FLAG=0;break; case 0xbe: k=3;FLAG=0;break; case 0xed: k=4;FLAG=0;break; case 0xdd: k=5;FLAG=0;break; case 0xbd: k=6;FLAG=0;break; case 0xeb: k=7;FLAG=0;break; ca

24、se 0xdb: k=8;FLAG=0;break; case 0xbb: k=9;FLAG=0;break; case 0xe7: k=10;FLAG=0;break; case 0xd7: k=0;FLAG=0;break; case 0xb7: k=11;FLAG=0;break; delay400ms(); /延时防止连击! 24void GetchIt(void)FLAG=1;while(FLAG) Getch();/键盘数字转速设定函数void InputSet(void) /参数设定函数 uchar n=0,i=8,m=0,j=8,p; LCM_WriteCommand(0x02

25、,1); /指令2:光标返回00H for(p=0;p8;p+) LCM_WriteCommand(0x14,1);/ 右移动光标 指令5:置功能 LCM_WriteCommand(0x0e,1);/ 显示开及光标设置 指令4:置功能 GetchIt(); while(k!=11)&(n4) if(k10) SSpeedn=k; DisplayOneChar(i,0,DataSSpeedn); n+; i+; if(n=4) LCM_WriteCommand(0x0c,1);/ 显示关及光标设置 指令4:置功能 LCM_WriteCommand(0x10,1);/ 左移动光标 指令5:置功能

26、LCM_WriteCommand(0x0e,1);/ 显示开光标设置 指令4:置功能 GetchIt(); 25 else if(k=10) if(i!=8)LCM_WriteCommand(0x10,1);/ 左移动光标 指令5:置功能 i-;n-; GetchIt(); SetSpeed=1000*SSpeed0+100*SSpeed1+10*SSpeed2+SSpeed3; /* AD采集和转速数学模型函数 */ /模拟转速设定函数uchar ad0831read(void)/ad0831读8位AD数据uchar i,tmp=0;SDA2=1;CS=0; delay200us();SCL

27、2=0; delay200us();SCL2=1; delay200us();SCL2=0; delay200us();for(i=0;i8;i+)26if(SDA2) tmp+;tmp=1;SCL2=1;delay200us();SCL2=0;delay200us(); CS=1;return tmp;/电位器电压与转速转换数学模型函数以及显示函数void Vvchange(void)uint ASpeed; uchar i,k=8,tmp; tmp=ad0831read(); ASpeed=10*tmp; SSpeed0=ASpeed/1000; SSpeed1=ASpeed%1000/1

28、00; SSpeed2=ASpeed%1000%100/10; SSpeed3=ASpeed%1000%100%10; for(i=0;i4;i+) DisplayOneChar(k,0,DataSSpeedi); k+; delay400ms(); SetSpeed=ASpeed;27/实际转速显示函数void RSpeeddisplay(void)uchar l,u=8; RSpeed0=speed/1000; RSpeed1=speed%1000/100; RSpeed2=speed%1000%100/10; RSpeed3=speed%1000%100%10; for(l=0;lSet

29、Speed)&(PWM1000) PWM=PWM+15; else if(cha500) PWM=PWM+10; else if(cha300) PWM=PWM+6; else if(cha100) PWM=PWM+2; else PWM+; else if(speed0x00) cha=SetSpeed-speed; if(cha1000) PWM=PWM-15; else if(cha500) PWM=PWM-10; else if(cha300) PWM=PWM-6; else if(cha100) PWM=PWM-2; else PWM-; /*/ 定时器0中断服务程序 (频率)/*/

30、29void timer0() interrupt 1 TR1=0 ; TH0=0xff ; TL0=0x00 ; TH1=PWM ; TR1=1 ; n+;if(Stop!=0) if(Run=0) IN1=1;IN2=0; /启动输出 else if(Fan=0) IN1=0;IN2=1; else IN1=1;IN2=1;/*/ 定时器1中断服务程序 (脉宽)/*/void timer1() interrupt 3 TR1=0; IN1=1; IN2=1;/结束输出void INT_0() interrupt 0 30num+; /* 1602A液晶屏驱动程序* 晶 振 频 率:12 M

31、hz*/*1602A写数据函数*/*函数原型:void LCM_WriteData(uchar WDLCM)/*函数功能:1602A写数据/*输入参数:要写入的数据/*输出参数:无/*调用模块:/*/ void LCM_WriteData(uchar WDLCM)LCM_ReadStatus();/检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0;/若晶振速度太高可以在这后加小的延时delay200us();LCM_E = 1; /*1602A写指令函数*/31/*函数原型:void LCM_WriteCommand(uchar WCLCM

32、,BuysC)/*函数功能:1602A写指令/*输入参数:要写入的指令/*输出参数:无/*调用模块:/*/ void LCM_WriteCommand(uchar WCLCM,BuysC)/BuysC为0时忽略忙检测if (BuysC) LCM_ReadStatus();/根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;delay200us();LCM_E = 1; /*1602A读数据函数*/*函数原型:uchar LCM_ReadData(void)/*函数功能:1602A读数据/*输入参数:无/*输出参数:1602A返回的数

33、据/*调用模块:/*/ uchar LCM_ReadData(void)LCM_Data=0xFF;32LCM_RS = 1;LCM_RW = 1;LCM_E = 0;delay200us();LCM_E = 1;return(LCM_Data); /*1602A读状态函数*/*函数原型:uchar LCM_ReadData(void)/*函数功能:1602A读状态/*输入参数:无/*输出参数:1602A返回的状态/*调用模块:/*/ uchar LCM_ReadStatus(void)LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;delay2

34、00us();LCM_E = 1;while (LCM_Data & 0x80);/检测忙信号return(LCM_Data); /*1602A初始化函数*/33/*函数原型:void LCM_Init(void)/*函数功能:1602A初始化/*输入参数:无/*输出参数:无/*调用模块:/*/ void LCM_Init(void)LCM_Data = 0;LCM_WriteCommand(0x38,0);/三次显示模式设置,不检测忙信号,0x38:指令6置功能,2行,5*7字符delay200us();LCM_WriteCommand(0x38,0);delay200us();LCM_Wr

35、iteCommand(0x38,0);delay200us(); LCM_WriteCommand(0x38,1);/显示模式设置,开始要求每次检测忙信号LCM_WriteCommand(0x08,1);/关闭显示 指令4:LCM_WriteCommand(0x01,1);/显示清屏 指令1LCM_WriteCommand(0x06,1);/ 显示光标移动设置 指令3:置输入模式:地址增量,显示屏不移动LCM_WriteCommand(0x0e,1);/ 显示开及光标设置 /*1602A按指定位置显示一个字符函数*/*函数原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)/*函数功能:1602A按指定位置显示一个字符34/*输入参数:X坐标 Y坐标 要显示的字符/*输出参数

温馨提示

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

评论

0/150

提交评论