这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 编码器读数疑问

共4条 1/1 1 跳转至

编码器读数疑问

助工
2015-06-11 14:19:10     打赏

在MiniBlalance.c文件的149-160行中if(Encoder_L>32768)中的32768是什么含义呢?还有后面的6500又如何理解?

以下是该问题处的函数,读取编码器的数据并进行数据类型转换的函数

void readEncoder(void)
{
 u16 Encoder_L,Encoder_R;      
Encoder_R = TIM4 -> CNT;     
TIM4 -> CNT=0;                 
 Encoder_L= TIM2 -> CNT;     
 TIM2 -> CNT=0;                
if(Encoder_L>32768)  Encoder_Left=Encoder_L-65000; else  Encoder_Left=Encoder_L; 
  Encoder_Left=-Encoder_Left;
 if(Encoder_R>32768)  Encoder_Right=Encoder_R-65000; else  Encoder_Right=Encoder_R;
}

麻烦各位好友帮忙解答    谢谢啦!!




菜鸟
2015-06-11 14:44:06     打赏
2楼

@passoni 管理员已经在群里面回复过了。这是我的理解,编码器是以PWM的形式输入到STM32的PWM捕获单元,占空比的范围是0-1。对应着STM32捕获占空比的结果是0-65000。可是这并没有突出显示轮子是往前走还是往后走。

32768应该就是轮子既不前进又不后退时候对应的STM32捕获结果,而Encoder_x-65000表示得到有符号数,符号表示轮子前进或后退。车子往前或者往后两个轮子的角速度方向都不同,所以需要Encoder_Left=-Encoder_Left;


欢迎大家补充。。。


助工
2015-06-11 18:00:07     打赏
3楼

是这样的,编码器和电机的PWM没有任何关系。当然,编码器输出的是方波信号。当我们把STM32的某个定时器初始化为编码器接口后,每检测到AB相中任意一相的跳变沿,TIMX -> CNT就会+1或者-1。

OK,基于上面的基础,我们怎么测速呢?就是单位时间内测得的脉冲数,所以我们会在每5ms读取一次TIMX -> CNT的值,并清零。这也就是书本上讲的M法测速的原理。

接下来,我们去TIMER.H文件里面找到如下的宏定义

#define ENCODER_TIM_PERIOD (u16)(65000)  

#define COUNTER_RESET   (u16)0

计数的时候,定时器是这么工作的,上电后,TIMX -> CNT的值是COUNTER_RESET  ,也就是0,当我们正转的时候,TIMX -> CNT向上计数,反转的时候向下计数,小于零后就从ENCODER_TIM_PERIOD也就是65000向下计数。

关于ENCODER_TIM_PERIOD的取值,因为STM32F103的定时器是16位的,最大可以取65536,而F4系列中有4个32位的定时器,就可以取得更大。

这样,我们在5MS的定时器中断函数里面做如下处理

 if(Encoder_L>32768)  Encoder_Left=Encoder_L-65000; else  Encoder_Left=Encoder_L;

就可以通过INT型的Encoder_Left变量的正负号得到车轮的正反转。

有理解不当的,请同学们批评指正


菜鸟
2015-07-05 10:26:57     打赏
4楼
1. 关于为什么有时候要减去32768的问题。
其实这本质是一个u16(无符号整数)和s16(有符号整数)的表述问题。
编码器的计数可以根据电机的转动方向进行增计数或者减计数。如果每次计数都是从0开始的话,计数的正值和负值就分别对应于两个方向的转动。

原始代码中的Encoder_L和Encoder_R被定义成了u16,就无法表示负数。当读到的计数值大于32768的时候(假设为N),其实它表示的是一个负数,因此需要减去32768,表示这是一个绝对值为N-32768的负数。

2. 关于什么时候要减去65000问题。
原始代码做了这样的假设,既编码器码盘上的槽口数为65000/4。
因此,减去65000的意思就是减计数从65000开始,而不是从0开始。

上面两个问题的详细原理请参考这里:
http://forum.eepw.com.cn/thread/274269/1


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]