智能车制作

标题: 为什么我的舵机转不到90度 虽然在车子上用不上90度 我想弄明白这是为什么 [打印本页]

作者: Poised    时间: 2014-1-3 22:41
标题: 为什么我的舵机转不到90度 虽然在车子上用不上90度 我想弄明白这是为什么
求解释:程序如下
/***************************************************************************************
功能说明:MC9S128----舵机控制
使用说明:实现通道3(PTP3)输出频率为50HZ的方波,用示波器观察。按键PTH3实现舵机左转45度
          按键PTH4实现舵机右转45度
程序设计:重庆机电职业技术学院车辆工程系汽车电子实验室
设计时间:2014年1月3日
***************************************************************************************/
#include <hidef.h>     /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include <mc9s12xs128.h>    /* derivative information */

/***************************************************************************************
函数名称?void setbusclk_40M(void)
功能简介:设置总线频率40MHz,晶振频率16MHz
入口参数:无
出口参数:无
***************************************************************************************/
void setbusclk_40M(void)
{
CLKSEL_PLLSEL=0;                      //不使能锁相环时钟
PLLCTL_PLLON=1;                       //锁相环电路允许
SYNR=0XC0|0x04;                       //时钟合成寄存器
                                       //VCO_clock=2*osc_clock*(1+SYNR)/(1+REFDV)=80MHz
                                       //VCOFRQ[1:0]=1:1,代表VCO_clock在80~160MHz之间
REFDV=0X80|0X01;                      //VCO_CLOCK=2*osc_clock*(1+SYNR)/(1+REFDV)=80MHz
                                       //REF_clock=osc_clock/(REFDV+1)=16/(1+1)=8MHz
                                       //REFFRQ[1:0]=1:0,因为参考时钟在6~12MHz之间
POSTDIV=0X00;                         //VOC_clock=PLL_clock
                                       //F(bus)=F(pll)/2
_asm(nop);
_asm(nop);                            //短暂延时,等待时钟频率稳定
while(!(CRGFLG_LOCK==1))              //时钟频率已稳定,锁相环频率锁定
{
   ;
}
CLKSEL_PLLSEL=1;                      // 使能锁相环
}
/***************************************************************************************
函数名称?void PWM_int(void)
功能简介:设置PWM模块初始化    开始输出高电平   左对齐   
          50HZ频率
入口参数:无
出口参数:无
***************************************************************************************/
//---------------------PWM通道3初始化程序-------------------//
void PWM_Init(void)
{
PWME_PWME3=0x00;                      // PWW is disabled                 禁止            
PWMPRCLK=0x20;                        // 0b0011 0011 A=B=40M/4=10M       时钟预分频寄存器设置
PWMSCLB=100;                          // SB=B/2/125=5000hz               时钟设置
PWMCTL=0x20;                          // 通道2,3级联                     控制寄存器设置                              
PWMCLK_PCLK3=1;                       // PWM3-----SB                      时钟源的选择
PWMPOL_PPOL3=1;                       // 开始输出高电平                  极性设置
PWMCAE_CAE3=0;                        // 左对齐                          对齐方式设置
PWMPER23=1000;                        // Frequency=SB/100=50             周期寄存器设置
PWMDTY23=75;                          // Duty cycle = 50%               占空比寄存器设置
PWME_PWME3=1;                         // enable                          使能
}
void main()
{
  DDRH=0X00;
  PTH=0XFF;
  setbusclk_40M();
  PWM_Init();
while(1)
{
    switch(PTH)
    {
      case 0XF7WMDTY3=50;  break;     //左转45度
      case 0XEF:PWMDTY3=100; break;     //右转45度*/
      case 0xfb:PWMDTY3=25;  break;     //左转90度
      case 0xdf:PWMDTY3=125; break;     //右转90度
      case 0x7f:PWMDTY3=75;  break;     //舵机回正
    }
}
}


作者: 头上两只角    时间: 2014-1-3 23:10
。。。。。  看看说明吧。
作者: Poised    时间: 2014-1-3 23:20
头上两只角 发表于 2014-1-3 23:10
。。。。。  看看说明吧。

看过了   脉冲为1.5ms时就是-90度  2.5ms时就是+90度   我觉得我的算法没问题   周期用示波器测出来也 是20ms
就是不能实现90度   我实在不知道为何   书也看了

作者: wzp1992    时间: 2014-1-4 09:38
是不是机械上卡住了?
作者: Poised    时间: 2014-1-4 09:53
wzp1992 发表于 2014-1-4 09:38
是不是机械上卡住了?

应该不是卡住了吧    压根一点都没有反应   转45度的时候正常      

作者: liningbo888    时间: 2014-1-4 13:28
为什么不用级联输出,23通道一起给总比3单独给精度高
作者: Poised    时间: 2014-1-4 13:48
liningbo888 发表于 2014-1-4 13:28
为什么不用级联输出,23通道一起给总比3单独给精度高

感谢你的回答  我明白你的意思  这个是我的大意     我照你的改成了23通道   效果还是一样的啊
作者: liningbo888    时间: 2014-1-4 13:59
Poised 发表于 2014-1-4 13:48
感谢你的回答  我明白你的意思  这个是我的大意     我照你的改成了23通道   效果还是一样的啊

感觉还是你的精度设置的不对,要是正常双通道合并输出,周期至少可以10000以上,现在周期精度都不够舵机控制精确

作者: tobeabh    时间: 2014-1-5 15:50
那个1.5ms不是精确的,我看3010舵机说明书上是1520us




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