STM32野火开源平衡小车(七)之修改更适合工程的PID控制

野火开源平衡车官网板块

https://www.firebbs.cn/forum.php?mod=forumdisplay&fid=129&page=1

参考资料

暂无

参考视频(这个群主讲的不错)

https://www.bilibili.com/video/BV1j7411z7uX

硬件平台

开发平台

KEIL5, STM32F103X主控,程序用的SWD下载(啥下载器都行,能下载进去就好,用串口下载也是可以的)

开发(一)  这节把控制程序修改成标准的串级PID流程

图来源于B站那个视频的UP主

源代码

修改后

再加个因为避免动手力度过大,导致车车扑街,引起电机不停的转,加入扑街前电机停转

在motor.c那边添加下面函数 

修改直立环为标志PID直立环

修改前

修改后(给用上med期望角度了)

同样的 修改速度环

修改前

同样的增加了机械中值

转向环不用修改

我昨天那边有个BUG,就是有一边电机不受控制的上电就转, 我怀疑有程序跑飞了(可能是OLED或者MPU6050的模拟IIC的锅),现在放狗来试试

移植狗来自野火的例程

在工程main.c那边添加

#include "bsp_wwdg.h"

以及在组(group)那边把bsp_wwdg.c添加进来

在stm32f10x_it.c中

添加狗跑飞中断 并点灯 

灯这边我用PC1吧(低电平亮,高电平灭)

随便配置一下在串口那边 把灯给初始化了, 还是在野火那边放狗那边移植一个过来吧

在主函数那边 配置LED和放狗

死循环那边就喂狗就行

现在重新调参

先确定车车重心

把3个环注视掉再确定机械中值

全部填0,确定车车在什么时候有倒下的倾向

我这边大概是+5.5 前倒 和1后倒

确定机械中值为 6.5/2 = +3.25 

确定之后  确定直立环

方向我之前确定了 直接调就行 , 先来个-250

-330的时候出现低频抖动了 现在引入kd

    Vertical_Kd=-1.7; 出现了高频抖动  处理一下

    Vertical_Kp=-330, *0.6 = -198
    Vertical_Kd=-1.7; *0.6 = -1.02


开始搞速度环

速度环的确立 要让小车保持平衡的同时, 速度趋于0,而且回到原位(开机的位置)的效果好

效果不是很好 还是会来回跑 我又设置了0.6 推一下直接扑街了

最后选了0.38 比较不错,回弹力度没有0.4的晃(比较大力推会来回荡着回原点))

调转向环

Turn_Kp=-0.8 效果还可以

刚才放在地上测试的时候 发现来回拨动 小车还是会倒, 因此加大速度环

同时加大扑街的角度 让他别那么块就扑街

于是总的调试结果

最后效果还行, 但是车车还是不平衡, 应该是我这边放电池的位置不好,

还有 那个电机不受控制的BUG还是这个鸟样, 放狗都没用 看来不是程序跑飞的问题

问题应该出现在

    MPU_Init(); // MPU6050初始化
    mpu_dmp_init(); //MPU6050的DMP初始化(Digital Motion Processor数字运动处理器,硬件带的)
    MPU6050_EXTI_Init();// MPU6050外部中断以及引脚配置
这个MPU6050的函数这里

猜你喜欢

转载自blog.csdn.net/jwdeng1995/article/details/108194821
今日推荐