摘要

运动底盘是移动机器人的重要组成部分,不像激光雷达、IMU、麦克风、音响、摄像头这些通用部件可以直接买到,很难买到通用的底盘。一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的;另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开。出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习。说干就干,本章节主要内容:

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通信协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标



1.stm32主控硬件设计

完整的stm32主控硬件包括:带霍尔编码器的直流减速电机、电机驱动、stm32单片机开发板等配件。

1.1.带霍尔编码器的直流减速电机

(图1)带霍尔编码器的直流减速电机

要制作一台机器人底盘,需要一套完整的电机部件,就如图1中看到的一样,需要有轮胎、联轴器、减速箱、电机和编码器,具体选型可以参考这几个方面的因素:

轮胎:直径越大,小车的越障能力越好,但会降低小车爬坡的马力;

联轴器:选择跟轮胎与电机输出轴尺寸相匹配的型号;

减速箱:减速比决定电机输出轴的扭矩,减速比越大,输出轴扭矩越大,但输出轴转速越慢;

电机:一般是12V的电机,直流有刷简单易控制;

编码器:一般为增量式正交编码器,编码线数根据实际需要精度进行选择。

(图2)电机接线端口

如图2,可以清楚的看到电机的接线端口,其实电路板上也是有丝印标注的。接线分为两类,一类是电机控制(电机线+、电机线-),另一类是编码器(编码器5V、编码器A相、编码器B相、编码器GND)。

1.2.电机驱动电路

(图3)TB6612FNG电机驱动

了解了电机的构造知识后,就来介绍一下如何将电机驱动起来。如图3所示,TB6612FNG是很流行的一款电机驱动芯片,相比于传统的L298N效率上提升很多,而且体积大幅减小。TB6612FNG是双驱动,也就是可以驱动两个电机;TB6612FNG每通道输出最高1.2 A的连续驱动电流,启动峰值电流达2A/3.2 A(连续脉冲/单脉冲);4种电机控制模式:正转/反转/制动/停止;PWM支持频率高达100 kHz。

(图4)TB6612FNG引脚定义

TB6612FNG的引脚定义,如图4所示,引脚分为电源脚、控制输入脚、控制输出脚。

VM:为电机驱动电压,根据实际电机额定电压选择,推荐使用12V供电;

VCC:逻辑电源供电,推荐使用5V供电;

STBY:待机/工作状态切换,低电平待机,高电平工作;

PWMA:A端口电机PWM调速信号输入;

AIN1和AIN2:A电机转向控制信号输入;

PWMB:B端口电机PWM调速信号输入;

BIN1和BIN2:B电机转向控制信号输入;

AO1和AO2:A端口电机驱动信号输出;

BO1和BO2:B端口电机驱动信号输出。

(图5)TB6612FNG控制信号真值表

最后,我们来看一下控制信号的逻辑真值表,如图5,输入由单片机IO口给定,再结合PWM信号,便可以实现对电机的正/反转和调速控制了。由于两路电机控制是一模一样的,所以另一路控制信号的逻辑真值表就不重复赘述了。

1.3.霍尔正交编码器原理

(图6)霍尔正交编码器原理

如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相位相差90度,因此可以根据两个信号哪个先哪个后来判断方向。利用单片机的IO口对编码器的A、B相进行捕获,很容易得到电机的转速和转向。霍尔正交编码器原理,如图6。

1.4.stm32单片机最小系统

stm32单片机常用的型号是stm32f103,根据具体需求的Flash容量、RAM容量、IO口数量进行选择,下面是常用的一些型号参数对比,如图7。

(图7)stm32f103系列单片机参数对比

考虑到stm32主控只是用于两个电机的控制,资源开销不算大,需要用到的IO口也不是很多,定时器资源也不多,出于性价比考虑推荐stm32f103c8t6这个型号。

(图8)stm32f103f103c8t6最小系统板

如图8所示,stm32f103c8t6最小系统板比较简洁,控制两个电动机,只需要用两个IO口输出2路PWM分别给两个电机调速,用4个IO口分别控制两个电机的方向,另外4个IO口分别接两个电机的正交编码器输入,UART1与UART2跟上位机连接分别用于程序debug与上层指令控制。

1.5.stm32主控硬件整体框图

第一个版本的硬件电路是用飞线连接的各个模块,电路稳定性很差,而且外观极其丑陋。痛定思痛,决心老老实实设计电路板,把各模块集成到一个板子上,经过两次改板打样,终于成功了。如图9,板子简洁美观,而且接插端子布局合理,符合我一向严苛的标准。

(图9)stm32主控电路板

好了,有了这个电路板就好办多了。针对这个电路板,讲讲我的设计思路吧。首先需要设计一个电源系统,用于单片机供电、电机供电、外部设备供电,同时还要考虑电源反接、过压、短路等保护;然后需要设计一个stm32单片机最小系统电路;最后围绕stm32最小系统,需要设计电机驱动、UART转USB、编码器信号捕获这些外围电路,同时还要考虑电机堵转保护、电机对系统电源干扰等问题。逐一采坑之后,差不多就完成设计了。stm32主控硬件整体框图,如图10。

(图10)stm32主控硬件整体框图

后记

------SLAM+语音机器人DIY系列【目录】快速导览------

第1章:Linux基础

1.Linux简介

2.安装Linux发行版ubuntu系统

3.Linux命令行基础操作

第2章:ROS入门

1.ROS是什么

2.ROS系统整体架构

3.在ubuntu16.04中安装ROS kinetic

4.如何编写ROS的第一个程序hello_world

5.编写简单的消息发布器和订阅器

6.编写简单的service和client

7.理解tf的原理

8.理解roslaunch在大型项目中的作用

9.熟练使用rviz

10.在实际机器人上运行ROS高级功能预览

第3章:感知与大脑

1.ydlidar-x4激光雷达

2.带自校准九轴数据融合IMU惯性传感器

3.轮式里程计与运动控制

4.音响麦克风与摄像头

5.机器人大脑嵌入式主板性能对比

6.做一个能走路和对话的机器人

第4章:差分底盘设计

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通信协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标

第5章:树莓派3开发环境搭建

1.安装系统ubuntu_mate_16.04

2.安装ros-kinetic

3.装机后一些实用软件安装和系统设置

4.PC端与robot端ROS网络通信

5.Android手机端与robot端ROS网络通信

6.树莓派USB与tty串口号绑定

7.开机自启动ROS节点

第6章:SLAM建图与自主避障导航

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控

第7章:语音交互与自然语言处理

1.语音交互相关技术

2.机器人语音交互实现

3.自然语言处理云计算引擎

第8章:高阶拓展

1.miiboo机器人安卓手机APP开发

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章将持续更新,敬请关注-----------------

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

SLAM+语音机器人DIY系列:(四)差分底盘设计——1.stm32主控硬件设计的更多相关文章

  1. SLAM+语音机器人DIY系列:(四)差分底盘设计——6.底盘里程计标

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  2. SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  3. SLAM+语音机器人DIY系列:(四)差分底盘设计——3.底盘通信协议

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  4. SLAM+语音机器人DIY系列:(四)差分底盘设计——4.底盘ROS驱动开发

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  5. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  6. SLAM+语音机器人DIY系列:(二)ROS入门——1.ROS是什么

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  7. SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  8. SLAM+语音机器人DIY系列:(三)感知与大脑——5.机器人大脑嵌入式主板性能对比

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  9. SLAM+语音机器人DIY系列:(三)感知与大脑——6.做一个能走路和对话的机器人

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

随机推荐

  1. BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS

    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码 ...

  2. 重构:以Java POI 导出EXCEL为例2

    前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...

  3. 用PCA(主成分分析法)进行信号滤波

    用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...

  4. 查询APP Store已发布过的版本记录

    1.国内APP使用 酷传 搜索,即可查询到版本记录 2.国外的APP 无法通过国内软件进行搜索,可在App store中直接查询.步骤如下:

  5. python环境下实现OrangePi Zero寄存器访问及GPIO控制

    最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...

  6. 让你分分钟理解 JavaScript 闭包

    闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概 ...

  7. XDM-跨文档消息传送

    XDM cross-document messaging 类似于XSS的简称,故称为 XDM 而不是 CDM 某些时候 XDM 也能作为跨域的实现手段之一 与Jsonp 和 传统的 CORS 跨域方式 ...

  8. Mybatis:缓存,动态SQL,注解SQL以及动态标签使用

    1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 &a ...

  9. 微服务架构 - SpringBoot整合Jooq和Flyway

    在一次学习分布式跟踪系统zipkin中,发现了jooq这个组件,当时不知这个组件是干嘛的,后来抽空学习了一下,感觉这个组件还挺用的.它主要有以下作用: 通过DSL(Domain Specific La ...

  10. 粮草先行——Android折叠屏开发技术点(二)

    继该系列的第一篇和番外篇之后,今天我们来聊一聊多窗口开发的注意事项.实际上,与其说"多窗口开发",不如说让我们的APP适应多窗口模式. 可能有朋友会问,为什么要提到多窗口模式呢? ...