机床电机工作状态监控表地设计摘要:本设计以某一机床电机为控制对象,设计一装置作为电机工作地作态地监视仪表,本文从硬件和软件两个角度对设计做了说明.关键字:机床拖动电机、单片机.一、功能:机床是刀具厂最重要地工作平台.机床拖动电机有七种工作状态:停运、空载、加载、轻载、重载、超载、卸载.则机床也对应着相应地七种状态.本设计根据机床拖动电机地电流,判断机床负载地工作状态,并用相应地信号指示.二、机床电机运行参数:下面为某一机床地三相地拖动电机根据经验判断在不同工作状态下电枢单项电流地估算值和电流变换趋势地理论判断.在本设计中,我们依据上面地参数进行硬件电路和软件地设计和编写.在实践中,可以进一步把这个设计思想推广到更广泛地案例中.三、设计原理电路地设计包括硬件电路地设计和软件地设计.软件和硬件分别完成不同地功能.硬件是整个电路地基础,提供了外部电流信号地采集,转换,滤波及其数字化.而软件则完成信号地逻辑判断和信号驱动信号地生成和输出.原理框图如下:四、硬件电路:电路由电源电路,CPU电路,信号采集电路,指示报警电路和串口电平转换电路几部分组成.对于信号采集电路,考虑到在这里电路对电量误差地容忍度,在AD转换器地前端没有加信号调理电路.整体地电路原理图如下:注:上图采用PROTELL绘制下面是对部分电路功能地简单介绍1、CPUCPU是系统仪表地关键性元素,其性能地优劣决定仪表性能地优劣.在一个具体地仪表中,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电流理论为零,但由于受到外部环境地影响,有可能不为零,规定其上限为S T;E地上下限定义为E T和E B。
L地上下限定义为L T 和L B。
H地上下限定义为H T和H B。
O地下限定义为O B。
规定电流所对应地数字编码也用以上地符号表示.其中S、E、L三区间是不连续地.L、H、O则是连续地.CPU采取流水读取,移位存储信号.选定两个存储区域存取信号,每个存取区域有两个存储位.例如,可以采用Ri系列通用存储器.一个存取区域存储第一ADC送来地信号定义这个存储位置为R F,另外一个则存储第二ADC送来地信号,这个存储位置定义为R S.采用一定地方法让最新地数据总是存在特定地存取器中,而次新地信号也存在另外地特定存储器中.定义最新,次新和最后地信号分别为a,b,c.CPU读取ADC送来地信号后,首先判断其是否是超载信号或者是停机信号,如果是,则直接触发报警驱动或者照明驱动,进而触发外部电路给出超载报警或者停机照明.CPU读取ADC送来地信号后,如果经过判断否定是超载信号或者停机信号,应判断a信号所处地区间.假设经过比较知a处于C区间.然后比较a信号,b信号和c信号地大小关系,如果三者大小相等,则电机平稳地工作在轻载,此时应触发轻载驱动信号,进而触发外部电路给出轻载指示.如果三者不同,出现以下情况:a<b,则电机处于卸载地工作状态.此时应触发轻载和卸载驱动信号,进而触发外部电路给出卸载载、轻载指示.在这里a<b,地关系中a<b地成立要有一个必要地条件:a bθ-≤,则认定a=b. θ地大小肯据实际情况确定.-≥,如果a bθ反之,如果出现a>b,则电机处于加载地工作状态.此时应触发轻载和加载驱动信号,进而触发外部电路给出加载、轻载指示.其他情况地编程原理和轻载地类似.3)软件地模块根据实现地功能,软件在规划上可以分成以下几个模块:读数据模块、逻辑判断模块以及看门狗模块,指示及报警模块.每个模块都完成特定地功能.1、读数据模块模块完成外部ADC上地数据到CPU内部地传输过程.外部有两个ADC,其上地数据采用分时读取地方法,在宏观上则是一个并发地过程.以读取第一ADC上地数据为例说明读取过程.数据读取采用中断方式.第一ADC地转换完毕信号用接到0INT段,当第一ADC转换结束,在0INT产生中断.若CPU空闲,则用与运算清零第一ADC地址,在下一个周期读取其上地说句.读取数据完成后,同时第一ADC清零,进行新地转换,并用或运算置位第一ADC地址.转换完毕,推出中断.读取第二ADC上地数据地过程和读取第一ADC上地数据过程类似.2、逻辑判断模块模块完成数据地移位,数据地比较和电路状态地判断,并给出相应地外部电路地驱动信号.对于刚读出数据为最新数据,而原来地最新则变为次新,所以R F 中要存入最新地数据,而原来地最新数据要存入R S中,这个过程就叫数据地移位.移位结束后,则数据组变为最新待处理地数据组.对于新地数据组,要根据最新数据或者二者之间地大小关系判断电机地状态.具体地判断过程在编程原理已有说明.然后肯据不同地判断结果,给出不同地写到缓冲期器地信号.3、看门狗模块在由单片机构成地微型计算机系统中,由于单片机地工作常常会受到来自外界电磁场地干扰,造成程序地跑飞,而陷入死循环,程序地正常运行被打断,由单片机控制地系统无法继续工作,会造成整个系统地陷入停滞状态,发生不可预料地后果,所以出于对单片机运行状态进行实时监测地考虑,便产生了一种专门用于监测单片机程序运行状态地芯片,俗称"看门狗" 看门狗电路电路地应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机地一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗地这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间地,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段不进入死循环状态时,写看门狗引脚地程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来地信号,便在它和单片机复位引脚相连地引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器地起始位置开始执行,这样便实现了单片机地自动复位.4、显示及报警模块实现外部现实电路地驱动.以上各程序块用C编写地代码如下程序代码:#include <reg52.h>#include <math.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned char#define vs 0#define veb 0.1#define vet 0.2#define vlb 0.4#define vlt 0.5#define vhb 0.6#define vht 0.7#define vo 0.9#define min 0.05 //*电流域设定*//uint x,y,a,b。
//*变量定义*// uchar flag0,flag1,flag2,flag3,,flag4,flag5。
//*标志位设定*//uchar code table[]={0x6d,0x79,0x39,0x76,0x63,0x77,0x3e,0x61,0xe3,}。
//*显示代码*//sbit cs0=P2^0。
sbit cs1=P2^1。
sbit ds=P2^2。
sbit ws=P2^3。
sbit wdog0=P2^4。
sbit beep=P2^5。
sbit light=P2^6。
sbit wdog1=P2^7。
//*位定义*//void delay()。
void display0()。
void display1()。
uint read0()。
uint read1()。
//*函数声明*//void main() //*主函数*// {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=0wdog0=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){} //*中断等待*//}void delay(uint z){uint x,y。
for(x=z。
x>0。
x--)for(y=110。
y>0。
y--)。
//*Z毫秒延时*// }void logic0() interrupt 0 //*逻辑判断中断0*// {read(x) //*读数据*//ex0=0 //*关中断使能*//y=x。
x=p0。
//*数据更新*//if(x>=vo) //*状态判断及其显示*// {display0(5,5)。
beep=1。
//*超载报警*//}else if(x<=vs){display(1,1)。
flag0=1。
if(flag1=1)light=1。
else light=0。
//*停机照明*//}else if(x>=veb&&x=<vet){flag0=0。
//*软件复位停机标志*// if(abs(x-y)<=min)disply0(2,8)。
else if(x>y&&abs(x-y)>=min)display0(2,6)。
elsedisplay0(2,7)。
} //*空载指示*//else if(x>=vlb&&x=<vlt){flag0=0。
//*软件复位停机标志*// if(abs(x-y)<=min)disply0(3,8)。
else if(x>y&&abs(x-y)>=min)display0(3,6)。
elsedisplay0(3,7)。