Part Number: F28335
28335 QEP 获取电机转子位置,一圈0到360 但是中途到了 7 80°的时候 会跳变会10几或者个位数,程序用的TI例程,换了个同型号的编码器,还是一个问题,可以有人帮忙解答一下吗。
Green Deng:
你好,还请详细描述一下你的问题
用的是什么类型编码器?使用的是TI例程吗,具体是哪个例程?等等
,
Yingsa li:
以前用的是欧姆龙2000线增量式编码器,一直是好用的。现在改用国内一家2500线增量式编码器,但是程序没做改动。 程序一直用的是这 TI例程
,
Green Deng:
你好,我对比了一下例程,应该是除了从eQEP1换成eQEP2,其他没有对例程做过更改?
有没有咨询过这两款编码器的QEP有没有什么区别?
,
Yingsa li:
只知道 一个是2500线 一个2000线。 那改编码器线程 以后还需要在 程序哪里做些更改吗,
,
Green Deng:
这个。。。信息有点少。
比如例程中使用的是1000线数的增量式编码器,4倍频,得到的是4000 cnts/revolution。也就是例程注释的:
// where mech_scaler = 4000 cnts/revolution
,
Yingsa li:
您说的是在这个结构体里定义的吗,没太明白这结构体怎么定义出 mech_scaler = 4000 cnts/revolution 这个信息的。
,
Green Deng:
你好,我会尽快查看例程之后回复
,
Yingsa li:
好的,那麻烦您了,那我顺便再问一个点
这个划线部分 表示的是 角度等于当前加角度误差,这个误差是怎么定义出来的
,
Green Deng:
先回复一下线数的问题:
mech_scaler的计算方法是(1/(线数*倍频数))*2^26。比如例程中的是(1/(1000*4))*2^26 = 16776。
这个值可以在这里修改:
#if (CPU_FRQ_150MHZ)#define POSSPEED_DEFAULTS {0x0, 0x0,0x0,0x0,0x0,16776,2,0,0x0,\94,0,6000,0,\0,0,0,\(void (*)(long))POSSPEED_Init,\(void (*)(long))POSSPEED_Calc }上述代码中的16776,就是结构体中的mech_scaler值。
其他参数的宏定义值也可以通过修改例程中附带的Example_posspeed.xls表中的参数获得。
另外可以看一下这个帖子的回复:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/333148/eqep-setup
,
Yingsa li:
好的,谢谢。这个地方 我之前就知道,不过经过了您的答案我更加确定我改的正确,进而找到了其他细节上的错误了。 这个2 是 编码器极对数吗, 如果 ABZ 这种的 就是3 吗? 因为在我改2 和 3的时候 位置结果没发现什么区别。
,
Green Deng:
不是的,2^26是为了将数值转换为Q26格式,注释中说明了是Q26格式,但是没有说明如何转的,所以我给你说明了一下。
编码器一般就是分频倍数的区别,而且一般都是4倍,也就是AB相的上升沿下降沿各自分频一次。