智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2828|回复: 3
打印 上一主题 下一主题

求救!!S3010舵机控制的程序

[复制链接]

14

主题

33

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1918
威望
1505
贡献
345
兑换币
137
注册时间
2015-11-18
在线时间
34 小时
毕业学校
NUDT
跳转到指定楼层
1#
发表于 2016-4-23 21:06:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主函数

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函数计算成功了,但是为什么舵机不能左右打角?

回复

使用道具 举报

12

主题

62

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1818

活跃会员奖章优秀会员奖章

威望
936
贡献
472
兑换币
595
注册时间
2015-10-9
在线时间
205 小时
毕业学校
太原工业学院
2#
发表于 2016-4-25 17:17:31 | 只看该作者
FTM精度??
回复 支持 反对

使用道具 举报

14

主题

33

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1918
威望
1505
贡献
345
兑换币
137
注册时间
2015-11-18
在线时间
34 小时
毕业学校
NUDT
3#
 楼主| 发表于 2016-4-25 19:02:31 | 只看该作者

学长,能具体一点吗,我是新手
回复 支持 反对

使用道具 举报

12

主题

62

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1818

活跃会员奖章优秀会员奖章

威望
936
贡献
472
兑换币
595
注册时间
2015-10-9
在线时间
205 小时
毕业学校
太原工业学院
4#
发表于 2016-4-25 21:29:02 | 只看该作者
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

相当于这个东西

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-24 11:29 , Processed in 0.044472 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表