arduino平衡小车—(四)全方案整合-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3600|回复: 0

arduino平衡小车—(四)全方案整合

[复制链接]
发表于 2017-11-8 13:31 | 显示全部楼层 |阅读模式
1.通过上面介绍,将车模直立行走主要的控制算法集中起来,如图

为了实现小车直立行走,需要采集如下信号:
        (1)小车倾角速度陀螺仪信号,获得小车的倾角和角速度。
        (2) 重力加速度信号
        (z轴信号),补偿陀螺仪的漂移。该信号可以省略,有速度控制替代。
        (3) 小车电机转速脉冲信号,获得小车运动速度,进行速度控制。


        2.在小车控制中的直立和速度控制两个环节中,分别使用了角度PD控制和速度PI控制,这两种控制算法的输出量最终通过叠加通过电机运动来完成。
        (1)小车直立控制:使用小车倾角的PD(比例、微分)控制;
         
        void AngleControl(void)
        {
        BST_fCarAngle = Roll - CAR_ZERO_ANGLE;//DMP ROLL滚动方向角度与预设小车倾斜角度值的差得出角度   
        BST_fAngleControlOut =  BST_fCarAngle * BST_fCarAngle_P + gyro[0] * BST_fCarAngle_D ;  //角度PD控制   
        }

        (2)小车速度控制:使用PI(比例、积分)控制;
   
        void SpeedControl(void)
        {
        BST_fCarSpeed = (BST_s32LeftMotorPulseSigma  + BST_s32RightMotorPulseSigma );  
        //左右电机脉冲数平均值作为小车当前车速
        BST_s32LeftMotorPulseSigma =BST_s32RightMotorPulseSigma = 0;  
        //全局变量 注意及时清零
        BST_fCarSpeedOld *= 0.7;
        BST_fCarSpeedOld +=BST_fCarSpeed*0.3;
        BST_fCarPosition += BST_fCarSpeedOld;  //路程  即速度积分
        BST_fCarPosition += BST_fBluetoothSpeed;   //融合蓝牙给定速度
        BST_fCarPosition +=fchaoshengbo;   //融合超声波给定速度
        if(stopflag==1)
        {
                    BST_fCarPosition=0;
        }//悬停以后的位置

        //积分上限设限//
        f((s32)BST_fCarPosition > CAR_POSITION_MAX)    BST_fCarPosition = CAR_POSITION_MAX;
        if((s32)BST_fCarPosition < CAR_POSITION_MIN)    BST_fCarPosition = CAR_POSITION_MIN;         
        BST_fSpeedControlOutNew = (BST_fCarSpeedOld -CAR_SPEED_SET ) * BST_fCarSpeed_P + (BST_fCarPosition - CAR_POSITION_SET ) * BST_fCarSpeed_I; //速度PI算法 速度*P +位移*I=速度PWM输出
        }

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 00:18 , Processed in 0.069110 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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