查看: 2978|回复: 2

GD32方案分享11:金属巡线思路

[复制链接]
  • TA的每日心情

    2017-11-27 16:33
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-5-28 22:22:40 | 显示全部楼层 |阅读模式
    分享到:
    大致代码框架写完了,但是手头传感器和线圈数量不够,过两天置备齐全了再说吧。
    巡线考虑到实际铺设,选择铝膜胶带,一卷才10块钱,是不是很划算,
    传感器最少使用两个,一个的话无法知道相对位置,不知道左偏还是右偏
    用两个传感器就可以计算出车与铝箔胶带的相对位置,得出相对误差,再通过这个相对误差控制舵机打角,当然要求不高的场合不需要使用PID算法,当然建议使用,PID的具体有经典的位置式和增量式的,一般这种方向控制的选择位置式的,电机速度控制选择增量式的,如下有示例代码,这两天还有别的事情,项目就先告一段落了,过两天补发视频
    1. int16 CarTurn(struct PID_Servo *Servo)
    2. {       
    3.    Servo->NowError = Servo->SetPoint - Servo->FeedBack;
    4.          Servo->Kp = (Servo->NowError * Servo->NowError)/2+Servo->Kp_Base;
    5.          if(( Servo->NowError  < DEADLINE ) && ( Servo->NowError  > -DEADLINE ) )//设置调节死区1
    6.    {;}//do nothing
    7.    else
    8.    {
    9.         Servo->Kd_Error = Servo->NowError - Servo->PreError;        //计算微分项偏差
    10.         Servo->Ki_ErrorSum += Servo->NowError;                            //存储当前积分偏差
    11.         Servo->PreError = Servo->NowError;                                //存储当前偏差       
    12.         Servo->Out =Servo->Kp * Servo->NowError
    13.                                                                  + Servo->Ki * Servo->Ki_ErrorSum  
    14.                                                                  + Servo->Kd * Servo->Kd_Error;                      //位置式PID算法
    15.         Servo->Out =Servo_MID + Servo->Out;
    16.                     if(Servo->Out >= Servo_MAX)                           //防止调节溢出 限幅
    17.         {
    18.             Servo->Out = Servo_MAX;
    19.         }
    20.         else if(Servo->Out <= Servo_MIN)
    21.         {
    22.             Servo->Out= Servo_MIN;       
    23.         }
    24.     }
    25.           return Servo->Out;
    26. }

    27. int16 CarSpeed(struct PID_Speed *Speed)
    28. {
    29.         Speed->NowError = Speed->SetPoint - Speed->FeedBack;        //当前偏差
    30.         Speed->Kp_Error = Speed->NowError - Speed->PreError;        //比例项
    31.         Speed->Kd_Error = Speed->Kp_Error - Speed->Pre_Kp_Error;    //微分项
    32.        
    33.         Speed->PreError = Speed->NowError;                          //存储误差
    34.         Speed->Pre_Kp_Error = Speed->Kp_Error;

    35.   if((Speed->NowError < V_DEADLINE) && (Speed->NowError > -V_DEADLINE))
    36.         {        //设置调节死区
    37.                 ;
    38.         }
    39.         else
    40.         {
    41.                 Speed->Out += Speed->Kp * Speed->Kp_Error
    42.                             + Speed->Ki * Speed->NowError
    43.                 + Speed->Kd * Speed->Kd_Error;               
    44.         }

    45.         if(Speed->Out >= SPEED_MAX)
    46.         {
    47.                 Speed->Out = SPEED_MAX;
    48.         }
    49.         else if(Speed->Out <= SPEED_MIN)
    50.         {
    51.                 Speed->Out = SPEED_MIN;
    52.         }
    53.         return Speed->Out;
    54. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-5-29 10:57:24 | 显示全部楼层
    到时候来个巡线视频
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-11-27 16:33
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-5-29 15:18:24 | 显示全部楼层
    http://v.youku.com/v_show/id_XMjc5MDgxODg0NA==.html?spm=a2hzp.8253869.0.0
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 08:00 , Processed in 0.118630 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.