智能车制作

标题: 求救!!S3010舵机控制的程序 [打印本页]

作者: KD-Brick    时间: 2016-4-23 21:06
标题: 求救!!S3010舵机控制的程序
主函数

uart_init (UART0 , 115200);                      //初始化UART0,输出脚PTA15,输入脚PTA14,串口频率 9600

  //  adc_init(ADC1, AD6a) ;

   gpio_init (PORTA , 17, GPO,HIGH);
   gpio_init (PORTB , 17, GPO,LOW);


      FTM_PWM_init(FTM1,CH1,180,30);



   pit_init_ms(PIT0, 5);                                    //初始化PIT0,定时时间为: 5ms
//  pit_init(PIT1, 10000);                                   //初始化PIT1,定时时间为: 0.2ms

   CCD_init1() ;             //CCD传感器初始化


  pixel_pt = Pixel;
  for(i=0; i<128+10; i++) {
    *pixel_pt++ = 0;
  }


   EnableInterrupts;                                            //开总中断  

   /******************************************
    执行程序
    ******************************************/
    while(1)
    {
      if(TIME1flag_1ms == 1)
      {
        TIME1flag_1ms = 0 ;

      }


      if(TIME0flag_20ms == 1)
      {
        TIME0flag_20ms = 0 ;
        /* Sampling CCD data */
        ImageCapture(Pixel);
        /* Calculate Integration Time */
        CalculateIntegrationTime();
        /* Send data to CCDView every 100ms */

       if(++send_data_cnt >= 5) {
         send_data_cnt = 0;
      SendImageData(Pixel);
      }

       Get_Line();                                                            //getline函数找到左右边线
       tep=steer(g_nRightLinePosition,g_nLeftLinePosition);  //steer函数在下面

        uart_putchar (UART0, tep);
        ATurnPWM=MIDSTRING+tep*100;
        FTM_CnV_REG(FTMx[FTM1], CH1) = ATurnPWM;


        /**********

        **********/

      }

    }
}
s16 TurnOut=0,LastTurnOut=0;//转向值
float TurnP=64,TurnD=0.6;//0.6;//*转向PD
float error,errord,lasterror,llasterror;
int steer(unsigned int RightLinePosition,unsigned int LeftLinePosition)
{
  error=(64-(RightLinePosition+LeftLinePosition)/2);

   errord=error-lasterror;

  TurnOut=(TurnP*error+TurnD*errord) ;
   lasterror=error;
  //llasterror=lasterror;

// LastTurnOut=TurnOut;

  return  TurnOut;
}


舵机只在通电的一刻稍稍动一下,tep的值也能够变化说明steer函数计算成功了,但是为什么舵机不能左右打角?


作者: 如同    时间: 2016-4-25 17:17
FTM精度??
作者: KD-Brick    时间: 2016-4-25 19:02
如同 发表于 2016-4-25 17:17
FTM精度??

学长,能具体一点吗,我是新手

作者: 如同    时间: 2016-4-25 21:29
KD-Brick 发表于 2016-4-25 19:02
学长,能具体一点吗,我是新手

#define FPM0_PRECISON 1000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FPM_PRECISON
#define FPM1_PRECISON 1000u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FPM_PRECISON
#define FPM2_PRECISON 100u     //定义占空比精度,100即精度为1%,1000u则精度为0.1%,用于占空比 duty 形参传入,即占空比为 duty/FPM_PRECISON

相当于这个东西






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