28335 QEP 获取电机转子位置,一圈0到360 但是中途到了 7 80°的时候 会跳变会10几或者个位数,程序用的TI例程,换了个同型号的编码器,还是一个问题,可以有人帮忙解答一下吗。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好,还请详细描述一下你的问题
用的是什么类型编码器?使用的是TI例程吗,具体是哪个例程?等等
这个。。。信息有点少。
比如例程中使用的是1000线数的增量式编码器,4倍频,得到的是4000 cnts/revolution。也就是例程注释的:
// where mech_scaler = 4000 cnts/revolution
先回复一下线数的问题:
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
不是的,2^26是为了将数值转换为Q26格式,注释中说明了是Q26格式,但是没有说明如何转的,所以我给你说明了一下。
编码器一般就是分频倍数的区别,而且一般都是4倍,也就是AB相的上升沿下降沿各自分频一次。