智能车制作

标题: 路径检测程序问题求助 [打印本页]

作者: KAKA10    时间: 2013-3-13 20:58
标题: 路径检测程序问题求助

我想通过赛道检测来使舵机能够简单的左右摆,下面这程序问题出在哪,一点反应都没有啊,有没大神能帮忙看看啊,ad虽然设置了8个通道,不过我只用了0和1 来做简单那检测

#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"


#define uint  unsigned int
#define uchar unsigned char

uchar ad_result[8]; //AD转换数值


int road;
int dd=200;
uint ref=3000;
uint OUTPUT;


/////////////////////////////
void ADInit(void)
{
   ATD0CTL1=0x00;
   ATD0CTL2=0X40;           /*  使能AD,清除标志  */
   ATD0CTL3=0XB0;    /*  队列长度为6,依次存入结果寄存器,继续转换 */
   ATD0CTL4=0X05;   /*  8位精度,总线频率32分频 */
   ATD0CTL5=0X30;  /*  ,多通道,连续,从AD0开始转换*/
   ATD0DIEN=0x00;   //禁止数字输入
  
}
////////////////////////////////
//**************************************************************************
//
//获取AD转换数值的函数
//
//**************************************************************************
  void Rd_Ad_Value(void)
{
   
    while(!ATD0STAT0_SCF);  //等待转换完成
                          // ATD0STAT0 ATD转换状态寄存器0
                          // SCF - ETORF FIFOR CC3 CC2 CC1 CC0
                          // SCF: 转换序列完成标志,=1,转换完成,写ATD0CTL5被清0
                          // ETORF: 外部边沿触发溢出标志位。ETIGLE=0时,当ATD转换正在进行过程中检测到外部边沿触发信号,该位被置1
                          // FIFOR: 先入先出溢出标志位
                          // [CC3:0]: 转换计数,表示当前转换的结果将要写入的结果寄存器的编号。
                          //          ATD0CTL3_FIFO=0时,在转换开始和转换结束时候[CC3:0]都会被初始化为0
   
    //一次过取出八个通道的AD值
    ad_result[0]=ATD0DR0L;
    ad_result[1]=ATD0DR1L;    //演示时使用【正中间】的传感器
    ad_result[2]=ATD0DR2L;
    ad_result[3]=ATD0DR3L;
    ad_result[4]=ATD0DR4L;
    ad_result[5]=ATD0DR5L;
    ad_result[6]=ATD0DR6L;
    ad_result[7]=ATD0DR7L;
}
/*****舵机方向信号源pwm如下*************************/


//  pwm通道23级联

void init_PWM()
{
    PWME_PWME3=0;//关闭3通道   
    PWMCTL_CON23=1;//23级联  
    PWMCLK_PCLK3=1;//设0,1通道SB为其时钟源  
    PWMPRCLK=0x08;//对总线时钟进行预分频,总线时钟为32M,分频后为32M/2=16M
    PWMSCLB=0X08;//8位 clock SB=Clock B/(2*PWMSCLA)    clock SB=16M/(2*8)=1M
    PWMPOL_PPOL3=1;//起始时为高电平
    PWMCAE_CAE3=0;//左对齐
    PWMPER23=20000;//输出频率为50HZ,周期20ms
   
    PWME_PWME3=1;//通道使能  
}

void set_road(void)

{
if(ad_result[0]<ad_result[1])  
road=0;
    else
        if(ad_result[0]>ad_result[1])  
          road=1;
           else
               if(ad_result[0]=ad_result[1])   
                 road=2;

}
   
void set_direction(void)
{
  set_road();

  switch(road)
  
  {
  //////////////////////////////////////////////////
    case 0: OUTPUT=ref+dd ;
      
    break;
    ////////////////////////////////////////////////
   
    case 1:
    OUTPUT=ref-dd;
    break;
    ////////////////////////////////////////////////////////////////
    case 2:
   OUTPUT=ref;
     break;
  }
   
   
    PWMDTY23 = OUTPUT;
  
}
////////////////////////////////////////////////////////////////////////////////////  
//*******************************

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






   
void main(void)
{
   
   
    SetBusCLK_32M();
    ADInit()  ;
    Rd_Ad_Value() ;
    init_PWM();  
    for(;;)
   {
         
      set_direction()  ;
      
     
    }


}

作者: 王彦杰    时间: 2013-3-27 19:56
PWM的占空比没设置啊
作者: 吉萨非机动    时间: 2014-3-24 22:48
楼主略逗,占空比都忘了




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