最近因为在忙毕设,专栏已经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. go 报错 import cycle not allowed

    运行时报错,import cycle not allowed : 查了goole大概知道了原因,还是导包类的问题,我检察了一下我的代码库,发现我昨天划分几个工具文件,里面的两个文件相互引用,就导致报i ...

  2. 如果要是把标记为2的那一行Lable1.Text改为其他的Lable显示执行代码

    转: 如果要是把标记为2的那一行Lable1.Text改为其他的Lable显示执行代码 如图,程序很简单,文件路径也没问题,为什么会报错,百思不得其解?[url]https://book.douban ...

  3. pytorch(02)tensor的概念以及创建

    二.张量的简介与创建 2.1张量的概念 张量的概念:Tensor 张量是一个多维数组,它是标量.向量.矩阵的高维拓展 Tensor与Variable Variable是torch.autograd(t ...

  4. DES加密--不安全加密

    package test; import java.security.InvalidKeyException; import java.security.Key; import java.securi ...

  5. 在用free()函数释放指针内存时为何要将其指针置空

    在通过free()函数释放指针内存之后讲其指针置空,这样可以避免后面的程序对与该指针非法性的判断所造成的程序崩溃问题.释放空间,指针的值并没有改变,无法直接通过指针自身来进行判断空间是否已经被释放,将 ...

  6. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

    前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...

  7. 在docker容器中使用cplex-python37

    技术背景 线性规划是常见的问题求解形式,可以直接跟实际问题进行对接,包括目标函数的建模和各种约束条件的限制等,最后对参数进行各种变更,以找到满足约束条件情况下可以达到的最优解.Cplex是一个由IBM ...

  8. java例题_03 水仙花数

    1 /*3 [程序 3 水仙花数] 2 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 3 例如:153 是一个 ...

  9. OAuth2.0授权码模式实战

    OAuth2.0是目前比较流行的一种开源授权协议,可以用来授权第三方应用,允许在不将用户名和密码提供给第三方应用的情况下获取一定的用户资源,目前很多网站或APP基于微信或QQ的第三方登录方式都是基于O ...

  10. UnboundLocalError: local variable 'foo' referenced before assignment Python常见错误

    在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在) 在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的, 使用规则:如果在函数中定义了任何东西,如果它只是在函数中使用 ...