jsrdczy 发表于 2019-9-10 14:34:38

求助,如何使用stm32F4进行带方向的脉冲计数,提供思路就行

各位大佬,我现在需要对外部高速脉冲+方向电平进行计数,也就是说方向电平为高电平时,脉冲计数累加。方向电平为低电平时,脉冲计数累减。

我目前已经做了单向的计数,用TIM5的CH1引脚加外部时钟模式1,还做了AB相增量式编码器计数。现在还想做个方向电平+高速脉冲计数,目前没有想到好的办法,各位大佬看看能不能提供点思路。

wenyangzeng 发表于 2019-9-10 15:10:38

编码器接口应该就很合适了


す疯Ⅱ恒す 发表于 2019-9-10 18:08:31

方向线做外部中断,上下降沿都进中断,进中断立刻改寄存器改方向。不过太高速来回变换估计反应不过来。

jsrdczy 发表于 2019-9-11 13:24:32

wenyangzeng 发表于 2019-9-10 15:10
编码器接口应该就很合适了

编码器模式下,如果一个通道电平不变。另外一个通道的脉冲只会让计数加1减1从而维持不变吧,这个该怎么实现一直累加呢,

wenyangzeng 发表于 2019-9-11 13:59:55

jsrdczy 发表于 2019-9-11 13:24
编码器模式下,如果一个通道电平不变。另外一个通道的脉冲只会让计数加1减1从而维持不变吧,这个该怎么实 ...
正交编码呀,TI1超前或滞后TI290°决定方向,你必须使用正交编码器

jsrdczy 发表于 2019-9-11 14:14:50

wenyangzeng 发表于 2019-9-11 13:59
正交编码呀,TI1超前或滞后TI290°决定方向,你必须使用正交编码器

不好意思多问一句,我现在的测量对象并不是正交编码器,而是带方向口的高速脉冲输入。方向口就是保持高电平或者低电平用来指示正方向或负方向。TI1时脉冲输入,ti2的电平时维持不变的。

wenyangzeng 发表于 2019-9-11 15:06:40

jsrdczy 发表于 2019-9-11 14:14
不好意思多问一句,我现在的测量对象并不是正交编码器,而是带方向口的高速脉冲输入。方向口就是保持高电 ...

既然是高低电平表示方向,就用1个定时器输入就够了。

tanic 发表于 2019-9-11 16:35:38


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]
查看完整版本: 求助,如何使用stm32F4进行带方向的脉冲计数,提供思路就行