2019-07-20 21:41发布
22599967 发表于 2016-6-15 10:46 编码器相当于外部时钟模式的计数器,所以不能用?这句话我听的不是太懂,能不能说下?我现在用的定时器的 ...
22599967 发表于 2016-6-15 10:59 多谢,我再自己看书再自己尝试下,现在就是不是很清楚,怎么实现让编码器模式的定时器用另外个定时器的时 ...
xinjiandianzi 发表于 2016-6-15 15:55 大哥你说的这个编码器是 电机上的光电编码器吗??
yyx112358 发表于 2016-6-15 11:30 不需要用另外一个时钟啊。只需要定时读取编码器计数值就好了,比如这是我在ucos任务里面的代码: [mw_sh ...
最多设置5个标签!
就是说编码器模式的时钟不是内部时钟,而是把外部的编码器信号输入作为了时钟,是“计数器模式”。因此,它只有计数功能,计数值只和外部编码器脉冲数有关,不能同时进行编码器计数和定时。所以必须要另外加上一个定时器,软件硬件定时器都行。
你的这个方案完全可行。我这个代码就是计数,测速是用ucos的一个任务来做的。硬件定时器也是可以的
不需要用另外一个时钟啊。只需要定时读取编码器计数值就好了,比如这是我在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用全局变量代替就行了
......
ucos这个真的看不懂
一周热门 更多>