最近因为在忙毕设,专栏已经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. python中lambda、yield、map、filter、reduce的使用

    1. 匿名函数lambda python中允许使用lambda关键字定义一个匿名函数.所谓的匿名函数就是说使用一次或者几次之后就不再需要的函数,属于"一次性"函数. #例1:求两数 ...

  2. 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  3. 剑指 Offer 53 - II. 0~n-1中缺失的数字 + 二分法

    剑指 Offer 53 - II. 0-n-1中缺失的数字 Offer_53 题目详情 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  4. 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...

  5. Excel_不打开文件进行跨工作簿查询

    在使用Excel时,我们经常会遇到这种问题,我的数据源在表1里面,但是我要在表2里面做报表,用lookup和offset等公式都需要打开表1操作,否则就会报错.那么有没有办法在不打开表1的情况下在表2 ...

  6. 部分rpm包总结描述

    acl-2.2.51-15.el7.x86_64 Commands for Manipulating POSIX(可移植操作系统接口 of unix) Access Control Lists.有ge ...

  7. 2019 GDUT Rating Contest I : Problem E. Convention

    题面: E. Convention Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  8. Flutter 改善套娃地狱问题(仿喜马拉雅PC页面举例)

    前言 这篇文章是我一直以来很想写的一篇文章,终于下定决心动笔了. 写Flutter的小伙伴可能都感受到了:掘金的一些热门的Flutter文章下,知乎的一些Flutter的话题下或者一些论坛里面,喷Fl ...

  9. python 序列与字典

    序列概念: 序列的成员有序排列,可以通过下标访问到一个或几个元素,就类似与c语言的数组. 序列的通用的操作: 1:索引 11 = [1,2,3,4] 11[0] = 1 2:切片 11[1,2,3,4 ...

  10. linux screen的用法

    今天使用vps时,起了一个http服务,因为需要用nc接收流量,就要关闭http服务,再去用nc接收流量就接收不到,请教了师傅,这里需要用到screen创建一个会话,就能http服务跟nc同时进行. ...