求助,如何使用stm32F4进行带方向的脉冲计数,提供思路就行
各位大佬,我现在需要对外部高速脉冲+方向电平进行计数,也就是说方向电平为高电平时,脉冲计数累加。方向电平为低电平时,脉冲计数累减。我目前已经做了单向的计数,用TIM5的CH1引脚加外部时钟模式1,还做了AB相增量式编码器计数。现在还想做个方向电平+高速脉冲计数,目前没有想到好的办法,各位大佬看看能不能提供点思路。
编码器接口应该就很合适了
方向线做外部中断,上下降沿都进中断,进中断立刻改寄存器改方向。不过太高速来回变换估计反应不过来。 wenyangzeng 发表于 2019-9-10 15:10
编码器接口应该就很合适了
编码器模式下,如果一个通道电平不变。另外一个通道的脉冲只会让计数加1减1从而维持不变吧,这个该怎么实现一直累加呢, jsrdczy 发表于 2019-9-11 13:24
编码器模式下,如果一个通道电平不变。另外一个通道的脉冲只会让计数加1减1从而维持不变吧,这个该怎么实 ...
正交编码呀,TI1超前或滞后TI290°决定方向,你必须使用正交编码器 wenyangzeng 发表于 2019-9-11 13:59
正交编码呀,TI1超前或滞后TI290°决定方向,你必须使用正交编码器
不好意思多问一句,我现在的测量对象并不是正交编码器,而是带方向口的高速脉冲输入。方向口就是保持高电平或者低电平用来指示正方向或负方向。TI1时脉冲输入,ti2的电平时维持不变的。 jsrdczy 发表于 2019-9-11 14:14
不好意思多问一句,我现在的测量对象并不是正交编码器,而是带方向口的高速脉冲输入。方向口就是保持高电 ...
既然是高低电平表示方向,就用1个定时器输入就够了。
int place_cnt=0;
int8_t dir=0;//IO初始化时候注意赋值//TIM->ARR初始化为最大65535
//io中断
void io_int_callback()
{
updata_place_cnt();
if(io==1)dir = 1;
else dir = -1;
}
//定时调用更新
void updata_place_cnt()
{
uint32_t temp=TIMX->CNT;
place_cnt += temp*dir;
TIMX->CNT = 0;
}
页:
[1]