《饮料罐装生产流水线的单片机控制系统设计(13页).doc》由会员分享,可在线阅读,更多相关《饮料罐装生产流水线的单片机控制系统设计(13页).doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-饮料罐装生产流水线的单片机控制系统设计-第 11 页XX大学课程设计报告 课题名称 饮料罐装生产流水线的单片机控制系统设计 院 (系) 机电工程学院 专 业 机械设计制造及其自动化 姓 名 XXXX 学 号 XXXX 起讫日期 2016.8.29-2016.9.9 指导教师 XX 2016年9月9日饮料罐装生产流水线的单片机控制系统设计摘 要本设计是饮料灌装生产流水线的单片机控制系统。其硬件部分主要包括电源电路、开关电路、光电传感器模块、数码显示模块、继电器控制模块、报警模块6个主要组成部分。硬件选择以AT89C51为主体、数码显示采用74LS164串行显示方案,光电传感器采用对射式光电开关
2、电路方案,继电器控制模块采用单片机控制5V继电器,进而控制交流接触器方案。软件设计主要完成信号检测,多种工作状态的转换,以及显示灌装计数值三个工作。关键词:灌装流水线 单片机 光电传感器 串行数码管显示 继电器控制目录摘要.11.课程设计内容与要求31.1 课程设计内容31.2 课程设计要求32. 控制系统的硬件电路设计4硬件电路设计proteus软件简介42.2 控制系统硬件电路详细设计42.2.1 控制系统结构图42.2.2 电源电路设计52.2.3 单片机开关按钮设计52.2.4 光电传感器电路设计62.2.5 数码管显示模块6 报警模块72.2.7 传送带模块72.2.8 灌装设备模块
3、83.控制程序设计与仿真8控制程序设计平台软件keil uvision2简介83.2 控制程序详细设计83.2.1 控制程序流程图83.2.2 详细程序设计113.3 控制系统Protues仿真133.3.1 光电传感器仿真133.3.2 灌装设备和传送带仿真13333 数码管显示仿真143.3.4 整体仿真图14结束语15参考文献15附录I 电路图16附录II C51源代码17 课程设计内容设计一套饮料罐装生产流水线的PLC控制系统,控制要求:(1) 系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或罐装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料
4、后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作。(2) 当瓶子定位在罐装设备下时,停顿1秒,罐装设备开始工作,罐装过程为5秒钟,罐装过程应有报警显示,5秒后停止并不再显示报警。(3)一旦系统启动,记录罐装瓶数,设最多不超过9999瓶。(4)可以手动对计数值清零(复位)。 1.2 课程设计要求(1)采用MCS-51单片机控制,画出控制系统的硬件电路图;(2)采用220V交流电源供电,设计控制系统直流电源模块硬件电路图;(3)编制控制程序,并画出程序框图;(4)撰写课程设计报告。2. 控制系统的硬件电路设计硬件电路设计proteus软件简介Proteus软件是英国Lab C
5、enter Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、
6、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。12.2 控制系统硬件电路详细设计 控制系统结构图220V交流电转5V直流稳压电路(供电) 4位数码管显示 51单片机开 启动 停止关 复位计数值M传送带220V继电器电路5V传送带开关继电器光电传感器灌装设备5V灌装设备开关继电器图 (1)如图(1)所示整个控制系统输入量有四个,分别为启动开关、停止开关、复位计数值开关以及光电传感器输入信号。输出有三个,
7、分别为数码管显示、传送带继电器以及灌装设备继电器。单片机在接收到启动开关信号后,控制4位数码管显示初始计数值,同时输出信号使传送带继电器线圈得电,进而闭合在强电电路中的相应的继电器开关,使传送带带动瓶子运动。当光电传感器检测到瓶子到达灌装位置时,向单片机发送信号,单片机接收到信号后立即停止传送带,通过内部计时器计时1S后启动灌装设备,同时报警指示灯保持常亮。单片机内部定时器继续计时5S后,停止灌装设备,关灭报警指示灯,数码管显示值加1,然后启动传送带等待光电传感器检测到下一个信号开启再一次的循环。在系统运行期间如果接收到停止信号系统会立即关闭传送带和灌装设备,以及数码管显示;如果接收到复位信号
8、,单片机控制的数码管计数值立即清零;如果数码管当前的计数值达到了9999,再接收到灌装完成的信号数码管显示值会变成0进而重新计数。2.2.2 电源电路设计由于设计要求用220V交流电供电,而单片机电路需要的电源是直流5V。故需要设计220V转5V的直流稳压电路。本系统采用的为常见的直流稳压方案如图(2)所示。 图 (2)变压器输出端的9V电压经桥式整流并电容滤波,在电容C1两端大约会有11V多一点的电压,假如从电容两端直接接一个负载,当负载变化或交流电源有少许波动都会使C1两端的电压发生较大幅度的变化,因此要得到一个比较稳定的电压,在这里接一个三端稳压器的元件U2。三端稳压器是一种集成电路元件
9、,内部由一些三极管和电阻等构成,在分析电路时可简单的认为这是一个能自动调节电阻的元件,当负载电流大时三端稳压器内的电阻自动变小,而当负载电流变小时三端稳压器内的电阻又会自动变大,这样就能保持稳压器的输出电压保持基本不变。因为我们要输出5V的电压,所以选用7805,7805。前面的字母可能会因生产厂家不同而不同。LM7805最大可以输出1A的电流,内部有限流式短路保护。三端稳压器后面接有电容,起滤波和阻尼作用。 单片机开关按钮设计 由于单片机上电P2、P3口均为高电平,故此处设计最简单的开关电路,单片机口接按钮接地。以停止开关为例,如图3所示图(3) 光电传感器电路设计 如图4所示图(4) 光电
10、传感器由两部分组成,一部分是发光的二极管,一部分是由光电三极管组成的光电开关。当左部分和右部分没有物体遮挡时,发光二极管的光照射到光电三极管基极上,光电三极管导通,电压比较器LM393 3脚电平输出电压为低电平0V;当左部分和右部分有物体遮挡时,光电三极管截止,电压比较器LM393 3脚电平低于2脚电平2,5V输出电压为高电平5V。 数码管显示模块图(5) 显示模块选用4个LED共阴极数码管,为节省单片机输入输出口选用用74LS164芯片进行串行数码显示。接线图如图所示,4个74LS164芯片串行连接,U2接收来自单片机的数据,U3、U4、U5输入端接在前一个数据输出的最高位。每一次刷新显示时
11、,单片机通过第一个74LS164向显示模块输入4个字节通过串行移位的方式,分别保存在U2、U3、U4、U5内进而控制4个数码管的显示。 报警模块图(6) 报警模块选用LED指示灯,由于单片机驱动电流较小故电路中加入三极管进行电流放大。当三极管的基极接收到来自单片机的低电平信号,三极管正向导通,LED指示灯亮。2.2.7 传送带模块 传送带电机模块由两部分组成:一部分为弱电的控制电路(图7),一部分是强电电路如(图8,图9)。图(7)图(8) 图(9)当三极管的基极接收到来自单片机的低电平信号时,三极管正向导通吸合继电器开关K1,位于强电电路中的KM1线圈得电,传送带电机启动运行。当三极管的基极
12、接收到来自单片机的高电平信号时,三极管截止,继电器的线圈通过二极管D1放电,K1断开,KM1线圈掉电,KM1断开,电机停止运行。2.2.8 灌装设备模块此模块和传送带模块类似,此处不再赘述,电路图如图10、图11、图12所示。 图(10) 图(11) 图(12)3.1控制程序设计平台软件keil uvision2简介Keil uVision2是德国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可
13、以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强, 使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。23.2 控制程序详细设计 控制程序流程图 控制程序框图包括主程序框图图(13)和定时器中断函数框图(14)。YNNNN主程序系统初始化开始开关on?传送带关闭单片机定时器启动停止
14、开关on?复位开关on?收到传感器信号?传送带启动数码管显示初始值传感器信号消失?结束计数值清零YYY图(13)50ms中断程序 N定时器重装初值计数值t 0加1t0=120?或t0=20?NNt0=120?t0=20?YY灌装设备关闭报警指示灯关灭传送带启动t0=0定时器关闭计数值cunt加1刷新数码管显示灌装设备启动报警指示灯灯亮Ycunt=0刷新数码管显示cunt=10000?NRET图(14)3.2.2 详细程序设计(1)数码管显示函数void display() uchar LED_code4; /存放四个数码管显示代码 uchar i,j,chr,sel; for(i=0;i4;i
15、+)/将显示的数值转换为显示代码 LED_codei=LED_Mapdisdatai; for(i=0;i4;i+)/74LS164数码管串行显示程序 chr= LED_codei; / sel=0x80; for(j=0;j1; delay(1); CLK=1; delay(1); (2) 计数显示函数voidcunt_disp() /计数显示disdata0=cunt%1000%100%10;/取个位disdata1=cunt%1000%100/10;/取十位disdata2=cunt%1000/100;/取百位disdata3=cunt/1000;/取千位display(); 计数显示函
16、数,取出计数值的各个位送给disdata数组。(3)关闭显示函数voiddisp_off()/关闭显示函数uchari,j,chr,sel;for(i=0;i4;i+)chr=0x00; /关闭数码管显示sel=0x80;for(j=0;j1;delay(1);CLK=1;delay(1);关闭显示函数本质上是通过单片机赋值将数码管的每个LED灯关灭。(4)初始化函数voidinit() /初始化TMOD=0x01; /定时器初始化TH0=(65536-50000)/256; /50msTL0=(65536-50000)%256;EA=1; /开中断ET0=1;t0=0;/时间变量chuans
17、ong=1;/传送带关闭guanzhuang=1;/灌装设备关闭disp_off();/显示关闭cunt=0; /初始值TR0=0; 初始化函数为系统未启动状态,此时初始化系统变量并且关闭所有设备。(5) 定时器中断函数voidtimer0()interrupt1/50ms定时器中断函数TH0=(65536-50000)/256; /50ms设置TL0=(65536-50000)%256;t0+;if(t0=20)/1s停顿guanzhuang=0;baojing=0;if(t0=120) /1S停顿加5秒灌装 guanzhuang=1; /灌装设备启动baojing=1; /报警灯亮chua
18、nsong=0; /传送带关闭t0=0; /t0重新赋值0TR0=0; /关闭定时器cunt+; /显示值加1if(cunt=10000) /计数值重置cunt=0;cunt_disp(); /刷新显示(6) 主函数voidmain() /主函数loop:init(); /初始化while(auto_on); /等待启动chuansong=0; /传送带启动cunt_disp(); /显示当初始计数值while(1) /主运行程序if(!no_stop)gotoloop;/判断是否有停止信号if(rst_cunt=0)/判断是否复位计数值cunt=0;/复位cunt_disp();/刷新显示i
19、f(!cunt_in)/接收到传感器信号chuansong=1;/传送带停止TR0=1;/定时器打开while(!cunt_in);/等待信号结束3.3 控制系统Protues仿真 光电传感器仿真此处用按钮将发光二极管短路来模拟有物体遮挡的情况。按钮未按下(无物体遮挡)时电压比较器输出高电平,按钮按下之后输出为低电平。 灌装设备和传送带仿真 此处选用protues中的直流单相电机仿真交流电机。333 数码管显示仿真3.3.4 整体仿真图结束语 通过本次的课程设计,学到了很多关于单片机仿真的东西。在做仿真电路事,遇到了一些困难尤其是电源稳压模块和光电传感器模块,但是通过上网查资料最终还是比较好的
20、解决了这些问题,另外在编写C51程序时也遇到了一些问题,包括中断函数的编写和信号的处理,但最终也是通过不断地调试,思考解决了问题。 通过本次本次的课程设计,我对专业知识有了更深的认识,相信会对我以后的学习或者工作有很大帮助。参考文献1百度百科.Protues. 2百度百科.keil. 附录I 电路图 单片机板电路图 强电电路电路图附录II C51源代码#includetypedefunsignedcharuchar;typedefunsignedintuint;sbitDin=P10;/数码管数据输入sbitCLK=P11;/时钟输入sbitauto_on=P22;/自动模式开启sbitrst
21、_cunt=P23;/复位计数值sbitbaojing=P27;/报警信号输出sbitcunt_in=P24;/传感器输入sbitguanzhuang=P25;/灌装设备控制端sbitchuansong=P26;/传送带控制端sbitno_stop=P30;/停止信号输入uchardatadisdata4;uintcunt,t0,t1;unsignedcharcodeLED_Map10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0-9voidinit();voiddelay(intcount)unsignedinti;for(i=0;
22、icount;i+);/数码显示voiddisplay()ucharLED_code4; /存放四个数码管显示代码uchari,j,chr,sel;for(i=0;i4;i+)/将显示的数值转换为显示代码LED_codei=LED_Mapdisdatai;for(i=0;i4;i+)/74LS164数码管串行显示程序chr=LED_codei; /sel=0x80;for(j=0;j1;delay(1);CLK=1;delay(1);voidcunt_disp()/计数显示disdata0=cunt%1000%100%10;/取个位disdata1=cunt%1000%100/10;/取十位d
23、isdata2=cunt%1000/100;/取百位disdata3=cunt/1000;/取千位display();voiddisp_off()/关闭显示函数uchari,j,chr,sel;for(i=0;i4;i+)chr=0x00;/sel=0x80;for(j=0;j1;delay(1);CLK=1;delay(1);voidmain()/主函数loop:init();/初始化while(auto_on);/等待启动chuansong=0;/传送带启动cunt_disp();/显示当初始计数值while(1)/主运行程序if(!no_stop)gotoloop;/判断是否有停止信号i
24、f(rst_cunt=0)/判断是否复位计数值cunt=0;/复位cunt_disp();/刷新显示if(!cunt_in)/接收到传感器信号chuansong=1;/传送带停止TR0=1;/定时器打开while(!cunt_in);/等待信号结束voidinit()/初始化TMOD=0x01;/定时器初始化TH0=(65536-50000)/256;/50msTL0=(65536-50000)%256;EA=1;/开中断ET0=1;t0=0;/时间变量chuansong=1;/传送带关闭guanzhuang=1;/灌装设备关闭disp_off();/显示关闭cunt=9998;/初始值TR0=0;voidtimer0()interrupt1/定时器中断函数TH0=(65536-50000)/256;/50msTL0=(65536-50000)%256;t0+;if(t0=20)/1s停顿guanzhuang=0;baojing=0;if(t0=120)/1S停顿加5秒灌装guanzhuang=1;baojing=1;chuansong=0;t0=0;TR0=0;cunt+;if(cunt=10000)cunt=0;cunt_disp();