矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1772|回复: 10

请教一个单片机步进电机计数显示的问题。谢谢。

[复制链接]
     
发表于 2022-10-19 09:58:12 | 显示全部楼层 |阅读模式
先说我的设计主程序的大概思路:

while(1)
{
   j++;
   step;
    if (j>199)  //200个脉冲,步进电机转一圈
    {
        k++;
        showLED(k);
        j=0;
    }

}

实践中发现,
showLED子程序占用时长较长,导致第200个脉冲和第1个脉冲间隔较长,步进电机明显会“咯”的停顿一下,有什么好方法解决??
谢谢。
     
发表于 2022-10-19 10:19:46 | 显示全部楼层
showLED()放到循环外边去,在showLED()原来的位置置位一个flag。在循环外边判断flag,根据flag调用showLED()。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 10:35:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 11:01:43 | 显示全部楼层
我个人也认为采用定时器的方法好些,主程序只用来控制电机的运转和读数。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 11:08:38 | 显示全部楼层
xiaoduan 发表于 2022-10-19 10:19
showLED()放到循环外边去,在showLED()原来的位置置位一个flag。在循环外边判断flag,根据flag调用showLED( ...

不是换汤不换药?

showLED()还是要执行,执行就有一个小卡顿? 执行次数并没有优化掉。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 11:10:45 | 显示全部楼层
本帖最后由 jlfzx 于 2022-10-19 11:16 编辑
igiucom 发表于 2022-10-19 11:01
我个人也认为采用定时器的方法好些,主程序只用来控制电机的运转和读数。


对的,用定时器倒计数,定时器设置为倒计数,自动填充模式,到零发生中断,中断产生标记,主while判断标记点灯。
如果使用RTOS,就更方便了。

呵呵  一群码农

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 11:14:19 | 显示全部楼层
设置优先级,在空闲时间执行显示………

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-10-19 11:36:10 | 显示全部楼层
原来一直不想用计数器,感觉没必要做得这么复杂。想着步进电机频率也没多高,应该影响不大。
实践中,的确影响也不大,就是那一声听着不舒服。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 11:41:17 | 显示全部楼层
本帖最后由 jlfzx 于 2022-10-19 11:44 编辑

不用定时器计数也可以,这上面的代码,大于199产出软件中断,在中断服务中点亮,之后再循环while一段时间后产生软件中断。中断里面有个标志记录LED是关还是开。
回复 支持 反对

使用道具 举报

     
发表于 2022-10-19 15:55:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2022-10-20 08:10:59 来自手机 | 显示全部楼层
楼主的电机一上来就是全速,几个指令就走一步,即使一条指令5微秒,电机转速一分钟也破万了。以这个速度,根本没时间干别的。不管以哪种方式,都会让驱动脉冲不均匀。一方面可以让电机减速,腾出时间干别的;另一方面就是硬件驱动,每200个脉冲才给单片机一个信号
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 02:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表