STM32自平衡机器人项目(附代码、电路图等资料)~

STM32自平衡机器人项目(附代码、电路图等资料)~将机器人整体开源 同时总结一下机器人搭建过程中遇到的坑和未来的改进方向 在分享的文件里包含了结构设计 程序控制 电路设计以及其他模块相关资料供大家参考 机器人原理分析 首先来看成品图 如图所示 该机器人根据陀螺仪的位姿数据 通过三个全向轮驱动底部球体调整自己在球上的位置

大家好,我是讯享网,很高兴认识大家。

6d2f896896dd5b939466d09aa6ad435f.png
讯享网

将机器人整体开源,同时总结一下机器人搭建过程中遇到的坑和未来的改进方向。在分享的文件里包含了结构设计、程序控制、电路设计以及其他模块相关资料供大家参考。

机器人原理分析

    首先来看成品图:

0655e34648ddfe78fc26148c96290bdb.png

    如图所示,该机器人根据陀螺仪的位姿数据,通过三个全向轮驱动底部球体调整自己在球上的位置,保持动态平衡的同时实现全向移动。

1365aa9db6496b8a5cc0de177d30f999.png

    自平衡控制问题转化为三步:输入X、Y角度—控制器计算—输出A、B、C电机转速的控制模型。

控制器设计

    首先考虑参考平衡车控制,球上自平衡机器人本质上依然是一个一阶倒立摆问题。

dfc4414f8f7e25483cf0907e978df7d7.png

    这里参考了飞思卡尔直立车的控制方法,采用串级PID控制器,外环PD角度环,内环速度PI环。相关文章:PID算法原理介绍。

    这里还可以好好思考一下为什么角度环要用PD控制,速度环要PI控制,角度环的P部分和D部分对机器人控制有什么影响?在很多CSDN调试平衡车的博客中都有解释,这里就留给大家思考了。

硬件及结构设计

自平衡机器人的硬件清单有:

56mm全向轮 45元/个

42步进电机 25/个 

42步进闭环模块 59.8元/个 

LM2596S降压模块 20元 

STM32F103C8T6-4飞控板 59.8元 

GY-521六轴陀螺仪 25元

7f06cce6406915196f6870d3b143b990.png

    机器人使用solidworks设计整体结构,底板可在某宝定制6050太空铝切割,蓝色件为正常3D打印件。

188f1f084976fef2bd68176791599c17.png

程序部分

    在keil 5中开发STM32。

int TIM1_UP_IRQHandler (void) { u8 key_cal; if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1,TIM_IT_Update); flag_target=!flag_target; key_cal=KEY_Scan(0); if(state_flag==1)//矫正结束 { if(flag_target==1)//每读取两次陀螺仪控制一次 { Read_DMP(); //===读取倾角 scope(); return 0; } } if(key_cal==1)//矫正按键 { Angle_Zero_X=Angle_Balance_X; Angle_Zero_Y=Angle_Balance_Y; key_cal=0; Flag_Stop=0; } if(key_cal==2||key_cal==3)//矫正按键 { Flag_Stop=1;//关闭速度环I积分 key_cal=0; } Angle_Bias_X =Angle_Balance_X-Angle_Zero_X; //获取Y方向的偏差 Angle_Bias_Y =Angle_Balance_Y-Angle_Zero_Y; //获取Y方向的偏差 if(control_mode==0)//PID控制模式 { Encoder_Analysis(Motor_A,Motor_B,Motor_C); //正运动学分析,得到X Y方向的速度 Balance_Pwm_X= balance_X(Angle_Bias_X,Gyro_Balance_X);//X方向的倾角控制 Balance_Pwm_Y=-balance_Y(Angle_Bias_Y,Gyro_Balance_Y); //Y方向的倾角控制 // if(++flag_target_2==4)//速度环频率慢于加速度环 但是还没加速度环 // { Velocity_Pwm_X=velocity_X(compute_X); //X方向的速度控制 Velocity_Pwm_Y=velocity_Y(compute_Y); //Y方向的速度控制 // flag_target_2=0; // } Move_X =Balance_Pwm_X+Velocity_Pwm_X; //===X方向控制量累加 Move_Y =Balance_Pwm_Y+Velocity_Pwm_Y; //===Y方向控制量累加 Move_Z=0; Kinematic_Analysis(Move_X,Move_Y,Move_Z);//逆运动学分析得到ABC电机控制量 } Motor_A=Target_A;//直接调节PWM频率 Motor_B=Target_B;//直接调节PWM Motor_C=Target_C;//直接调节PWM //以下都是为了速度连续化处理防止突变 if(Motor_A==0) Motor_A=motor_a_last; if(Motor_B==0) Motor_B=motor_b_last; if(Motor_C==0) Motor_C=motor_c_last; Xianfu_Pwm(2000); Set_Pwm(Motor_A,Motor_B,Motor_C); Gyro_Balance_X_last=Gyro_Balance_X; Gyro_Balance_Y_last=Gyro_Balance_Y; Gyro_Balance_Z_last=Gyro_Balance_Z; Angle_Balance_X_last=Angle_Balance_X; Angle_Balance_Y_last=Angle_Balance_Y; Angle_Balance_Z_last=Angle_Balance_Z; motor_a_last=Motor_A; motor_b_last=Motor_B; motor_c_last=Motor_C; } return 0; }

讯享网

    对于电机控制,由于采用的驱动方案是步进电机,调速的方式是改变驱动步进电机的脉冲频率。我这里选择了三个定时器,动态调节定时器的频率,具体方式是在初始化时设定好定时器的预分频系数psc的值,然后在程序里动态更改ARR寄存器的值,从而改变定时器的定时频率。

讯享网//这里以A电机的速度控制为例 输入为 电机方向和电机速度 void set_motorA_speed(u8 dir,u16 speed) { u32 arr; arr=speed; TIM_ARRPreloadConfig(TIM3,DISABLE); TIM3->ARR=arr;//计数到10000在归零重新计数 TIM3->CCR4=arr/2;//保持占空比为50% TIM_ARRPreloadConfig(TIM3,ENABLE); TIM_Cmd(TIM3,ENABLE); if(dir==0) { GPIO_SetBits(GPIOA,GPIO_Pin_1); } else { GPIO_ResetBits(GPIOA,GPIO_Pin_1); } }
/ 函数功能:小车运动数学模型 入口参数:X Y Z 三轴速度或者位置 返回 值:无 */ void Kinematic_Analysis(float Vx,float Vy,float Vz) { Target_A = Vx + L_PARAMETER*Vz; Target_B = -X_PARAMETER*Vx + Y_PARAMETER*Vy + L_PARAMETER*Vz; Target_C = -X_PARAMETER*Vx - Y_PARAMETER*Vy + L_PARAMETER*Vz; } /* 函数功能:小车运动 正运动学分析 入口参数:A B C三个电机的速度 返回 值:无 / void Encoder_Analysis(float Va,float Vb,float Vc) { compute_X=(Va*2-Vb-Vc); compute_Y=((Vb-Vc)*sqrt(3)); compute_Z=(Va+Vb+Vc); }

    其余代码不全放出,可在文末点击“阅读原文”下载查看。

总结与展望

    球上自平衡机器人可以作为算法试验平台, 输入输出固定,更换不同控制器,将数据导入MATLAB进行分析即可比较控制器性能。

    控制部分的改进,首先是控制原理,本文是针对建立好的运动学方程进行分析,通过串级PID算法来实现自平衡运动。该机器人的控制问题本质上是一阶倒立摆问题,可以采用动力学建模的方式,通过动力学分析算出平衡需要的虚拟力矩,再对电机进行力矩控制。相关推荐:演示PID三个参数的控制作用。

    其次是控制器,PID控制算法应用广泛但也有一定的缺点,可以考虑采用模糊PID,ADRC自抗扰控制器,强化学习等智能控制算法对机器人自平衡进行控制。

原文链接

https://blog.csdn.net/_/article/details/

0c2bceb7c7d39216ba3c88247fb725ad.png

1.STM32U5,意法半导体新打造的超低功耗MCU旗舰版

2.【例说Arm-2D界面设计】从不规则图标的显示说起

3.STM8CubeMX和STM32CubeMX功能一样吗?

4.这九种情况下的单片机项目尽量不要接~

5.偷偷把室友的STM32换成了GD32后。。。

6.剖开苹果A15芯片,看看die的布局!

a3fe84b33012fe49a9f3cd9003d5080a.gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

小讯
上一篇 2025-01-23 23:57
下一篇 2025-02-23 21:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15278.html