打印

求多任务系统中步进减速电机平稳运行的思路

[复制链接]
3367|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
showmyself|  楼主 | 2022-8-3 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
调了好几天都没搞定,发现步进电机驱动起来很简单,但是要想电机转动平稳太难了,尤其是在多任务的系统中。用的是24BJY48步进减速电机,四相八拍方式,步距角是5.625°,用的是脉冲驱动方式。
我的系统现在有多个任务,就是在while(1)循环中有好几个函数需要执行,步进电机驱动是其中一个,现在如果把步进电机测试函数
单独放在while(1)中,如下

int main(void)
{

while(1)
{
    motor_test(); //步进电机驱动
}

}


那么步进电机运转很丝滑,很平稳,我通过多次调试找到了延时设置为1500us时,电机运转最平稳,当然这只限于while(1)中只有这一个函数时,

如果我同时运行其他任务,如下

int main(void)
{

while(1)
{
    motor_test(); //步进电机驱动
    read_sensor();
    status_update();

}

}


void  motor_test()
{
      
                PAH; PBL;PCL;PDL;
SysTick_delay_us(1500);      
                PAH; PBH;PCL;PDL;
SysTick_delay_us(1500);      
                PAL; PBH;PCL;PDL;
        SysTick_delay_us(1500);
                PAL; PBH;PCH;PDL;
        SysTick_delay_us(1500);
                PAL; PBL;PCH;PDL;      
SysTick_delay_us(1500);      
                PAL; PBL;PCH;PDH;
        SysTick_delay_us(1500);
                PAL; PBL;PCL;PDH;      
        SysTick_delay_us(1500);
                PAH; PBL;PCL;PDH;
        SysTick_delay_us(1500);
}



那么,电机会转起来,但是会产生震动,怎么调整延时值都没用,1500上下的延时我都试过了,一样震动,可能有人会说,用定时器中断,我当然试过,而且调试了很长时间,一样的结果也是震动,我知道是其他程序影响了电机运转,但不至于对时间要求这么精确把?其他的程序执行会分掉时间,但不至于会影响到电机这么严重吧?

实际项目中不可能只有电机控制这一个函数,肯定是多个函数一起运行的。

我甚至把这两个函数read_sensor();和status_update();用时间片轮询的方法写了一遍,就是给他们分配更长的执行时间,让步进电机执行时间尽可能短,也还是不行,还是震动。

真的没有思路了,大家有什么好的思路吗?可以解决震动问题

使用特权

评论回复
评论
xch 2022-8-4 18:50 回复TA
看这意思 用 “定时器中断” 不符合特色步进电机。 是不是中断频率正好落在步进电机共振峰?降低中断频率试试 
沙发
LcwSwust| | 2022-8-4 09:32 | 只看该作者
建议定时器结合状态机:
void  motor_test()//1500us调用一次
{
        static char state=0;
        state=(state+1)%8;//8拍
        switch(state)
        {
                case 0:PAH; PBL;PCL;PDL;break;
                case 1:PAH; PBH;PCL;PDL;break;
                case 2:......
        }
}  

使用特权

评论回复
板凳
ColeYao| | 2022-8-4 13:33 | 只看该作者
  在定时中断中操作,定时中断优先级设高一点。

使用特权

评论回复
地板
夏夜星辰01| | 2022-8-4 19:43 | 只看该作者
都是啥骚操作,,电机驱动,需要结合PWM、EN、DIR控制。其中PWM是要用定时器的PWM方式产生。。。而不是用程序

使用特权

评论回复
5
showmyself|  楼主 | 2022-8-4 21:22 | 只看该作者
夏夜星辰01 发表于 2022-8-4 19:43
都是啥骚操作,,电机驱动,需要结合PWM、EN、DIR控制。其中PWM是要用定时器的PWM方式产生。。。而不是用程 ...

这是步进电机,不是我们说的直流电机,步进电机是脉冲驱动,一个脉冲走一步,PWM对于步进电机驱动实际上是没有太大意义的。我那个程序里产生的是四相八拍模式下的脉冲,不是PWM

使用特权

评论回复
6
showmyself|  楼主 | 2022-8-5 10:14 | 只看该作者
LcwSwust 发表于 2022-8-4 09:32
建议定时器结合状态机:
void  motor_test()//1500us调用一次
{

感谢,我试试

使用特权

评论回复
7
showmyself|  楼主 | 2022-8-5 10:15 | 只看该作者
ColeYao 发表于 2022-8-4 13:33
在定时中断中操作,定时中断优先级设高一点。

好的,我也准备把优先级设置为最高再试试

使用特权

评论回复
8
夏夜星辰01| | 2022-8-5 14:01 | 只看该作者
showmyself 发表于 2022-8-4 21:22
这是步进电机,不是我们说的直流电机,步进电机是脉冲驱动,一个脉冲走一步,PWM对于步进电机驱动实际上 ...

就不能用一个步进电机驱动芯片,或步进电机驱动器么?基于成本考虑?

使用特权

评论回复
9
eydj2008| | 2022-8-6 17:30 | 只看该作者

求多任务系统中步进减速电机平稳运行的思路

设置 16细分以上,就平稳了

使用特权

评论回复
10
290399937| | 2022-8-6 18:23 | 只看该作者
本帖最后由 290399937 于 2022-8-6 18:25 编辑

while(1) {     motor_test(); //步进电机驱动     read_sensor();     status_update();  }

这电机走几步,刚动起来,就丢下去干别的事情,

别的事情占多少,示波器一抓电机驱动就知道了,

使用特权

评论回复
11
showmyself|  楼主 | 2022-8-6 21:56 | 只看该作者
eydj2008 发表于 2022-8-6 17:30
设置 16细分以上,就平稳了

应该不是细分的问题,是多任务影响了电机运行的时间,因为如果就驱动电机的话,运转很平稳

使用特权

评论回复
12
showmyself|  楼主 | 2022-8-6 22:11 | 只看该作者
290399937 发表于 2022-8-6 18:23
while(1) {     motor_test(); //步进电机驱动     read_sensor();     status_update();  }

这电机走几步 ...

我程序上用了一些任务调度机制,已经把别的任务的执行时间间隔拉长了,然后让电机这边尽可能得到更多的执行机会了,但仍然没有太大作用,后来我觉得是电机的运行间隔时间要求太短了,导致背的任务无论怎么调整都不能满足这个时间间隔的要求,所以可能最终还是需要放在中断中来弄

使用特权

评论回复
13
tianxj01| | 2022-8-7 18:29 | 只看该作者
showmyself 发表于 2022-8-6 22:11
我程序上用了一些任务调度机制,已经把别的任务的执行时间间隔拉长了,然后让电机这边尽可能得到更多的执 ...

既然你用单任务测量出来了平滑运行的刷新速度,那么time中断独占肯定可以实现你需要的目标,当然关键是这个中断在多任务系统中保持最高优先级,这在我们类似需要高水平独立稳定时钟处理问题,像类似软UART当中就经常碰到,记得给予对应的time中断在所有中断里面最高优先级,如果有示波器你可以在该中断里面设置一个IO端口翻转命令,然后用示波器去测量在多任务都开启的条件下,该IO翻转命令导致的方波是不是稳定和准确就成了。

使用特权

评论回复
14
jimsboy| | 2022-8-7 19:31 | 只看该作者
重要的事就多用一个MCU,又不值什么钱.对于工业品,稳定才是王道.小的成本增加,用户能接受

使用特权

评论回复
15
qintian0303| | 2022-8-9 09:13 | 只看该作者

求多任务系统中步进减速电机平稳运行的思路

为什么不用步进电机驱动芯片呢,不仅能有效驱动步进电机,还能保护单片机。还有一个不要再while中放延时,这样你的运行规律将会被打破,最好只放逻辑判断,相信你那两个函数里边也都是这种延时函数,单片机的运行机制是顺序运行的

使用特权

评论回复
16
amandv| | 2022-8-16 18:33 | 只看该作者

求多任务系统中步进减速电机平稳运行的思路

中断执行操作,不要用软件延时。

使用特权

评论回复
17
前功尽弃| | 2022-8-30 09:22 | 只看该作者

求多任务系统中步进减速电机平稳运行的思路

用定时器中断反转io来模拟波形,不要用延迟函数来做,主函数中处理的东西多了,会影响你电机运转的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

117

帖子

1

粉丝