呼叫原子哥,究竟用什么方法读取编码器的脉冲频率?

2019-07-20 21:41发布

我只需要读取编码器的脉冲频率,因为编码器的脉冲频率与电机转速成正比。所以我只需要读取两个编码器的脉冲频率,至于电机的方向,我通过看自己给的PWM控制波来查看。
但是我看好多人说用输入捕获不准确?那用什么办法?定时器编码器模式?还是外部时钟?我要读取编码器的脉冲频率,从而通过pid算法来设定电机pwm控制信号的占空比。
用编码器模式和外部时钟我不会,操作指南上面也没有看到历程,新手,求原子哥指教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
yyx112358
2019-07-21 15:18
22599967 发表于 2016-6-15 10:59
多谢,我再自己看书再自己尝试下,现在就是不是很清楚,怎么实现让编码器模式的定时器用另外个定时器的时 ...

不需要用另外一个时钟啊。只需要定时读取编码器计数值就好了,比如这是我在ucos任务里面的代码:
[mw_shl_code=c,true]#define        ENCODER_READ_PERIOD        (1000)
void        Encoder_Task(void        *pdat)
{
        static int32_t        Encoder_Speed=0;
        ENCODER_Init();
       
        while(1)
        {
                Encoder_Speed=ENCODER_Read()/(ENCODER_READ_PERIOD/1000);//读取计数器值并计算
                ENCODER_Reset();//重置计数值
                OSMboxPost(mbox_speed,(void*)(&Encoder_Speed));//发送速度值
                delay_ms(ENCODER_READ_PERIOD);//延时
        }
}[/mw_shl_code]
写在定时器中断里面也差不多,只要把定时器周期设定成ENCODER_READ_PERIOD,然后再溢出中断里面进行计算和重置。Encoder_Speed用全局变量代替就行了

一周热门 更多>