最近因为在忙毕设,专栏已经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. (报错解决)Exception encountered during context initialization

    转: (报错解决)Exception encountered during context initialization 关键词 JavaEE JavaWeb eclipse XML AspectJ ...

  2. HashMap之tableSizeFor方法图解

    目录 普通人的简单粗暴方式 示例代码 问题 大神的实现 移位的思想 全过程示意图 初始值 右移一位+或运算 右移二位+或运算 右移四位+或运算 右移八位+或运算 右移十六位+或运算 结果+1 初始容量 ...

  3. 使用jsoup十分钟内掌握爬虫技术

    对,就是十分钟,没有接触过爬虫的你,肯定一脸懵逼,感觉好高深的样子,一开始我也有点懵,但用了以后发现还是很简单的,java爬虫框架有很多,让我有种选择困难症,通过权衡比较还是感觉jsoup比较好用些, ...

  4. celery 与 flask 实现异步任务调度

    Flask 定了2中上下文,来实现机遇线程\协程的,wsgi服务的请求(request.session)和存储(g,current_app )过程,通过栈来完成不同线程和协程的上下文切换,在与cele ...

  5. editplus更改编码

    1.在Tools下拉后选择Configure User Tools 2.在左边导航菜单找到File,对应右边视图中的Default encoding 3.将编码更改为utf-8,点击底部的OK保存.

  6. menuStrip鼠标滑过自动弹出

    public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void 退出系统T ...

  7. Paint Chain HDU - 3980

    题目链接:https://vjudge.net/problem/HDU-3980 题意:由n个石头组成的环,每次只能取连续的M个,最后不能取得人输. 思路:这样就可以先把它变成链,然后在链上枚举取m个 ...

  8. IaaS, PaaS和SaaS的区别

    从小型企业到全球企业,云都是一个非常热门的话题,它是一个非常广泛的概念,涵盖了很多在线领域. 无论是应用程序还是基础架构部署,当您开始考虑将业务转移到云时,了解各种云服务的差异和优势比以往任何时候都更 ...

  9. Fork/Join 框架

    本文部分摘自<Java 并发编程的艺术> Fork/Join 框架概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是把一个大任务分割成若干个小任务,最终汇总 ...

  10. 回忆那些年我玩过的ide,看看哪些你也玩过,看图回忆

    闲来无聊,回忆一下这些年玩过的ide.看看哪些你也玩过. QBasic 第一个ide,兴奋程度也是最大的,从此进入了码农行列 VisualBasic 可以拖界面了,成就感爆棚 Turbo C c语言, ...