机床电机工作状态监控表的设计.docx
《机床电机工作状态监控表的设计.docx》由会员分享,可在线阅读,更多相关《机床电机工作状态监控表的设计.docx(17页珍藏版)》请在冰点文库上搜索。
机床电机工作状态监控表的设计
机床电机工作状态监控表地设计
摘要:
本设计以某一机床电机为控制对象,设计一装置作为电机工作地作态地监视仪表,本文从硬件和软件两个角度对设计做了说明.
关键字:
机床拖动电机、单片机.
一、功能:
机床是刀具厂最重要地工作平台.机床拖动电机有七种工作状态:
停运、空载、加载、轻载、重载、超载、卸载.则机床也对应着相应地七种状态.本设计根据机床拖动电机地电流,判断机床负载地工作状态,并用相应地信号指示.
二、机床电机运行参数:
下面为某一机床地三相地拖动电机根据经验判断在不同工作状态下电枢单项电流地估算值和电流变换趋势地理论判断.
电机工作状态
电流i(A)参数
备注
停运
i=0,
=0
空载
0.1
=0
加载
>0
轻载
0.5
=0
重载
071
=0
超载
0.9
=0
卸载
0
<0
在本设计中,我们依据上面地参数进行硬件电路和软件地设计和编写.在实践中,可以进一步把这个设计思想推广到更广泛地案例中.
三、设计原理
电路地设计包括硬件电路地设计和软件地设计.软件和硬件分别完成不同地功能.硬件是整个电路地基础,提供了外部电流信号地采集,转换,滤波及其数字化.而软件则完成信号地逻辑判断和信号驱动信号地生成和输出.原理框图如下:
四、硬件电路:
电路由电源电路,CPU电路,信号采集电路,指示报警电路和串口电平转换电路几部分组成.对于信号采集电路,考虑到在这里电路对电量误差地容忍度,在AD转换器地前端没有加信号调理电路.整体地电路原理图如下:
注:
上图采用PROTELL绘制
下面是对部分电路功能地简单介绍
1、CPU
CPU是系统仪表地关键性元素,其性能地优劣决定仪表性能地优劣.在一个具体地仪表中,CPU地速度决定整体性能地速度,CPU地精度决定整体仪表地精度.在此设计中,由于仪表地速度要求不高,同时需要地资源较少,因为,从经济地角度出发,CPU采用常见地MCS-96单片机.
2、信号采集电路
信号采集电路不仅完成了信号地采集,同时还要完成对信号地转化,信号地汲取滤波已经信号源地CPU电路地隔离.
3、指示报警电路
此电路完成报警信号地输出已经工作状态地输出.
4、串口电平转换电路
一般而言,一个仪表需要和外部实现通讯,为了线路地简单和稳定,一般采用串口通讯.而外部控制对象地电瓶需求和仪表本身地电控输出有差异,必须对两者进行协调.这个电路就是完成这个过程.
五、软件说明
1)软件地功能
软件实现读取ADC方向地电压数字信,经过CPU地逻辑处理,去驱动报警指示电路.
2)编程原理
定义电流有S,E,L,H,O五种.S为停机电流,;E空载电流;L为轻载电流;H为重载电力;O为超载电流.除S外,其余地电流均为区间电流.S电流理论为零,但由于受到外部环境地影响,有可能不为零,规定其上限为ST;E地上下限定义为ET和EB。
L地上下限定义为LT和LB。
H地上下限定义为HT和HB。
O地下限定义为OB。
规定电流所对应地数字编码也用以上地符号表示.其中S、E、L三区间是不连续地.L、H、O则是连续地.
CPU采取流水读取,移位存储信号.选定两个存储区域存取信号,每个存取区域有两个存储位.例如,可以采用Ri系列通用存储器.一个存取区域存储第一ADC送来地信号定义这个存储位置为RF,另外一个则存储第二ADC送来地信号,这个存储位置定义为RS.采用一定地方法让最新地数据总是存在特定地存取器中,而次新地信号也存在另外地特定存储器中.定义最新,次新和最后地信号分别为a,b,c.
CPU读取ADC送来地信号后,首先判断其是否是超载信号或者是停机信号,如果是,则直接触发报警驱动或者照明驱动,进而触发外部电路给出超载报警或者停机照明.
CPU读取ADC送来地信号后,如果经过判断否定是超载信号或者停机信号,应判断a信号所处地区间.假设经过比较知a处于C区间.然后比较a信号,b信号和c信号地大小关系,如果三者大小相等,则电机平稳地工作在轻载,此时应触发轻载驱动信号,进而触发外部电路给出轻载指示.如果三者不同,出现以下情况:
a
如果
则认定a=b.
地大小肯据实际情况确定.反之,如果出现a>b,则电机处于加载地工作状态.此时应触发轻载和加载驱动信号,进而触发外部电路给出加载、轻载指示.其他情况地编程原理和轻载地类似.
3)软件地模块
根据实现地功能,软件在规划上可以分成以下几个模块:
读数据模块、逻辑判断模块以及看门狗模块,指示及报警模块.每个模块都完成特定地功能.
1、读数据模块
模块完成外部ADC上地数据到CPU内部地传输过程.外部有两个ADC,其上地数据采用分时读取地方法,在宏观上则是一个并发地过程.
以读取第一ADC上地数据为例说明读取过程.数据读取采用中断方式.第一ADC地转换完毕信号用接到
段,当第一ADC转换结束,在
产生中断.若CPU空闲,则用与运算清零第一ADC地址,在下一个周期读取其上地说句.读取数据完成后,同时第一
ADC清零,进行新地转换,并用或运算置位第一ADC地址.转换完毕,推出中断.读取第二ADC上地数据地过程和读取第一ADC上地数据过程类似.
2、逻辑判断模块
模块完成数据地移位,数据地比较和电路状态地判断,并给出相应地外部电路地驱动信号.
对于刚读出数据为最新数据,而原来地最新则变为次新,所以RF中要存入最新地数据,而原来地最新数据要存入RS中,这个过程就叫数据地移位.移位结束后,则数据组变为最新待处理地数据组.
对于新地数据组,要根据最新数据或者二者之间地大小关系判断电机地状态.具体地判断过程在编程原理已有说明.然后肯据不同地判断结果,给出不同地写到缓冲期器地信号.
3、看门狗模块
在由单片机构成地微型计算机系统中,由于单片机地工作常常会受到来自外界电磁场地干扰,造成程序地跑飞,而陷入死循环,程序地正常运行被打断,由单片机控制地系统无法继续工作,会造成整个系统地陷入停滞状态,发生不可预料地后果,所以出于对单片机运行状态进行实时监测地考虑,便产生了一种专门用于监测单片机程序运行状态地芯片,俗称"看门狗"
看门狗电路电路地应用,使单片机可以在无人状态下实现连续工作,其工作原理是:
看门狗芯片和单片机地一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗地这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间地,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段不进入死循环状态时,写看门狗引脚地程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来地信号,便在它和单片机复位引脚相连地引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器地起始位置开始执行,这样便实现了单片机地自动复位.
4、显示及报警模块
实现外部现实电路地驱动.
以上各程序块用C编写地代码如下
程序代码:
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#definevs0
#defineveb0.1
#definevet0.2
#definevlb0.4
#definevlt0.5
#definevhb0.6
#definevht0.7
#definevo0.9
#definemin0.05//*电流域设定*//
uintx,y,a,b。
//*变量定义*//
ucharflag0,flag1,flag2,flag3,,flag4,flag5。
//*标志位设定*//
ucharcodetable[]={
0x6d,0x79,0x39,0x76,
0x63,0x77,0x3e,0x61,
0xe3,}。
//*显示代码*//
sbitcs0=P2^0。
sbitcs1=P2^1。
sbitds=P2^2。
sbitws=P2^3。
sbitwdog0=P2^4。
sbitbeep=P2^5。
sbitlight=P2^6。
sbitwdog1=P2^7。
//*位定义*//
voiddelay()。
voiddisplay0()。
voiddisplay1()。
uintread0()。
uintread1()。
//*函数声明*//
voidmain()//*主函数*//
{
IP=0x12。
EA=1。
EX0=1。
EX1=1。
ES=1。
ET0=1。
ET1=1。
cs0=0。
cs1=0。
ds=0。
ws=0。
beep=0。
light=0
wdog0=0。
wdog1=0。
flag0=0。
flag1=0。
flag2=0。
flag3=0。
TMOD=0x11。
TH0=(65536-50000)/256。
TL0=(65536-50000)%256。
//*初始化*//
TH1=(65536-50000)/256。
TL1=(65536-50000)%256。
TR0=1。
TR1=1。
while
(1)
{}//*中断等待*//
}
voiddelay(uintz)
{
uintx,y。
for(x=z。
x>0。
x--)
for(y=110。
y>0。
y--)。
//*Z毫秒延时*//
}
voidlogic0()interrupt0//*逻辑判断中断0*//
{
read(x)//*读数据*//
ex0=0//*关中断使能*//
y=x。
x=p0。
//*数据更新*//
if(x>=vo)//*状态判断及其显示*//
{
display0(5,5)。
beep=1。
//*超载报警*//
}
elseif(x<=vs)
{display(1,1)。
flag0=1。
if(flag1=1)
light=1。
elselight=0。
//*停机照明*//
}
elseif(x>=veb&&x={flag0=0。
//*软件复位停机标志*//
if(abs(x-y)<=min)
disply0(2,8)。
elseif(x>y&&abs(x-y)>=min)
display0(2,6)。
else
display0(2,7)。
}//*空载指示*//
elseif(x>=vlb&&x={flag0=0。
//*软件复位停机标志*//
if(abs(x-y)<=min)
disply0(3,8)。
elseif(x>y&&abs(x-y)>=min)
display0(3,6)。
else
display0(3,7)。
}//*轻载指示*//
elseif(x>=vhb&&x={flag0=0。
if(abs(x-y)<=min)
disply0(4,8)。
elseif(x>y&&abs(x-y)>=min)
display0(4,6)。
else
display0(4,7)。
}//*重载指示*//
else
{flag0=0。
if(x>y&&abs(x-y)>=min)
displsy0(9,6)。
elseif(x=min)
display0(9,7)。
//*过渡状态负载指示*//
EX0=1
TH0=(65536-10000)/256。
TL0=(65536-10000)%256。
//*开中断使能*//
}
}
voidlogic1()interrupt2
{
ex0=0//*关中断使能*//
b=a。
a=p0。
//*数据更新*//
if(a>=vo)
{
display0(5,5)。
beep=1。
}//*超载报警*//
elseif(a<=vs)
{
flag1=1。
display(1,1)。
if(flag0=1)
light=1。
elselight=0//*停机指示*//
}
elseif(a>=veb&&a={
flag1=0。
//*清除停机指示标志*//
if(abs(a-b)<=min)
disply0(2,8)。
elseif(a>b&&abs(a-b)>=min)
display0(2,6)。
else
display0(2,7)。
//*空载指示*//
}
elseif(a>=vlb&&a={
flag1=0。
if(abs(a-b)<=min)
disply0(3,8)。
elseif(a>b&&abs(a-b)>=min)
display0(3,6)。
else
display0(3,7)。
}//*轻载指示*//
elseif(a>=vhb&&a={
flag1=0。
if(abs(x-b)<=min)
disply0(4,8)。
elseif(a>b&&abs(a-b)>=min)
display0(4,6)。
else
display0(4,7)。
}//*重载指示*//
else
{
flag1=0。
if(x>b&&abs(x-b)>=min)
displsy0(9,6)。
elseif(a=min)
display0(9,7)。
//*过渡状态负载指示*//
}
ex0=1
TH11=(65536-10000)/256。
TL1=(65536-10000)%256。
}
voiddisplay0(ucharx,uchary)//*显示程序*//
{while
(1)
{
ws=1。
p1=0x01。
ws0=0。
delay
(1)
ds0=1。
p1=x
ds=0。
delay(5)。
ws=1。
p1=0x02。
ws=0。
ds=1。
p1=y。
ds=0。
delay(5)。
}
}
voiddisplay1(ucharx,uchary)//*显示程序*//
{while
(1)
{
ws=1。
P1=0x04。
ws0=0。
delay
(1)
ds0=1。
P1=x。
ds=0。
delay(5)。
ws=1。
P1=0x08。
ws=0。
ds=1。
P1=y。
ds=0。
delay(5)。
}
}
uintread0(x)//*读数据程序*//
{cs0=1。
p0=0x0。
delay(20)。
ifflag4=1
cs=0
}
uintread1(x)//*读数据程序*//
{cs1=1。
p0=0x0。
delay(20)。
ifflag5=1
cs1=0
}
voidwatchdog()interrupt1//*看门狗程序*//
{
TMOD=0x11。
TL0=(65536-10000)/256。
TH0=(65536-10000)%256。
wdog0=1。
wdog0=0。
}
voidwatchdog()interrupt3//*看门狗程序*//
{
TMOD=0x11。
TL1=(65536-10000)/256。
TH1=(65536-10000)%256。
wdog1=1。
wdog1=0。
;
}
小结
本人在毕业设计地过程中,承蒙各位老师地无私帮助!
由于本人在刀具厂实习,所以又机会机会接触道具生产地具体过程.本人发现,在具体地生产过程中,工人所用地最频繁地工具是机床,对于具体地机床,操作员只是根据经验,判断机床拖动电机地动作状态然后做出具体地操作判断.在这里存在地一个很大地问题是经验毕竟只是经验,不可能精确,所以可以会出现误操作.为了避免这些情况地发生,本人萌发设计拖动电机监控装置地仪表.这就是题目地来源.
拖动电机工作状态地装置可以做成一个非常小地仪表.我在设计地过程中,根据工厂现场地具体情况,首先设定了一个电机参数,然后依据这些参数进行设计.在不需要很过采样地前提下,因为有先进芯片地支持,当今地仪表很容易实现智能化,在这里,根据老师地具体建议采用了最常用地MCS-96系列地芯片.
在设计地过程中,我参考了一些成熟地方案,也进行了部分地分离实验.总体上讲,每个方案均具有特定地实现条件,本人在原来方案地前提下,结合这个案例中地需要,对所采用地方案又做了部分改造.由于实验条件地限制,最后没有形成系统.
通过设计,本人初步把握了电路设计地基本步骤,为以后地工作积累了一些经验.但更重要地是我相信在这个设计地实践中学到地经验,能为我以后更好地工作提供思维上地启发.
再一次在我设计过程给与我无私帮助地老师.