你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
青春不再荡漾 发表于 2014-9-16 11:32 楼主有几个问题请教下,您用的编码器是16线的,是不是接线就三根呢,一根电源,一根接地,还有一根信号线, ...
青春不再荡漾 发表于 2014-9-16 14:33 void Speed_Calculate(void) { speed_mr=TIM_GetCounter(TIM2)-0x7fff;
wambob 发表于 2014-12-31 17:19 卡尔曼滤波 能单独编译吗
回复:【MCU实战经验】+基于stm32两轮平衡车制作
{
speed_mr=TIM_GetCounter(TIM2)-0x7fff;
speed_ml=TIM_GetCounter(TIM3)-0x7fff;
TIM_SetCounter(TIM2, 0x7fff);
TIM_SetCounter(TIM3, 0x7fff);
speed_r_l =(speed_mr + speed_ml)*0.5;
speed *= 0.7;
speed += speed_r_l*0.3;
}
楼主可以解释下编码器开始计数时减去的中间值是什么吗?为什么要这样做呢?一直搞不清楚
RE:【MCU实战经验】+基于stm32两轮平衡车制作
编码器是4根线,电源,地,输出A,输出B。两相输出。程序中用的TIM2和TIM3的编码器模式,配置好了后直接读寄存器值就可以,没有IO的操作。PID是增量式的,效果还行。。。
编码器计数值设定的是0x0000—0xffff,减去中间值后的值就是当前编码器的增量值,正的是速度向前,负的是速度向后,读完后又充值编码器为0x0fff。也就是每次的speed_mr和speed_ml为当前左右轮速度
楼主几天没来了
收了 感谢楼主