最近因为在忙毕设,专栏已经1个多月没更,对于托更我很抱歉。不过这几周真的没什么时间,Rick&Morty的最新集我到现在都还没看哈哈。
 
 
现在毕设已经搞得差不多了,水专栏文章的快乐生活就要开始了。这篇主要讲设计SLAM小车的控制板相关,偏硬件单片机和电气设计,不感兴趣的同学可以自行略过。
因为我的SLAM小车底盘需要有6路电机控制和旋转编码器反馈,以及电机驱动功能,TX2上的IO口和PWM等外设是不够用的,所以决定自己设计一个集电机驱动和控制的PCB,这样更方便、专业一点,具体功能如下图(从我中期答辩的PPT里取得一张)所示:
MCU选取
 
选用了ST的Stm32f103vet6,功能列表如下,使用引脚可能与实际有些偏差,后期做了一些修改。用F1就够了,F4就不需要了。
 
通讯接口
  • CAN BUS
  • RS485/TTL
  • HC05蓝牙串口
CAN收发器用的TJA1040,RS485收发使用MAX485,我也不知道为什么会用RS485和串口这种东西,用CAN不香吗?也许是我手痒痒吧,榨干stm32的每一个引脚,几十块钱的芯片不能浪费资源啊。原理图如下:
为了更好的用上RS485,我还专门在TX2 git了一个Modbus源码,要不是为了你那点差模信号的稳定性,还不如直接用TTL,至少人家还是全双工。
 
电源设计
 
线性电源AMS1117-3.3/5V各一个;XL4015调压模块3个,每个供电一个L298N,对应两个电机,至于为什么有了L298N还要用XL4015,主要是为了硬件调电压更安全一点,控制得也更细腻一点,可以适配不同额定电压的电机。设计PCB时注意单点接地,低压的地方铺上铜箔,驱动的地方又有电感又有MOS高速开关闭合就别放了。说实话我把驱动和控制部放在一起还是有点风险的,下面这句可以不看纯吐槽->去年搞大学生方程式电机控制器的时候那个电磁干扰简直让我怀疑人生,真的怀疑AMK你真的过了EMC吗?真的给我留下了巨大的心理阴影。
还有就是pcb上加上保险丝,防止电机堵转烧坏电机。
原理图就不放了,按照datasheet上的来设计,注意感性负载的续流问题,电容容值等等。L298N得买好散热片。说到这里一把泪,本来我是不用设计这个底盘的,直接用实验室现成的底盘多好,电机控制器也是商业的,弄到现在好像在设计玩具车一样。
至于TX2的19V供电电源,我是用的一款24转19V铝壳非隔离电源,无负载的情况下拿万用表测试了一下输出18.9V,还行用了这么久也没什么问题。不过有条件还是买好的,毕竟另一边连的可是几千的TX2啊。
整车供电,淘了一块20000mAh的锂电池,同时输出24V,12V,5V USB;分别用于TX2,单片机,炒鸡大的显示屏供电,感觉这就是淘宝卖家为我量身定制的,充满电可以一直用3/4个小时,这就比较nice。
 
电机选型
 
选的传动比1:34的直流带光电码盘电机,旋转编码器分辨率360,传到电机输出轴就乘一个34的传动比,实验了一下,效果还行,比较nice,记得使用stm32的硬件编码器模式捕获传感器的A/B相,没必要自己写输入捕获。电机额定电压12V。至于转速就不是问题,你这个SLAM小车还能跑的多快,你稍跑快一点SLAM就报“Tracking Lost”了。
 
电机控制
 
没什么好说的,没有梦想的人生就是咸鱼,没有闭环的电机就是玩具马达。
增量式PID一顿搞,P调的有点大(为了降低稳态误差),底盘起步时超调比较大。这可不行,程序一开始运行,你一个“弹射起步”我SLAM立马跟丢,最后为了求稳加了一个cmd_vel队列,取个平均值,美其名曰targetSpeedSmooth,那点延时牺牲就牺牲了呗,像我这样的菜鸡做不到高速SLAM那就只能求稳。
 
蓝牙调试
 
调试挺方便的,Android上有一个叫蓝牙串口的App,很不错,感谢原作者。
其它
小细节就不讲了,我们下篇见。欢迎下方留言讨论。
 
 
 

硬件篇-03-SLAM移动底盘电气设计的更多相关文章

  1. 硬件篇-04-SLAM移动底盘机械设计

    这篇比较水,发出来主要是为了呼应专栏主题,既然是实现,那各个方面都得讲一下不是.   底盘SW模型   淘的,主要是看上了它有弹簧阻尼器,适合野外,抗震,但是这种底盘结构转向起来比较吃力.是再有个全轮 ...

  2. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  3. GSM Sniffing入门之硬件篇

    3个月前,听朋友介绍得知OsmocomBB项目.此前一直以为GSM Sniffing需要价格昂贵的专用设备,但osmocomBB的上手成本:一个25元左右的手机,外加一根USB转TTL的串口线,着实让 ...

  4. 智能家居-2.基于esp8266的语音控制系统(硬件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

  5. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  6. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇03:子弹发射》

    3.子弹发射 子弹发射概述: 在打飞机游戏中,子弹是自动发射的.子弹与子弹之间间隔一定的时间,玩家通过上下左右控制游戏角色,来达到躲避敌人及击中敌人的操作. 发射原理: 抽象理解为有两个容器存放子弹, ...

  7. LPC1768的usb使用--硬件篇

    LPC1768芯片带有USB设备控制器,前面写的文章都是在说比较简单的设备驱动,今天来说复杂一点的 首先是硬件层的配置 #ifndef __USBHW_H__ #define __USBHW_H__ ...

  8. 用js来实现那些数据结构(数组篇03)

    终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式.那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀疑数组在JS中的重要性与实用性.这篇文章分为 ...

  9. SQL SERVER 2012 AlwaysOn - 维护篇 03

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

随机推荐

  1. 女朋友看了会生气的回答 URI和URL有什么区别?

    URL是什么 URL 代表着是统一资源定位符(Uniform Resource Locator).作用是为了告诉使用者 某个资源在 Web 上的地址.这个资源可以是一个 HTML 页面,一个 CSS ...

  2. Zeebe服务学习3-Raft算法与集群部署

    1.背景Zeebe集群里面保证分布式一致性问题,是通过Raft实现的,其实这个算法用途比较广泛,比如Consul网关,也是通过Raft算法来实现分布式一致性的. 首先简单介绍一下Raft: 在学术界, ...

  3. SQL学习笔记——创建数据库显示:文件激活错误,物理文件名不存在>>解决方案

    今天在创建数据库时,跟着老师一步一步的操作创建成功,但出于在厌恶冗长的数据库存储路径,于是,擅自更改了数据filename,让他保存在电脑桌面新建的文件夹,可是一执行就报错了. 老师源码: 1 cre ...

  4. MySQL基础知识:启动管理和账号管理

    整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...

  5. Centos7网络配置——设置固定ip

    有段时间没有用虚拟机了,这几天翻出了以前的虚拟机,写几个demo,但遇到了一个让人难受的问题.使用xshell远程连接虚拟机,命令还没敲几个,不到一分钟就自动断开了,只能重新再次连接.啥事都干不成,有 ...

  6. AtCoder Beginner Contest 190

    A Very Very Primitive Game int main() { int a, b, c; cin >> a >> b >> c; if(c == 0 ...

  7. 「UOJ 514」通用测评号(生成函数)

    首先,题目中的过程可以看作:每次选择任意一个燃料仓,给它装填 \(1\) 单位的燃料,如果此时恰好 "填满" 了它,就给答案 \(+1\). 考虑 \(n\) 号燃料仓填满的概率, ...

  8. 2017算法期末复习练习赛-G Beihang Couple Pairing Comunity 2017 题解(网络流)

    理解不够透彻.好题不可浪费,写题解以增进理解.会陆续补充题目.(咕咕咕) G Beihang Couple Pairing Comunity 2017 题目链接 Beihang Couple Pair ...

  9. Python字典与集合

    一 字典创建.访问.添加.删除.修改.内建函数.内建方法 创建,列表不能作为键,因为键不能变?字典也不能作为键 dict1 = {} dict2 = {'name':'qq','sex':'male' ...

  10. python matrix转list

    a = [[1,2],[3,4]] a = np.mat(a) print(a.getA().tolist())