智能车制作

标题: 求助:B车模sd-05舵机只能一个方向摆到最大 [打印本页]

作者: ⊙Lin⊙    时间: 2013-1-27 11:30
标题: 求助:B车模sd-05舵机只能一个方向摆到最大
之前前发过一个关于舵机的控制问题,原来同一个PWMx口有两个通道输出的,选择哪个通道输出还要配置PTTRRx寄存器。现在配好了,新问题又出来了,就是舵机只能一个方向打到最大。是不是频率的问题啊?有的人说配置成50hz有的人说要配成300hz。急啊!在线等啊!!!贴个程序。。。如果有大神可以贴自己的程序出来更好了。
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

void SetBusCLK_64M(void)
{   
    CLKSEL=0X00;                //disengage PLL to system
    PLLCTL_PLLON=1;         //turn on PLL
    SYNR =0xc0 | 0x07;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
    _asm(nop);          //BUS CLOCK=64M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));     //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;               //engage PLL to system;
}

void PWM_45(void) {     //舵机初始化
    PTTRR_PTTRR5 = 1;
    PWME_PWME5 = 0;
    PWMCTL_CON45 = 1;   //4和5联合成16位PWM;
    PWMCAE_CAE5 = 0;    //选择输出模式为左对齐输出模式
    PWMCNT45 = 0;       //计数器清零;
    PWMPOL_PPOL5 = 1;   //先输出高电平,计数到DTY时,反转电平
    PWMPRCLK_PCKA1 = 1;    //clockA 4分频,clockA=busclock/4=16MHz;
    PWMPRCLK_PCKA0 = 0;
    PWMPRCLK_PCKA2 = 0;
    PWMSCLA = 0x08;     //对clock SA 16分频,pwm clock=clockA/16=1MHz;     
    PWMCLK_PCLK5 = 1;   //选择clock SA做时钟源
    PWMPER45 = 20000;   //周期20ms; 50Hz;
    PWMDTY45 = 1510;    //高电平时间为1.5ms;
    PWME_PWME5 = 1;   
}

void main(void) {
      int i;
      int j;
      int k;
     SetBusCLK_64M();
     PWM_45();

          while(1) {

    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }

         PWMDTY45=1280;//左转


    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
          }

        PWMDTY45=1740; //右转


    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }
        PWMDTY45=1850; //极右                 


    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }
        PWMDTY45=1050;    //极左                    

    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }
        PWMDTY45=1510;     //摆正            

    for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }
        PWMDTY45=1510;           
          }
}



作者: sunzhaoxing2012    时间: 2013-1-27 13:48
我曾经也出现过这种情况,我的原因是舵机坏了,表现是电压高了后就只能往一个方向转,电压低了之后就恢复正常了,换了舵机之后,一切正常

作者: ⊙Lin⊙    时间: 2013-1-27 14:19
啊?不要吓我?什么电压低后恢复正常?又说舵机坏了?
作者: 23mjxl    时间: 2013-1-27 15:51
舵机控制只和脉宽有关,SD5在50HZ也能工作
作者: booboyo    时间: 2013-1-27 18:39
SD-5 脉冲频率300HZ是正解,官方给的资料说的。 舵机的转角跟脉宽有关,脉宽为0.5ms的时候是最左,2.5ms脉宽的时候是最右,1.5ms的时候是置中。不同品牌的舵机会有点偏差,只要你的在这个范围内调试就可以了。   
市面上卖的其他模拟舵机大多数的标准脉冲频率都是50hz,有的时候为了增加灵敏度往往会加大脉冲频率100hz或者是300hz,只要实际测试好用就可以。
作者: ⊙Lin⊙    时间: 2013-1-27 23:52
booboyo 发表于 2013-1-27 18:39
SD-5 脉冲频率300HZ是正解,官方给的资料说的。 舵机的转角跟脉宽有关,脉宽为0.5ms的时候是最左,2.5ms脉宽 ...

谢谢,我的问题已经解决了。

作者: willkong    时间: 2013-3-13 22:41
⊙Lin⊙ 发表于 2013-1-27 23:52
谢谢,我的问题已经解决了。

想问一下你每一段转向都前面都加下面这段程序起什么作用啊???
for(i=0;i<=200;i++) {
          for(j=0;j<=200;j++) {
            for(k=0;k<=20;k++)
            ;}
         }


作者: ⊙Lin⊙    时间: 2013-3-14 00:12
willkong 发表于 2013-3-13 22:41
想问一下你每一段转向都前面都加下面这段程序起什么作用啊???
for(i=0;i

这个只是测试程序,包括中值,极左,极右对应的值。

作者: 王晓光    时间: 2013-3-14 21:17
⊙Lin⊙ 发表于 2013-3-14 00:12
这个只是测试程序,包括中值,极左,极右对应的值。

怎么解决的?真是300HZ吗?
作者: ⊙Lin⊙    时间: 2013-3-15 09:53
王晓光 发表于 2013-3-14 21:17
怎么解决的?真是300HZ吗?

50Hz

作者: 王晓光    时间: 2013-3-15 18:21
⊙Lin⊙ 发表于 2013-3-15 09:53
50Hz

为什么我用50hz控制不动的?程序没有问题
作者: ⊙Lin⊙    时间: 2013-3-15 20:17
王晓光 发表于 2013-3-15 18:21
为什么我用50hz控制不动的?程序没有问题

用示波器测测,频率对一般是没问题的!

作者: 王晓光    时间: 2013-3-15 20:36
⊙Lin⊙ 发表于 2013-3-15 20:17
用示波器测测,频率对一般是没问题的!

原来是那个舵机坏了
作者: ⊙Lin⊙    时间: 2013-3-15 21:00
王晓光 发表于 2013-3-15 20:36
原来是那个舵机坏了

{:soso_e136:}{:soso_e136:}其实我想说这个可能的了,只是之前我驱动不了舵机的时候也怀疑过是不是这东西坏了。后来发现是频率不对,所以不好对你说。

作者: 王晓光    时间: 2013-3-15 21:18
⊙Lin⊙ 发表于 2013-3-15 21:00
其实我想说这个可能的了,只是之前我驱动不了舵机的时候也怀疑过是不是这东西 ...

已经很确定的说是因为舵机坏了,因为我的程序可以驱动另一个同样型号的舵机
作者: 飞翔的翅膀    时间: 2013-3-15 22:03
程序错了哈
作者: ⊙Lin⊙    时间: 2013-3-15 23:18
王晓光 发表于 2013-3-15 21:18
已经很确定的说是因为舵机坏了,因为我的程序可以驱动另一个同样型号的舵机

有反应不一定就行了,还得看是否能按你意思打角。

作者: 王晓光    时间: 2013-3-16 08:43
⊙Lin⊙ 发表于 2013-3-15 23:18
有反应不一定就行了,还得看是否能按你意思打角。

嗯,现在正在试,谢谢指导
作者: Ooo    时间: 2013-4-24 13:45
⊙Lin⊙ 发表于 2013-1-27 23:52
谢谢,我的问题已经解决了。

请问你的问题是怎么解决的?

作者: ⊙Lin⊙    时间: 2013-4-24 13:54
Ooo 发表于 2013-4-24 13:45
请问你的问题是怎么解决的?

首先参考经典的频率配寄存器输出PWM (20ms).0度角对应0.5ms占空比。然后看舵机摆到哪里,以那个位置作为中值。加减占空比就可以实现左右转了。

作者: Ooo    时间: 2013-4-24 13:57
⊙Lin⊙ 发表于 2013-4-24 13:54
首先参考经典的频率配寄存器输出PWM (20ms).0度角对应0.5ms占空比。然后看舵机摆到哪里,以那个位置作为 ...

恩 过会去实验室试试。我们的舵机用着用着就出现了只能往一边打的情况 你们也是这样的嘛?昨天晚上一下挂了两个。。。我去

作者: ⊙Lin⊙    时间: 2013-4-24 18:30
Ooo 发表于 2013-4-24 13:57
恩 过会去实验室试试。我们的舵机用着用着就出现了只能往一边打的情况 你们也是这样的嘛?昨天晚上一下挂 ...

你们有没有限制极左极右的占空比?这个要测试好加上,不然弄话舵机,特别这些烂舵机里面是塑料的。


作者: Ooo    时间: 2013-4-26 21:56
⊙Lin⊙ 发表于 2013-4-24 18:30
你们有没有限制极左极右的占空比?这个要测试好加上,不然弄话舵机,特别这些烂舵机里面是塑料的。

限死的,亲测是舵机烧了。

作者: 夏琪1991    时间: 2013-6-15 19:32
能说说,你那舵机具体是什么原因吗?我这出现同样问题  不知道怎么解决
作者: ⊙Lin⊙    时间: 2013-6-15 22:16
夏琪1991 发表于 2013-6-15 19:32
能说说,你那舵机具体是什么原因吗?我这出现同样问题  不知道怎么解决

就是频率问题。

作者: 小布的梦    时间: 2013-11-29 20:29
学习啦!!!!
作者: yebuyu    时间: 2013-12-4 16:11
:L:L:L
作者: TalentHUA    时间: 2016-4-9 16:05
求教!有人有写过例程吗?只要SD5舵机的就行,买的岱墨家的,结果乱发资料!明明买的B车摄像头组的,结果发的全是C车资料,舵机都不一样,例程调试不对!。。。。。求各位,有没有SD5的舵机程序,借来看看,不用整车的,就单独调试多机的就行!邮箱2780698891@qq.com




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