灵感来源

那年暑假,我刚加入机器人队,队长为我们所有人安排了暑期集训任务,就是要做一台自平衡小车,借此熟悉一下STM32,对机器人软硬件系统有一个初步的认识。但当时我有事情没能按时到学校,最后便错过了,我的队友们也最终栽在了玄学的PID调试上。虽然忙碌的大学生活让我时常感到有些喘不过气,但是我始终惦记着这台没有做成的小车。今天,我考完了研,拥有了充裕的时间和精力,知识和技术也有了一定积累,我感到自己再也没有什么理由不立即把它做出来了。

DIY全过程

最初我有过一个大胆的想法:小车的软硬件全部自己设计。但是事实说明并不实际,电路部分我可以勉强设计,要用到的模块我也大概了解,但是STM32的编程确乎超过了我的能力范围,所以最终决定还是在一个开源项目的基础上做一次自平衡小车的复现。

通过不懈搜索,我搜集到了一些开源的资料,包括各大论坛的、博主的、甚至飞思卡尔的;但都不尽人意,主要是没有一个对项目的系统的介绍,包括源代码;引脚定义也含糊,多数都没有注释;好在天无绝人之路,前任队长那里竟然有当时集训的材料,所以我的此次整个DIY都以这份珍贵的资料为基础。资料的获取方式我会在文末说明。

第一步 收集材料

要制作一台平衡小车,需要用到的硬件材料有:轮子、带编码器的直流电机、电机排线、面包板、杜邦线、STM32、稳压模块、蓝牙模块、电机驱动模块、陀螺仪模块、超声波模块、电池、底盘、螺栓、铜柱、固定轧带、开关等。下面是物料表:

材料都收集好后,第二步就是要把电路搭建起来。

第二步 搭建电路

参照如下电路图,利用已有的模块在面包板上搭建临时电路,注意按照一定顺序仔细接线,接线出错轻则导致bug重则直接损毁模块。

电路图十分清楚明白,这里我挑几点说明一下:

  1. 供电电路:实际中的供电电路其实就是稳压模块本身,它的输入是3S电池(约12V),输出可调,我们把它手动调到5V。事实上,整个系统除了驱动电路以外都使用5V供电。

  2. 红外模块:这个我们实际上没有用到,所以这部分电路可以忽略

  3. 驱动电路:驱动电路的能量来自电池,控制信号来自STM32单片机,它直接与电机相连实现驱动

    图纸所示的GND和接地符号初衷是表示数模接地分开,实际上是直接相连的。

  4. 3530电机:表示的实际上是一个接电机的端子。

面包板接线(部分)

第三步 烧录程序

烧录程序可以用USB也可以用SWD,如果你和我一样手边只有一个ST-link的话,也可以用杜邦线强行转成SWD,注意这样在Keil的设置里面还是要选择ST-link。在烧录之前有必要了解一下代码的基本逻辑,平衡小车的核心知识就在于平衡的原理以及代码实现,有关平衡原理部分可以参考资料里面的文档,网上也有丰富的教程,实际上对小车的平衡控制问题在动力学中就是一个一阶倒立摆问题。控制对象实际上就是小车的角度和速度,我们通过一个角度环(PD)和一个速度环(PI)让角度和速度尽量快的收敛到0,通过调整四个参数让振荡性和稳定误差尽量小的同时又能让响应时间尽量短。代码实现基本上就是按照这个控制思路来编写的,代码的作者将每个功能封装成了相对独立的函数并且有详细的注释,虽然我们不太可能从头自己编写一份这样的代码,但是以后可以复用代码除了main.c和upstandingcar.c的部分,加以修改实现别的功能。

成功烧录程序之后,你会发现小车会随着车身的摆动自行做调节,但是显然此时小车还不能实现直立。这是因为PID参数对于每一台车实际上都是不一样的,它会收到车体重心位置、陀螺仪放置位置以及车体质量分布等因素的影响,所以解铃还须系铃人,你的小车的PID参数还需要你来反复测试调整再测试才能确定。

搭建好的小车

细心的你可能发现了,这个小车看起来一改炸毛杜邦线风格,上面好像没有面包板。没错,第一版做出来我觉得杜邦线太多太乱了,而且验证了电路后也不需要修改了,杜邦线很松容易造成接触不良,所以我直接买了一个原理图一样的扩展版,和面包板基本是一样的,只是省去了杜邦线和稳压模块而已。当然还有别的原因,这个文末细讲。

第四步 调节PID参数

虽然我们时常把调PID调侃为“玄学工作”,因为各个参数之间存在耦合,所以看着小车在地下疯狂打转,却不知到应该变动PID哪个参数为好,甚至都不知道应该增大还是减小。其实,只要掌握了正确的调参顺序,理解每个参数对响应的影响机理,就不难调出让人满意的参数。

调节角度增益P1

角度增益决定了反馈的线性倍数,直接反映就是小车的调节幅度,P1太小,小车反馈影响小,宏观上就是感觉软绵绵地像是醉汉一样;P1太大,小车反馈过度,会出现大幅度的震荡,就像停不下来的招财猫一样,P的作用就像一个弹簧,总是提供反方向的力,偏移的程度越大反馈也就越大;调节时第一步要把其他三个参数全部归零,P1从小到大(约1~200)调节,直到调整到某一个值,小车能够较大幅度地来回震荡,说明P1的值已经能够把小车修正回来了,此时可以再稍微加大一点P1,到此,小车出现了明显的超调,下一步就是解决超调问题。

调节角度微分D

角度微分D是对角度的变化率进行反馈,就是小车角度往哪个方向变化,D就要减小这种变化,从而让小车趋于稳定;D太小,达不到反馈的效果,小车仍然有明显的震荡;D太大,小车对角度的细小变化过于敏感,可能会出现高频振动,D的作用就像一个阻尼器,弹簧上加上阻尼,它才能快速地停下来;在P1的基础上,D从小到大增加(0.01~0.8),直到某一值时,小车能短暂平衡约5秒钟才倒下,并且也不会出现高频振动,D也就调整好了。但是此时小车会先平衡后沿着某个方向慢慢运动直到加速失衡,这是因为到目前为止我们只是通过PD角度环使得角度基本稳定在0°,但是小车速度并没有控制,所以微小的角度误差不断累积,最终变成小车向某个方向缓慢不断加速直至电机到达极限倒下。

调节速度积分I

为了解决这个问题,让小车能够在原地平衡,我们要引入速度环,与角度环的目标是角度为零不同,速度控制的目标是让小车速度为零。I会对速度进行积分,如果小车向某个方向长时间有一定速度的话,I会产生相反的越来越大的反馈从而让小车及时停下加速的举动。I也会对突然的加速比如人手突然推一下小车做出快速的响应,有助于小车稳定,I的作用就像一个质量快,它赋予了小车模型上的惯性,让小车是一个有一定惯性的实体而不是轻飘飘的像云朵一样;在PD的基础上,I从小到大增加(0.05~0.3)。一般来说,I在比较小时便可看到小车明显有改善,I在保证小车稳定的情况下应当尽可能小一点。

计算速度增益P2

没错,就是计算,在I确定好的情况下,直接P2=200*I即可,这是很多人实际调试总结的工程经验,此时的系统已经是一个具有复杂耦合的系统了,改变单一的参数会对角度和速度控制同时产生影响,只不过是哪边显著哪边不显著的问题。

下面列出我的最终参数,仅供参考:

参数 数值
P1 150
D 0.53
P2 24
I 0.12

第五步 蓝牙遥控

代码内已经写好了蓝牙控制的功能,甚至资料里面还有配套的手机APP。上电之后蓝牙模块会快速闪灯,显示处于等待状态,用手机蓝牙连接,一般密码为0000或1234,如果不是的话咨询店家;连接上了打开APP,资料里有使用教程,按图索骥即可。

手机蓝牙遥控界面

值得一提的是这个APP还带在线调试PID参数的功能,可以极大提高我们调试的效率,再也不用反复烧写程序了。

实时调整PID参数

到此,平衡小车就制作完成了。知易行难,如果屏幕前的你有时间精力不妨也尝试一下,学习单片机的同时可以提高动手解决问题的能力。

实际效果展示:

自平衡小车DIY效果

Plus:

  1. 资料来源:亚博智能STM32平衡车(非广告,TB有很多类似的店) https://www.yahboom.com/study/bc-32 亚博开源了一部分资料,剩下一部分要求购买了它的产品才能获取。不必买整车,可以买一个扩展版(34.8¥),就可以获取全部的资料了,希望大家支持正版。当然平衡车的资料网上搜一搜还是非常多的,但是可能不如这个详尽,至少网上的源码肯定没有适配这个调PID的APP,所以需要自己写。我图方便直接买了,其实有一点违背DIY的初衷,大家有能力还是自己尝试写一写。
  2. 当然,如果你是作者的哥们,上一条可以忽略。
  3. 关于小车底盘,我是在AutoCAD中画好图纸,自己用切割机切的碳纤维板,如果你也拥有切割机的话可以正好练个手,如果没有的话可以画好图纸让淘宝定制也不是很贵,当然你也可以家里找一点材料手工做,如果不想弄这部分也可以亚博店里直接买。
  4. 关于为什么已经搭好面包板电路又买扩展版:这个除了为了获取亚博的资料外,更重要的原因是我想小车做好后过年让外甥女玩一玩,面包板接线易掉易短路不安全,封装整洁比较好。
  5. 喜欢可以点赞,比心 ❤️

基于STM32的自平衡小车DIY相关推荐

  1. 基于stm32的自平衡小车

    文章目录 引言 1.系统概述 1.1.设计任务 1.2.设计要求 2.方案设计与论证 2.1.芯片选择方案 2.2 .系统概述 2.3.设计要求 2.4.系统总体设计 2.5.各功能模块程序实现原理分 ...

  2. stm32捕获占空比_基于STM32超声波避障小车

    不管是对于初学者还是对于一个玩过单片机的电子爱好者来说,或多或少都接触到过小车项目,今天给大家介绍的的一个项目基于STM32超声波避障小车.这也是我曾经的一个课设,在此开源分享给大家,全文5000多字 ...

  3. 基于STM32的斯特林驱动小车论文

    基于STM32的斯特林驱动小车论文 [内容摘要]:根据"第九届上海市大学生工程训练综合能力竞赛"的规则和要求,设计了一种采用斯特林技术和自动控制技术,自主设计并制作一台可将液态乙醇 ...

  4. 基于STM32的智能巡检小车系统设计--选材篇

    基于STM32的智能巡检小车系统设计--选材篇 作者:车 邮箱:692604135@qq.com 学校:西安工程大学硕士研究生 方向:机器视觉.图像分割.深度学习 本人毕业设计题目是基于STM32的智 ...

  5. 基于模糊控制的自平衡小车的研究

    绪论 课题研究背景及意义: 随着人类文明的发展,传感器技术.计算机应用技术.机械学.微电子技术.通讯技术以及人工智能技术也得到了飞速的发展.进入21世纪后,在机器人学和机器人技术领域,自平衡小车已成为 ...

  6. stm32两轮平衡小车项目详解

    摘要 这个项目是在20年11月初开始的,当时的我很迷茫,本应该去实习的我在线上培训,觉得无聊,便有了自己一人做项目的想法.也没想到这个项目做了将近整整一个月,才差不多做了出来.也是准备做两个项目的,这 ...

  7. 【项目实战】基于STM32单片机的智能小车设计(有代码)

    [1]背景意义 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术.因此,基于嵌入式 ...

  8. 基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

    一.环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格:  采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP:  采用QT ...

  9. 基于STM32的物联网监控小车

    通过 STM32与红外循迹模块对小车自动控制,将小车与联网模块.定位模块连接,小车提供联网模块与云端连接,实现信息的上传,同时若有需要,也可以通过云端下发命令控制小车行进. 主控:STM32F103C ...

最新文章

  1. ie支持css3圆角实现的俩种方式
  2. 交互,真的没有你想象的那么重要
  3. 如何覆盖 SAP Spartacus 默认的 css style
  4. SAP CRM Fiori my task应用是如何在My Account应用里加载的
  5. c语言指针详解(概念示例)
  6. python 解析器的常用options
  7. pandownload用户未登录_Pandownload再度复活,下载速度飙升到10MB/s以上
  8. BZOJ 4710 [Jsoi2011]分特产 解题报告
  9. 改变网页标签图片(favicon)
  10. python 自动发邮件 Errno61 Connection refused
  11. Shiro系列-Authenticator和AuthenticationStrategy是什么
  12. 【转贴】没有div没有float没有clear没有hack的超强CSS布局
  13. Django restful Framework 之序列化与反序列化
  14. Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)
  15. Unity常见问题(二)数组索引越界
  16. <Zhuuu_ZZ>让我们来康康脚本流程控制
  17. 新零售到家O2O 和到店O2O的区别?
  18. 码云上开源JAVA项目收藏
  19. 正态分布在数据分析中的应用
  20. 面向大规模数据的云端管理,百度沧海存储产品解析

热门文章

  1. linux系统移植---内核移植(3)
  2. Linux多进程4种策略实现哲学家进餐问题
  3. 引起计算机故障的因素有哪些,电脑显卡原因引起的电脑故障的解决办法有哪些...
  4. 从SVN下载项目到本地如何转为web项目并运行
  5. 微信小程序常用CSS总结
  6. IRAF打开ds9显示图像dev$pix
  7. android 人脸识别踩坑实录
  8. 【Linux】ubuntu下移动文件
  9. Layui查看内置jquery版本
  10. Java项目:JSP高校教务排课管理系统