8.3.3 电机测速01_理论
测速实现是调速实现的前提,本节主要介绍AB相增量式编码器测速原理。
1.概念
百度百科关于编码器介绍如下:
编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺。按照读出方式编码器可以分为接触式和非接触式两种;按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。
2.测速原理
关于编码器相关概念简单了解即可,在此需要着重介绍的是 AB相增量式编码器测速原理:
AB相编码器主要构成为A相与B相,每一相每转过单位的角度就发出一个脉冲信号(一圈可以发出N个脉冲信号),A相、B相为相互延迟1/4周期的脉冲输出,根据延迟关系可以区别正反转,而且通过取A相、B相的上升和下降沿可以进行单频或2倍频或4倍频测速。
3.测速举例
假设编码器旋转1圈输出11个脉冲,减速比为 90。伪代码如下:
单频计数:
//设置一个计数器
int count = 0;
//当A为上升沿时
if(B为高电平){
count++;
}else {
count--;
}
//....
//速度=单位时间内统计的脉冲的个数 / (11*90) / 单位时间
2倍频计数:
//设置一个计数器
int count = 0;
//当A为上升沿时
if(B为高电平){
count++;
}else {
count--;
}
//当A为下降沿时
if(B为低电平){
count++;
}else {
count--;
}
//....
//速度=单位时间内统计的脉冲的个数 / (11*2*90) / 单位时间
4倍频计数:
//设置一个计数器
int count = 0;
//当A为上升沿时
if(B为高电平){
count++;
}else {
count--;
}
//当A为下降沿时
if(B为低电平){
count++;
}else {
count--;
}
//当B为上升沿时
if(A为低电平){
count++;
} else {
count--;
}
//当B为下降沿时
if(A为高电平){
count++;
} else {
count--;
}
//....
//速度=单位时间内统计的脉冲的个数 / (11*4*90) / 单位时间