基于单片机的可编程控制器的设计.docx
- 文档编号:17123135
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:44
- 大小:521.26KB
基于单片机的可编程控制器的设计.docx
《基于单片机的可编程控制器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的可编程控制器的设计.docx(44页珍藏版)》请在冰点文库上搜索。
基于单片机的可编程控制器的设计
基于单片机的可编程控制器的设计
专业:
自动化
班级:
2009级1班
学号:
091004118
姓名:
徐廷杰
答辩日期:
2013年6月10日
摘要
随着自动化智能产品的大量兴起,民用自动化产品更新换代极快,要求自动控制系统的精度、工作效率大大提高,所以民用自动控制前景很大,自动控制系统主要采用PLC进行控制,但PLC价格昂贵。
由于单片机价格低廉、使用简单、精度高等特点,本设计采用单片机制作控制器,来实现PLC的控制功能,设计人员只需一点C语言基础,就可以编写可编程控制器的程序。
根据控制要求设计电路,最终制作出能实现控制器功能的PCB板,即为用户降低设计成本,又能方便设计人员使用。
编程语言使用C语言的可编程控制器扩大了使用人群的范围,并且有程序的工程模版,很大程度上降低了编程的难度。
接线操作简单,控制对象不管是交流、直流均可,并且控制精准。
支持模拟量的输入输出,控制更智能。
PCB电路板经过敷铜处理,极大的提高了抗干扰性。
关键词:
单片机;可编程控制器;C
Abstract
Withagrowingnumberofautomatedintelligenceproducts,civilianautomationproductreplacefast,automaticcontrolsystemrequiresprecisionandefficiencyarebothbeengreatlyimproved,solargecivilautomaticcontrolhaveabrightfuture.automaticcontrolsystemismainlycontrolledbyPLC,butitisveryexpensive.ComparedwithPLC,themicrocontrollerischeap,easytouse,highprecision,thedesignusessingle-chipcontrollertoachievePLCcontrolfunctions,designersneedalittleCprogrammingknowledge,youcanuseittocontrol.Accordingtothecontrolrequirementsofcircuitdesign,itcanmadePCBboardwiththesamecontrolfunction.Itcanreducedesigncosts,butalsofacilitatethedesigner.
Mostofthepeoplecanusethespecialprogrammablecontroller,expandthescopeofusingcrowd,programmegreatlyreduethedifficutlyofprogram.Wiringissimple,thecontrolobjectwhetheritisACorDC.Theycanbothwrokandbeaccurate.Supportinganaloginputandoutput,controlmoreintelligently.PCBcircuitboardthroughcopperprocessing,greatlyimprovestheimmunity.Theresultstellthetruth,thecontrolsystemcontrollingcivilianexhibitexcellentstabilityandgoodrunnability.
Keywords:
microcontroller;programmablecontroller;C
引言
可编程逻辑控制器(ProgrammableLogicController,PLC),它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程[1]。
采用简明的梯形图、逻辑图或语句表等编程语言,而无需计算机知识,因此系统开发周期短,现场调试容易。
另外,可在线修改程序,改变控制方案而不拆动硬件。
一台小型PLC内有成百上千个可供用户使用的编程元件,有很强的功能,可以实现非常复杂的控制功能。
它与相同功能的继电器系统相比,具有很高的性能价格比。
PLC可以通过通信联网,实现分散控制,集中管理。
PLC产品已经标准化、系列化、模块化,配备有品种齐全的各种硬件装置供用户选用,用户能灵活方便地进行系统配置,组成不同功能、不同规模的系统。
PLC的安装接线也很方便,一般用接线端子连接外部接线。
PLC有较强的带负载能力,可以直接驱动一般的电磁阀和小型交流接触器。
硬件配置确定后,可以通过修改用户程序,方便快速地适应工艺条件的变化。
传统的继电器控制系统使用了大量的中间继电器、时间继电器,由于触点接触不良,容易出现故障。
PLC用软件代替大量的中间继电器和时间继电器,仅剩下与输入和输出有关的少量硬件元件,接线可减少到继电器控制系统的1/10-1/100,因触点接触不良造成的故障大为减少。
PLC采取了一系列硬件和软件抗干扰措施,具有很强的抗干扰能力,平均无故障时间达到数万小时以上,可以直接用于有强烈干扰的工业生产现场,PLC已被广大用户公认为最可靠的工业控制设备之一。
PLC用软件功能取代了继电器控制系统中大量的中间继电器、时间继电器、计数器等器件,使控制柜的设计、安装、接线工作量大大减少。
PLC的梯形图程序一般采用顺序控制设计法来设计。
这种编程方法很有规律,很容易掌握。
对于复杂的控制系统,设计梯形图的时间比设计相同功能的继电器系统电路图的时间要少得多[2]。
PLC的用户程序可以在实验室模拟调试,输入信号用小开关来模拟,通过PLC上的发光二极管可观察输出信号的状态。
完成了系统的安装和接线后,在现场的统调过程中发现的问题一般通过修改程序就可以解决,系统的调试时间比继电器系统少得多。
PLC的故障率很低,且有完善的自诊断和显示功能。
PLC或外部的输入装置和执行机构发生故障时,可以根据PLC上的发光二极管或编程器提供的信息迅速地查明故障的原因,用更换模块的方法可以迅速地排除故[3]。
但是PLC产品价格昂贵,编程主要是梯形图使用人群范围窄。
而用单片机制作的控制器成本相当低廉,使用简单,此外,PLC编程用的是梯形图,电气相关的专业编程很容易,其他的专业很难说容易。
可编程控制器也是参照PLC的原理制作而成,开关量输出是继电器输出,开关量输入,模拟输入输出。
但是编程是C语言,工科学生基本上都学过C语言,所以很容易上手,加上此可编程控制器的程序建立了工程模板,所以不需要复杂的编程,编程很简单,只需要开关量的判断,函数的调入,时间控制只需要时间函数的调入,这些函数都是已写好。
PLC在工业自动化上一直迅速增长,但是民用很难接受,PLC的价格昂贵,因为隔行如隔山对于普通人来说使用是复杂的,所以在民用市场还是一片空白。
可编程控制器不用于工业控制,针对民用开发的,不仅价格低廉,还使用简单实用。
现在民间的控制几乎是继电器控制,但是继电器不是智能控制,而且成本也是很昂贵,加上继电器控制的逻辑很简单,不用于复杂的,以前工业上用PLC代替继电器,现在此产品代替民用的继电器。
大家公认的是现在是智能社会,但是很多产品是标准的,但是我们每一个人的需求不是标准的,继而此可编程控制器就是用于非标的,因为它能编程,能让按照自己的想法去做。
可编程控制器可以控制家庭中大部分的电器,可以控制空调、冰箱、热水器、豆浆机等也就是说通用性好。
还有最大的优势就是此可编程控制器的价格低廉,成本远小于PLC。
由于现在人们的素质极大的提高,很多人都会C语言但是不一定会梯形图,所以在使用上比PLC更有优势。
但是此可编程控制器不用于工业控制,针对民用自动化和民用自动控制,此控制器不仅价格低廉,而且使用简单实用。
现在民间的控制几乎是继电器控制,但是继电器不是智能控制,而且成本也是很昂贵,加上继电器不能控制的逻辑复杂的控制,以前工业上用PLC代替继电器,现在此产品代替民用的继电器。
现在人们的素质极大的提高,很多人都会C语言但是不一定会梯形图这语言,所以在使用上比PLC更有优势。
1可编程逻辑控制器控制系统的功能需求分析
1.1控制系统的硬件功能分析
可编程控制系统分为三个部分。
首先,开关量输入输出,它的输出是继电器输出,负载不管是直流还是交流均可,它的输入是由三极管放大输入(0-5V),然后它的模拟量输入输出,模拟量输入能识别(0-5V)的电压,模拟输出能输出(0-5V)的电压。
最后它的核心控制系统为单片机控制,控制性灵活。
一开始用ProtelDXP画原理图,画好原理图后生成PCB,最后制作成印制电路板,硬件仿真用Proteus软件仿真[4]。
1.2控制系统的软件功能分析
软件是对单片机的编程了,编程的软件是keil,目前keil是比较流行的软件,很多人对单片机编程是通过keil编写。
编写此程序是编写一个工程模版,用户一开始直接就可以编写程序,调用函数就不用编写底层程序,这样给用户带来极大的方便和减少他们的编写程序的复杂程度,加上此工程模版高度优化,用户只需要懂得很少的C语言基础就行了。
编程界面如图1所示:
图1keil软件界面图
2可编程控制器控制系统的硬件设计
2.1单片机的选用
单片机的种类较多,本设计选用的是AT89S52[5]是51系列单片机的一个型号,他是ATMEL公司生产的。
AT89S52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89S52单片机可为提供许多较复杂系统控制应用场合[6]。
引脚如图2所示:
图2单片机AT89S52的引脚图
2.2模拟芯片的简介
模拟芯片PCF8591[6]是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。
PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件引脚如图3所示。
在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。
PCF8591的最大转化速率由I2C总线的最大速率决定。
算法:
8位,28次方为255,因为芯片的基准电压是5V,所以255对应最大值是5V,所以分辨率是5/255,所以实际AD数值数的算法:
已知电压U*255/5这就是模拟芯片的电压的算法[7]。
如表1所示:
表1PCF8591的引脚配置
引脚端口
功能
AIN0~AIN3
模拟信号输入端
A0~A2
引脚地址端
VDD、VSS
电源端(2.5~6V)
SDA、SCL
总线的数据线
OSC
外部时钟输入端
EXT
内部、外部时钟选择线
AGND
模拟信号地
AOUT
D/A转换输出端
VREF
基准电源端
图3单片机PCF8591的引脚图
2.3电源电路的设计
电源是各种电子设备必不可少的组成部分,其性能的优劣直接关系到电子设备的技术指标以及能否安全可靠的工作。
目前常用的直流稳压电源分线性电源和开关电源两大类。
随着集成电路飞速发展,稳压电路也迅速实现集成化,市场上已有大量生产各种型号的单片机集成稳压电路。
它和分立的晶体管电路比较,具有很多突出的优点,主要体现在体积小、重量轻、耗电省、可靠性高、运行速度快,且调试方便、使用灵活,易于进行大量自动化生产。
各种电子电路都要求用稳定的直流电源供电,由整流滤波电路可输出较为平滑的直流电压,但当电网电压波动或负载改变时,将会引起输出端电压改变而不稳定。
为了获得稳定的输出电压,滤波电路的输出电压还应该经稳压电路进行稳压。
电源由电源变压器、整流电路、滤波电路、稳压电路组成。
电源变压器:
将电网提供的220V交流电压转换成为各种电路设备所需的交流电压。
整流电路:
利用单向导电器件将交流电转换成脉动直流电路。
滤波电路:
利用储能元件电容把脉动直流电转换成比较平坦的直流电。
稳压电源:
利用电路的调整作用使输出电压稳定的过程称为稳压。
2.3.1稳压器的选用
集成稳压器是指将不稳定的直流电压变为稳定的直流电压的集成电路。
由于集成稳压器具有稳压精度高、工作稳定可靠、外围电路简单、体积小、重量轻等显著优点,在各种电源电路中得到了普遍的应用。
常用的集成稳压器有:
金属圆形封装、金属菱形封装、塑料封装、带散热板塑封、扁平式封装、双列直插式封装等。
在电子制作中应用的较多的是三端固定输出稳压器。
78XX系列集成稳压器是常用的固定正输出电压的集成稳压器,输出电压有5V、6V、9V、12V、15V、18V、24V等规格,最大输出电流为1.5A。
它的工作原理:
取样电路将输出电压按比例取出,送入比较放大器与基准电压进行比较,差值被放大后去控制调整管,以使输出电压保持稳定。
它的内部含有限流保护、过热保护和过压保护电路,采用了噪声低、温度飘逸小的基准电压源,工作稳定可靠。
78XX系列集成稳压器为三端器件,一脚为输入端,一脚为接地端,一脚为输出端,使用十分方便。
在此设计中选用的是78XX系列中的7805,它能够提供多种固定的输出电压,应用范围广。
内含过流、过热和过载保护电路。
带散热片时,输出电流可达1A,虽然是固定稳压电路,但使用外接元件,可获得不同的电压和电流。
在本设计中就是利用它把12V的直流电压变成5V的稳定电压给单片机提供电源,以确保正常工作。
2.3.2电源工作原理
整个电源控制电路采用变压器降压、整流桥整流等方法获得工作电源。
当电源插头插入220V交流电,变压器开始对220V交流电进行降压,从次级输出12V左右的低压交流电,从而适应电路的使用要求。
整流硅对次级输出的交流电进行桥式整流,再由C2进行滤波,已形成较平滑的直流电,送给三端集成正输出稳压器7805进行稳压调整。
经7805稳压作用后输出+5V的直流电压,经C3滤波后输出纹波很低的+5V电压,作为单片机的工作电源,以保证单片机工作时的稳定和可靠[8]。
设计如图4所示:
图4控制系统的电源电路
2.4可编程控制器输出输入电路的设计
首先是设计继电器输出驱动部分[9],由于单片机的驱动电流太小,不能直接驱动继电器,驱动继电器需要三极管放大电路,这里选取的三极管是S8550的三极管PNP[10]。
三极管8550是一种常用的普通三极管。
它是一种低电压,大电流,小信号的PNP型硅三极管。
继电器是5V的电压就能正常工作,这个继电器有5个引脚,其中如图接线的两个引脚是接直流驱动引脚,剩下的三个引脚能组成常开和常闭。
继电器的输出的I/O端口分别是O1、O2、O3、O4。
对应的引脚:
O1=P1^0;O2=P1^1;O3=P1^2;O4=P1^6。
设计如图5所示:
图5继电器输出电路图
然后设计三极管S8550输入电路的设计,输入电路不外乎检测是否有高电平和低电平。
单片机的输入需要一个上拉电阻,加一个三极管的目的是输入更灵敏。
为什么要用NPN三极管,这是不光是增加灵敏度,还有更大的原因是输入端跟GND(COM)一旦接触,此时就有一个输入信号。
这个图的原理是:
当三极管检测到有低电平,三极管的基集会导通,从而三极管导通,给单片机一个低电平信号,这里为什么要一个上拉电阻呢,原因是上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用[11]。
三极管输入的定义为:
S1、S2、S3、S4、S5、S6、S7、S8。
对应的I/O为:
sbits1=P0^0;s2=P0^1;s3=P0^2;s4=P0^3;s5=P0^4;s6=P0^5;s7=P0^6;s8=P0^7;设计如图6:
图6三极管输入电路图
2.5模拟输入输出电路的设计
最后还要设计模拟的输入输出,模拟的输入输出是通过PCF8591模拟芯片和单片机通信。
它的通信方式是I2C通信。
它的设计图如下,SCL和SDA是和单片机通信的端口[12],它也需要一个上拉电阻,让它保持高电平。
其他不用的端口接地。
这里SCL与单片机P2.0,SDL与单片机P2.1相接。
其中基准电源VREF接5V,这里只选取了AIN0。
其中8引脚VSS和16引脚VDD为电源引脚[13],其中VSS为5V,VDD为GND。
设计如图7所示:
图7三极管输入电路图
2.6整个原理图的设计
本原理图是用Proteus软件绘制,绘制了电源部分,继电器输出部分(带有负载以便仿真),三极管输入部分,蜂鸣器,模拟芯片部分等。
见附录。
2.7生成PCB及敷铜
控制器的PCB是双面板,走的线是顶层和底层,照着原理图生产PCB,PCB用ProtelDXP绘制,继电器的封装是RLY-JZC7FF,三极管的封装是TO-90,7805的封装是TO-220,电阻的封装是AXIAL0.5,蜂鸣器的封装是BUZ,单片机的封装是DIP40,PCF8591的芯片的封装是DIP16,电容的封装是RAD0.1,整流器的封装是BRIGE[14]。
为了提高抗干扰性,PCB要经过敷铜处理[15]。
绘制的PCB如图8S所示:
图8整个PCB电路图
3编程控制系软件设计及调试
软件设计是通过Kile软件设计,设计是通过建立工程模版,减轻设计人员的编程难度。
先是通过建立子程序的形式建立模拟芯片的驱动程序,最后才是主程序。
定时器函数单位有1us、2us、5us、10us、20us、50us、100us、200us、500us、1ms、2ms、5ms、10ms、50ms、100ms、500ms、1s、2s、5s、10s精确的时间定时函数[16]。
模拟芯片为PCF8591的子程序设计,先写驱动程序,它是通过I2C与单片机通信的,I2C总线支持任何IC生产过程。
两线串行数据SDA和串行时钟SCL线在连接到总线的器件间传递信息。
每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器。
驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。
除了发送器和接收器外器件在执行数据传输时也可以被看作是主机或从机。
主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。
此时,任何被寻址的器件都被认为是从机。
写完通信协议后,然后写读取通道,读取电压值用调用temp函数AD转换成5V电压的算法:
读取AD读取的电压U1=dat*1.0/255*500,最后除以100就是AD读取的电压[17]。
计数器它是和输入S可以共用,因为输入能计数脉冲。
最后写一个主程序。
写程序只需在主程序while里写,调用其他的函数,I/O也是调用。
程序模版见附录2。
控制的原理图,控制的原理图分为输入部分S表示、输出部分O表示、模拟AI表示输入部分,temp是模拟调用函数(0-5V对应值0-500);S1导通O1,S2导通O2,S3导通O3,S4导通O4。
当模拟芯片端口AI读取NTC电压是2.5V时O1,O2,O3,O4都断开。
控制接线如图9所示:
图9控制接线图
以下是调试程序:
#include
#include
#include"delay.h"
#include
#defineuintunsignedint
#defineucharunsignedchar
/*******************************定义全局变量********************************/
unsignedchardat=0x00;//AD值
unsignedcharcount=0x00;//定时器计数
unsignedcharchannel;//通道变量
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
sbits1=P0^0;//输入1
sbits2=P0^1;//输入2
sbits3=P0^2;//输入3
sbits4=P0^3;//输入4
sbits5=P0^4;
sbits6=P0^5;
sbits7=P0^6;
sbits8=P0^7;
sbitO1=P1^0;//定义输出1
sbitO2=P1^1;//定义输出2
sbitO3=P1^2;//定义输出3
sbitSwitch=P1^3;//定义总开关按钮端口
sbitBeep=P1^4;//定义蜂鸣器端口
sbitLED=P1^5;//定义工作指示灯端口
sbitO4=P1^6;//输出4
sbitSda=P2^1;//定义总线连接端口
sbitScl=P2^0;
sbitJc=P2^3;//定义红外线检测端口
sbitLED1=P2^4;//定义加热指示灯端口
sbitLED2=P2^5;//
sbitLED3=P2^6;//
sbitLED4=P2^7;//
bitADFlag;//定义AD采样标志位端口
uchartemp;
while
(1)
{
ADFlag=0;
dat=Read_ADC(0);
temp=dat*1.0/255*500;
//电压值转换5V做为参考电压分成256份
if(s1==0)
{
O1=0;
LED1=0;
}//s1
if(s2==0)
{
O2=0;
LED2=0;
}//s2
if(s3==0)
{
O3=0;
LED3=0;
}//s3
if(s4==0)
{
O4=0;
LED4=0;
}//s4
if(temp>250)//如果电压大于2.5V
{
O1=1;
O2=1;
O3=1;
O4=1;
LED1=1;
LED2=1
LED3=1;
LED4=1;
}
}
}//endofmain
控制的效果如图10所示:
图10控制现场实物图
结论
本设计经过多次的修改和整理,经过多长实验,多次调试。
经过了从原理图到PCB,从PCB到原件焊接,然后编程调试。
可以满足设计的基本要求可以达到开关量的输入输出,模拟量的输入。
经过反复的实验,此可编程控制器可以控制家庭中大部分的电器,可以控制空调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 可编程控制器 设计