你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
jsrdczy 提问时间:2019-9-10 14:34 /
各位大佬,我现在需要对外部高速脉冲+方向电平进行计数,也就是说方向电平为高电平时,脉冲计数累加。方向电平为低电平时,脉冲计数累减。

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

举报

7个回答
wenyangzeng 回答时间:2019-9-10 15:10:38
编码器接口应该就很合适了

无标题.png
疯de_恒 回答时间: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超前或滞后TI2  90°决定方向,你必须使用正交编码器
jsrdczy 回答时间:2019-9-11 14:14:50
wenyangzeng 发表于 2019-9-11 13:59
正交编码呀,TI1超前或滞后TI2  90°决定方向,你必须使用正交编码器

不好意思多问一句,我现在的测量对象并不是正交编码器,而是带方向口的高速脉冲输入。方向口就是保持高电平或者低电平用来指示正方向或负方向。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;
}

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版