智能车制作

标题: [急]求助:关于stm32控制舵机的问题 [打印本页]

作者: ず竹叶萧萧は    时间: 2014-9-4 09:47
标题: [急]求助:关于stm32控制舵机的问题
最近在做机器人,用stm32输出pwm来控制舵机的角度,遇到了两个问题:
1、如何实现舵机角度的缓慢变化,就是慢慢地转发到指定角度而不是一下子就转过去。我看过别人的程序,用一个for语句,一次加一点或减一点可以实现,不知道这是不是最优方案。
2、就是用上面提到的for语句时,每次运行到for语句时,输出的pwm会有一段时间的不稳定,要过一段时间才能稳定输出,这是为什么啊。每次关闭单片机电源后重新上电都会有这段不稳定,所以我们现在是在前面加了一段延时,但始终不知道为什么会有这段波动。
希望了解的人给个答案,拜托了。

作者: 杨先生    时间: 2014-9-4 11:05
缓慢变化,步进电机不可以吗?
作者: 呆逼。    时间: 2014-9-4 12:55
我是用For语句的 - -、、
作者: whisker    时间: 2014-9-4 12:59
for
作者: ず竹叶萧萧は    时间: 2014-9-4 16:22
杨先生 发表于 2014-9-4 11:05
缓慢变化,步进电机不可以吗?

我们选用的舵机,不好再换步进了,而且做机器人用舵机挺合适的吧

作者: ず竹叶萧萧は    时间: 2014-9-4 16:24
呆逼。 发表于 2014-9-4 12:55
我是用For语句的 - -、、

那在单片机上电以后有没有一段波动呢,还是可以立马稳定输出要的波型。
我的大约有2秒的波动,不知道什么原因,求帮助

作者: ず竹叶萧萧は    时间: 2014-9-4 16:25
whisker 发表于 2014-9-4 12:59
for

啊?

作者: 狅士§    时间: 2014-9-4 16:32
当然不是了,但大体上思想上可以这样。我刚参加完双足比赛,比较了解这个。得用while()语句+函数,至少一次函数。自己好好想想再你要
作者: ず竹叶萧萧は    时间: 2014-9-4 16:39
狅士§ 发表于 2014-9-4 16:32
当然不是了,但大体上思想上可以这样。我刚参加完双足比赛,比较了解这个。得用while()语句+函数,至少一 ...

对啊 ,我用while语句了,步子通过while循环,只是在我给单片机上电后,单片机在运行while语句中的第一个动作时后有波动,不正常,过一段时间以后才正常输出pwm。我把程序发一下,你帮帮我吧,找不出原因好着急。
        while(1)
        {
                 position_1();
                 position_2();
                 position_3();
                 position_4();
                 position_5();
                 position_6();
                 position_7();
                 position_8();
        }

void position_1(void)
{
         static uint8_t i=0;
         __IO uint16_t ccr;
         for(i=0;i<101;i++)
         {
                 TIM3->CCR1=1500;                                                //1500
                 TIM3->CCR2=1500;                                                //1500
                 TIM3->CCR3=1500-1.40*i;                //1500-140=1360
                 TIM3->CCR4=1500+1.40*i;                //1500+140=1640
                 TIM4->CCR1=1500;                                                //1500
                 TIM4->CCR2=1500-6.28*i;                //1500-628=872
                 TIM4->CCR3=1500-3.02*i;                //1500-302=1198
                 TIM4->CCR4=1500;
                 delayms(10);
         }
}



作者: 狅士§    时间: 2014-9-4 18:00
这么看,是没问题的

作者: 狅士§    时间: 2014-9-4 18:01
哦,可能是连接问题,我是上次动作和当前动作平滑过度的
作者: ず竹叶萧萧は    时间: 2014-9-4 18:06
狅士§ 发表于 2014-9-4 18:01
哦,可能是连接问题,我是上次动作和当前动作平滑过度的

你可不可以把你的程序给我看一下呢,我现在从示波器里看好像是for循环每运行一次,1500减去一个数后,再循环第二次时又跳回1500了,搞不懂,我现在在while循环前面加1.5ms的延时,这1.5稳定在初始的1500,1.5ms过后开始while 循环就可以正常输出了

作者: 狅士§    时间: 2014-9-4 18:13
你是在做比赛还是?
          d_PWM_1 = (Target_PWM_1-Present_PWM_1)*0.005;           //精度单位,可修改
          d_PWM_2 = (Target_PWM_2-Present_PWM_2)*0.005;
          d_PWM_3 = (Target_PWM_3-Present_PWM_3)*0.005;
          d_PWM_4 = (Target_PWM_4-Present_PWM_4)*0.005;
          d_PWM_5 = (Target_PWM_5-Present_PWM_5)*0.005;
          d_PWM_6 = (Target_PWM_6-Present_PWM_6)*0.005;

这个是关键。
作者: ず竹叶萧萧は    时间: 2014-9-4 18:43
狅士§ 发表于 2014-9-4 18:13
你是在做比赛还是?
          d_PWM_1 = (Target_PWM_1-Present_PWM_1)*0.005;           //精度单位,可修改
          d_PWM ...

我不参加比赛,自个玩。
你这个程序我没太懂。目标值减去当前值再乘精度,这是在求什么,求出来之后再怎么应用呢?麻烦了

作者: 狅士§    时间: 2014-9-5 09:43
求的是d-PWm.就是差值再分成200等分。你自己在想个条件下他一直加或减这么多等分就行了
作者: 2点1刻    时间: 2014-9-6 10:16
你是多大的电压?电压或电流不足有可能会出现这种问题
作者: ず竹叶萧萧は    时间: 2014-9-6 18:32
2点1刻 发表于 2014-9-6 10:16
你是多大的电压?电压或电流不足有可能会出现这种问题

我们舵机是6v供电,单片机是用电脑供的电。电压应该没问题,我们每次试都会有波动

作者: ず竹叶萧萧は    时间: 2014-9-6 18:33
狅士§ 发表于 2014-9-5 09:43
求的是d-PWm.就是差值再分成200等分。你自己在想个条件下他一直加或减这么多等分就行了

嗯,我懂了。还想问一下,你们pwm是用TIM的pwm1输出模式输出的吗,还是用其他模式

作者: 狅士§    时间: 2014-9-7 15:04
忘了。。。
作者: 山外青山    时间: 2015-12-16 23:09
狅士§ 发表于 2014-9-5 09:43
求的是d-PWm.就是差值再分成200等分。你自己在想个条件下他一直加或减这么多等分就行了

请问你知道如何同时控制多个舵机转动吗
作者: 大于号    时间: 2016-3-5 20:22
刚刚接触学习一下,谢谢分享
作者: Kpower-Servo    时间: 2016-4-8 20:21
来学习的
作者: 黎元小同学    时间: 2016-8-19 23:54
加个pd调节,p的系数调小点就好了
作者: 电气胖哥    时间: 2016-11-12 13:14
学习了




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2