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