最近因为在忙毕设,专栏已经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. 【知识点】 gcc和g++的联系和区别

    目前(2020-09)GCC 编译器已经更新至 10.2版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ . 除此之外,当下的 GCC 编译器还支持编译 Go.O ...

  2. 《C++ Primer》笔记 第10章 泛型算法

    迭代器令算法不依赖于容器,但算法依赖于元素类型的操作. 算法永远不会执行容器的操作.算法永远不会改变底层容器的大小. accumulate定义在头文件numeric中,接受三个参数,前两个指出需要求和 ...

  3. python自动化测试生成HTML报告

    自动化测试结果执行完毕后,需要对测试结果进行查看,今天就来讲一讲如何生成HTML报告首先下载HTMLTestRunner.py文件,放在python安装目录的Lib文件夹下https://pan.ba ...

  4. vue3中的通过proxy实现双向数据绑定的原理

    1.什么是Proxy?它的作用是? 据阮一峰文章介绍:Proxy可以理解成,在目标对象之前架设一层 "拦截",当外界对该对象访问的时候,都必须经过这层拦截,而Proxy就充当了这种 ...

  5. 微信小程序自定义头部导航栏

    <!--index.wxml--> <view> <navbar id='index_header' background='{{background}}' pageNa ...

  6. 简历求职:STAR法则

    做了近2年的大学生就业辅导工作,也接触了很多即将走出校园的大学生,做个总结与大家分享,同时也是对自己的一个总结. 最近刚听说STAR法则,这也是一直我们给学生的指导思想,百度了一下: STAR法则,即 ...

  7. CSS水平布局

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  8. 使用 DD 命令制作 USB 启动盘

    Windows 下有很多很好用的 USB 启动盘制作工具,比如 Rufus,但是 MacOS 下这个类型的工具就少了很多,这里记录下在 MacOS 中用 DD 命令制作 Linux USB 启动盘的操 ...

  9. Java例题_20 前20项之和!

    1 /*20 [程序 20 求前 20 项之和] 2 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 3 程序分析:请抓住分子与分母的变 ...

  10. markdown快捷输入

    标题: 输入方式:#+空格+标题名,几级标题就敲几个# 注:最大支持六级标题 字体 加粗:在要加粗的字体前后加** 斜体:在要倾斜的字体前后加* 斜体加粗:在要倾斜并加粗的字体前后加*** 删除线:在 ...