重庆邮电大学综合实验报告基于旋转编码器的转速测量实验
姓名:魏敏
学号:2012213148
班级:0881202
组号:
专业:电气工程与自动化
指导老师:陈俊华
自动化学院检测与控制实验中心
2014
一、实验目的
1. 了解编码器工作原理
2. 掌握编码器速度检测的方法;
二、实验原理
1. 编码器
编码式数字传感器是测量转轴角位移的最常用的检测元件,它具有很高的分辨率、测量精度和可靠性。
在一个圆形玻璃盘的边缘开有相等角距的缝隙,成为透明和不透明的码盘,在此码盘开缝的两边,分别安装光源及光电元件。
当码盘随被测物体的工作轴转动时,每转过一个缝隙,光电元件所获得的光强就发生一次明暗的转换,光电转换电路就产生一定幅值和功率的电脉冲输出信号。
将这一脉冲信号送加法计数器进行记数,则所计数码就等于码盘转过的缝隙数目,在缝隙之间的角度已知时,码盘(被测物体)所转过的角度也就确定了。
旋转编码器E6C2-CWZ6C参数表
编码
器
参数
电源
电压
DC5V~24V
消耗
电流
70mA以下
分辨率(脉冲/旋转)
100、200、300、360、400、500、600、720、800、1000、1024、1200、1500、1800、2000
输出
相
A 、B、Z相
输出
方式
NPN集电极开路输出
输出容量
外加电压:DC30V以下;同步电流35mA以下;残留电压:0.4V以下(同步电流35mA)
最高
响应频率
100kHz 2.测量方法:
2.1编码器鉴相电路设计:
2.3测量原理:
检测光电式旋转编码器与转速成正比的脉冲,然后计算转速,有三种数字测速方法:即M法、T法和M/T法。
光电式旋转编码器是转速或转角的检测元件,旋转编码器与电机相连,当电机转动时,带动码盘旋转,便发出转速或转角信号。
如图所示。
码盘轴
发光装置
接收
装置CC
V
数字测速装置原理图
M法测速
测取Tc时间内旋转编码器输出的脉冲个数,用以计算这段时间内的平均转速,称作M法测速,如图所示。
M 法测速的分辨率: 电机的转速为 : r/min 601
c
ZT M n =
M 法测速的分辨率:c
c c ZT ZT M ZT M Q 60
60)1(6011=-+=
M 法测速误差率:
%1001
%10060 )
1(60 60%1111max ⨯=⨯-=M ZT M ZT M ZT M c
c c δ
M 法测速适用于高速段 T 法测速
记录编码器两个相邻输出脉冲的间的高频脉冲个数M2,f0为高频脉冲频率,如图所示。
M
T 测速法
电机转速
r/min 60602
ZM f ZT n t ==
T 法测速的分辨率:
)
1(6060)1(60220
2020-=--=
M ZM f ZM f M Z f Q
T法测速误差率:
%10011%10060
60 )1(60%22
02
20max ⨯-=⨯-=M ZM f ZM f M Z f δ
T 法测速适用于低速段。
M/T 法测速
把M 法和T 法结合起来,既检测T C 时间内旋转编码器输出的脉冲个数M 1,又检测同一时间间隔的高频时钟脉冲个数M 2,用来计算转速,称作M/T 法测速。
采用M/T 法测速时,应保证高频时钟脉冲计数器与旋转编码器输出脉冲计数器同时开启与关闭以减小误差。
c
T M/T 法测速原理图
电机转速
r/min 60 602
11ZM f M ZT M n t ==
三、实验内容
1. 根据旋转编码器的工作原理,设计基于旋转编码器的速度检测原理图;
2. 利于实验室提供的单片机最小系统,设计位置检测、速度检测系统的应用电路;画出系统框图;
3. 编写相关程序, 实现对位置及转速的测量,并显示; 程序设计:
#include<reg51.h> #define uchar unsigned char #define uint unsigned int
sbit dula=P2^6; sbit wela=P2^7; sbit q1=P3^4; bit bit_0; uint count_N,count_N1; uint count_n8;//计数值 uchar T_N=20;
void msplay(uchar,uchar); void INT_0_Init(); void
Timer0_Init();
void Motor_Init();
ucharcode x1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x40,0x7c,0x39,0x5e,0x3e,0x48}; uchar code x2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint z) //延时函数
{
uint x; for(x=z;x>0;x--) ;
}
void INT_0_Init()
{
IT0=1; EX0=1;
}
void Timer0_Init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; ET0=1; TR0=1;
}
void main()
{
uchar k6,k5,k4,k3,k2,k1,k0;
INT_0_Init(); Timer0_Init();
while(1)
{
k0=0x0e; k1=0x0f;
if(!q1) k6=0;
else k6=10;
if(!bit_0)
{
k2=count_N%10000/1000; k3=count_N%1000/100;
k4=count_N%100/10; k5=count_N%10; bit_0=1;
}
msplay(k0,0); msplay(k1,1); msplay(k6,3);
msplay(k2,4); msplay(k3,5); msplay(k4,6); msplay(k5,7);
}
}
void int_0() interrupt 0
{
count_n8++;
}
void timer0() interrupt 1
{
TR0=0; TH0=(65536-50000)/256;
TL0=(65536-50000)%256; T_N--;
if(0==T_N)
{
count_N1=count_n8; count_N=27.952*count_N1;
bit_0=0; count_n8=0;
T_N=20;
}
TR0=1;
}
void msplay(uchar y1,uchar y2)
{
P0= x1[y1];
if(y2==6) P0= P0|0x80;
dula=1; dula=0; delay(1);
P0= x2[y2];
wela=1; wela=0; delay(1);
P0= 0x00;
dula=1; dula=0; delay(1);
P0 = 0x0ff;
wela=1; wela=0; delay(1);
}
原理图设计:
四、总结
随着课程的推进,实验涉及的越来越多,对绘制原理图越来越得心应手,但由于编程涉及到对中断的应
用,我仍不够熟练,在程序编写中遇到大大小小的问题,尽管通过不断地练习解决了这一问题,但在编码器旋转测速的显示部分,对误差的处理,还有一些问题,在后续的学习中,我将不断的完善自己在编程方面的不足,更加努力。
当然,通过此次旋转编码器的速度检测实验,我也学会如何根据编码器旋转原理进行速度检测。
感谢您的支持与配合,我们会努力把内容做得更好!。