实验项目技术报告减速电机测控系统设计.docx
《实验项目技术报告减速电机测控系统设计.docx》由会员分享,可在线阅读,更多相关《实验项目技术报告减速电机测控系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
实验项目技术报告减速电机测控系统设计
实验项目技术报告-减速电机测控系统设计
实验内容
Ø减速电机-PWM调速;
Ø增量式编码器和74LS163计数器电机角位移、速度的测量;
Ø单片机串口通讯、定时器、带校验字节的数据传输;
ØVC中使用仪表类进行角度和位移的显示以及定时器的使用;
ØVC中滑块控件的使用;
ØVC中MSCOMM串口通讯控件的使用;
ØVC中数据的保存;
实验结果
实现PC机对步进电机角位移及速度的实时显示,利用测控系统操作界面对电机速度的连续调节,实现电机的启动、制动和速度及转向的控制。
实验所需元器件
减速电机(1只)、编码器(1024P)、74HC74-D触发器、HD74HC00P与非门(2只)、74LS193计数芯片(3片)、单片机(80C52一片)、L298N电机驱动模块(1片)、串口套件1套。
1.实验项目的整体结构
图1电机测控系统结构图
实验项目的整体结构如图1所示,其中,
Ø光电编码器通过联轴节与旋转电机连接,电机旋转编码器输出计数脉冲和校准脉冲信号;
ØD触发器、与非门及74LS193计数芯片完成编码器输出脉冲的计数和校准脉冲的自动清零;
Ø单片机采集计数器的数字信号,并将其通过串行总线RS232传送至计算机;
Ø计算机通过串口接收单片机发送的电机位置信息,进行动态显示、处理及保存;
Ø计算机通过串口发送控制电机旋转的电压控制量(0-255)和转向控制量(0或255);
Ø单片机通过串口接收上位机发送的转速和转向控制数据,将其转换为相应的PWM波,经L298N电机驱动模块完成电平转换,控制电机的转速和转向;
2.编码器脉冲计数电路
2.1光电编码器工作原理
光电编码器通过光电转换将电机轴上的机械几何位移量转换成脉冲数字量,其工作原理如图2所示,在圆盘上有规则地刻有透光和不透光的线条,在圆盘两侧,安放发光元件和光敏元件。
当圆盘旋转时,光敏元件接收的光通量随透光线条同步变化,光敏元件输出波形经过整形后变为脉冲,码盘上有定相标志,每转一圈输出一个校准脉冲。
此外,为判断旋转方向,码盘还可提供相位相差90º的两路脉冲信号。
1-轴;2-光源;3-A、B、C相狭缝;4-旋转板(光栅码盘);5-A、B、C受光元件;
图2光电编码盘原理
图3光电编码器的正反转信号
顺时针旋转时,通道A输出波形超前通道B波形90°;逆时针旋转时,通道A输出波形迟通道B波形90°;光电编码器每旋转一圈,输出一个基准脉冲Z,基准脉冲的波形中心对准通道A输出的波形中心,用于基准点定位,如图3。
光电编码盘的检测精度是一个重要的性能指标,它表明了光电编码每旋转一周可以输出多少个脉冲,显然,输出脉冲数越多,说明码盘的精度越高,本系统采用的光电编码盘输出1024个脉冲。
2.2光电编码盘的计数与鉴向
实验中采用的码盘是增量式码盘,增量式编码盘需要累加计数来完成角度检测,通常采用的计数电路大同小异,都是对编码器产生的脉冲进行计数来得到角度值,考虑到转盘转动是双向的,既可顺时针旋转,也可逆时针旋转,需要对编码器的输出信号鉴相后才能计数。
典型的编码器计数与鉴向电路如图4所示,鉴相电路用1个D触发器和2个与非门组成,计数电路用N片74LS193组成,N由所需的计数范围确定,本实验中,使用3片74LS193完成1024个脉冲的计数。
将编码器输出A相接D触发器D端,B相接触发器CP端,Z相接计数器74LS193的复位端RD,计数器复位初值为0000,即ABCD接地处理。
图4编码器典型的计数与鉴向电路
当光电编码器顺时针旋转时,通道A输出波形超前通道B输出波形90°,D触发器输出Q(波形W1)为高电平,Q(波形W2)为低电平,上面与非门打开,计数脉冲(B相)送至双向计数器74LS193的减脉冲输入端CPD,进行减法计数;此时,下面与非门关闭,其输出为高电平给CPU。
当光电编码器逆时针旋转时,通道A输出波形比通道B输出波形延迟90°,D触发器输出Q为低电平,上面与非门关闭,下面与非门打开,计数脉冲通过B相脉冲送至双向计数器74LS193的加脉冲输入端CPU,进行加法计数。
编码器每旋转一周,送出一个校准脉冲(高电平有效),计数器复位,所有计数器输出为0。
考虑到编码器旋转一周输出1024个脉冲,因此我们实验中使用单片机接收13位电机的位移信息,其中前11位为三个74LS193计数器输出,高2位分别接Q和/Q用来鉴相,11位数据与角位移的关系如表1所示。
表1计数电路输出与电机角位移对照表
11位二进制
十进制
角位移x/1024*360
01111111111
1023
1023/1024*360
↑
↑
↑
00000000001
1
1/1024*360
00000000000
0
0
11111111111
2047
-1/1024*360
↓
↓
↓
10000000001
1025
-1023/1024*360
由表中可以看出,使用11位来描述电机的角位移信息,当接收到的数据在[0~1023]围之内时,对应[0~1023]/1024*360°,当接收到的数据在[1025~2047]范围之内时,对应角度范围是{[1025~2047]-1024}/1024*360°。
3.L298N电机驱动
3.1L298N工作原理
从单片机的I/O口输出的一定脉宽的PWM波,经过L298n驱动电路对脉冲进行处理,输出直接控制电机的脉冲信号。
图5L298驱动
L298N是ST公司生产的一种高电压、大电流电机驱动芯片,如图5,采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
使用L298N芯片驱动电机,该芯片可以驱动两个二相电机,也可以驱动一个四相电机,可以直接通过电源来调节输出电压;并可以直接用单片机的I/O口提供信号;电路简单,使用比较方便。
3.2L298N结构及连接
连接方法如图6所示。
图6L298N与减速电机连接图
4.单片机主要程序
4.1PWM波
图7PWM波形
PWM波如图7所示,其中PWM_T为PWM波周期,实验中PWM_T=50000;
PWM_H为PWM波高电平持续时间,与速度控制量对应,实验中上位机发送0~255的电机控制量,PWM_H:
0~50000。
相应地,低电平持续时间PWM_L:
50000~0,并利用单片机的定时器0完成电平持续时间,即高电平FlagHL=1保持PWM_H时间,高电平FlagHL=0保持PWM_L时间,。
注:
上位机每个采样周期发送两个字节的数据给单片机,其中第一个字节为0~255范围的电机转速控制量,第二个字节为0xff或0x00的电机正、反转向控制量。
减速电机A、B两相,当A相接PWM波,B相接GND时电机正转;当B相接PWM波,A相接GND时电机反转,实验中我们设置标志FlagDir=1/0来标记单片机管脚输出PWM或GND:
利用单片机接收到第二个字节正反向控制量设置,若0xff=>FlagDir=1;若0x00=>FlagDir=0。
生成PWM波的单片机程序流程图如图8所示,其中单片机P0.0接电机A相,P0.1接电机B相。
图8PWM波形生成
4.2单片机主要程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitPWM_PIN=P0^0;//定义PWM引脚
sbit_PWM_PINh=P0^1;
unsignedintPWM_HIGH,PWM_LOW,PWM;
ucharflagDir;/*H为正向,0为负向*/
ucharflagHL;/*==H,加高电压;==L加0电压*/
ucharb_Recving,n_Recved,fst_ch;
ucharDIPos[2]={0,0};//13位有效,11+2位鉴相
ucharDAIn[2]={0,0};
ucharDAInTemp[3]={0,0,0};
voiddelay(uintz)
{
uintt1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
voidPWM_Init(void)
{
TMOD=0x21;//设置定时器1为工作方式2
TH1=0xfd;//定时器1装初值,波特率设置9600
TL1=0xfd;
TH0=(65536-PWM_HIGH)/256;
TL0=(65536-PWM_HIGH)%256;
PWM_PIN=1;//初始化先输出高电平
_PWM_PIN=0;
EA=1;//开总中断
ES=1;//开串口中断
ET0=1;//设置定时器0中断标志位,响应定时器0中断
TR0=1;//启动定时器0
TR1=1;//启动定时器1
REN=1;//串口通讯设置
SM0=0;
SM1=1;
}
voidmain()
{
PWM_HIGH=1;
PWM_LOW=49999;
flagDir=0;//H为正向,0为负向
flagHL=0;
b_Recving=0;
n_Recved=0;
PWM_Init();
while
(1)
{
}
}
voidtime0()interrupt1//定时器0,调整PWM波脉宽
{
if(flagDir)//正转
{
if(flagHL==0)
{
PWM_PIN=0;//初始化先输出高电平
_PWM_PIN=0;//正反向
TH0=(65536-PWM_LOW)/256;//50ms
TL0=(65536-PWM_LOW)%256;
flagHL=1;
}
else
{
PWM_PIN=1;//初始化先输出高电平
_PWM_PIN=0;//正反向
TH0=(65536-PWM_HIGH)/256;//50ms
TL0=(65536-PWM_HIGH)%256;
flagHL=0;
}
}
else
{
if(flagHL==0)
{
PWM_PIN=0;//正反向//初始化先输出高电平
_PWM_PIN=0;//PWM
TH0=(65536-PWM_LOW)/256;//50ms
TL0=(65536-PWM_LOW)%256;
flagHL=1;
}
else
{
PWM_PIN=0;//初始化先输出高电平
_PWM_PIN=1;//正反向
TH0=(65536-PWM_HIGH)/256;//50ms
TL0=(65536-PWM_HIGH)%256;
flagHL=0;
}
}
}
voidReadSer()interrupt4//接收上位机送出的两字节数据,低8位为0~255控制量,高8为0x00或0xff分别为反转和正转标志
{
if(RI==1)
{
RI=0;
if(0==b_Recving)
{
fst_ch=SBUF;//No.1控制电机转速数据;No.2为控制电机转向数据
if(0x55==fst_ch)
{
b_Recving=1;
n_Recved=0;
}
}
else//b_Recving=1;
{
DAInTemp[n_Recved]=SBUF;
n_Recved=n_Recved+1;
if(3==n_Recved)
{
n_Recved=0;
b_Recving=0;
if((DAInTemp[0]+DAInTemp[1])%256==DAInTemp[2])
{
DAIn[0]=DAInTemp[0];
DAIn[1]=DAInTemp[1];
PWM_HIGH=(0x00ff&DAIn[0])*50000/256;
PWM_LOW=50000-PWM_HIGH;
flagDir=DAIn[1];//0xff--正转,0x00--反转
DIPos[0]=P1;//取角位移低8位;
DIPos[1]=P2;//取角位移高8位
//向上位机发数据
ES=0;//关串口中断,收数据不响应串口中断
SBUF=0xff;//发数据给上位机,引导码0xff
while(!
TI);
TI=0;
SBUF=DIPos[0];//发数据给上位机
while(!
TI);
TI=0;
SBUF=DIPos[1];//发数据给上位机
while(!
TI);
TI=0;
SBUF=(DIPos[1]+DIPos[0])%256;//发数据给上位机,校验码
while(!
TI);
TI=0;
ES=1;
}
}
}
}
}
5.PC机上位机数据读取和显示
VC++6.0下新建MFCAppWizard工程,命名为PWMotr,创建基于对话框的应用程序,Finish。
为了解决串口控件在使用ColeSafeArray对象接受数据时引起的内存溢出的问题,需进行如下其一设置:
1.设置“Release”发布模式。
菜单项-Build-Configurations-(Remove)Win32Debug模式。
Project\Projectsetting\c/c++\ProgramDatabase
2.程序运行于Debug模式,设置
设置"Project->setting->general中UseMFCinasharedll改为staticdll。
推荐使用第二种方法。
5.1用户界面
减速电机测控系统用户界面如图9所示。
图9减速电机测控系统用户界面
电机测控系统用户界面如图9所示。
系统用户界面主要由按钮(滑块)操作和显示两部分组成。
其中按钮部分主要有系统的启动按钮、停止按钮、数据保存按钮、帮助按钮和退出按钮,以及电压调节滑块、电压编辑框(IDC_EditVolt)、采样频率设置(IDC_EditFreq)和串口选择组合框(IDC_CommList)。
显示部分主要包括主显示面板(曲线显示当前的转速和电压),表盘显示电机当前角度位置。
设计过程同霍尔直流电机上位机类似,详细过程不再赘述。