资讯详情

从零开始搭建ROS移动机器人系列之(三)底层控制硬件

上一期讲机器人的机械结构、外部传感器和ROS本期将讨论底部控制硬件部分的选择和设计。

芯片-toc" style="margin-left:40px;">单片机控制芯片

电机驱动模块-toc" style="margin-left:40px;">电机驱动模块

编码器-toc" style="margin-left:40px;">电机编码器

姿态传感器

电源处理模块


在这里,大家可能都知道,所谓ROS事实上,移动机器人主要包括两个核心部分,一个是,另一个是,也可以称为上下位机的关系。两部分的分工分别是:ROS负责收集外部传感器(雷达、摄像头)信号和部署SLAM、底层运动控制层负责收集内部传感器(编码器、陀螺仪)信号,部署运动控制算法,如导航避障、路径规划、机器视觉或语音识别

看电机驱动信号传输路线。

从图中可以看出,底层控制层起到承上启下的作用,其功能可概括为以下几点。

  • 通过PWM设置电机转速;

  • 接收编码器测量的速度信息;

  • 通过PID算法控制电机的实时转速;

  • 接收ROS层层发出的速度指令;

  • 向ROS层发送实时速度;

以上每一个都不是相互独立的,在实际情况下是这样的:机器人启动后静止,ROS发出的速度指令,之后,底层通过,电机的速度不是直接可以满足这个设置值的,所以在这中间,编码器要不停的,计算实际速度后,比较设置速度,然后使用,直到机器人速度达到设定值,控制才完成。然而,这个过程是不断进行的,因此整个机器人内部不断进行这个循环,以实现实时控制的目标。

以上内容将逐一讨论。

此外,由于ROS层需要了解机器人的航向角信息,因此需要在底层控制层添加姿态传感器,也就是说,在后续机器人导航、路径规划等算法中需要使用该数据。

现在我们来谈谈如何构建底层控制硬件。

回顾整个框架图的底部硬件部分。

看看我自己做的底控板。

这个控制板的底板是我自己画的,然后白嫖嘉立创免费打样(嘉立创一个月可以免费打样两次,板尺寸10cm*10cm以内)。

这个控制板基本上包括网络图中的几个部分,分别插在上面,还有编码器电机xh2.54连接口,这些是必须的部分,其余的DC插头、按键开关、电源指示灯、USB取电口是我自己加的,这样可以用电池给这个板子供电,然后从USB口取电给树莓派供电,不用再加一个电源给树莓派单独供电。这取决于个人选择,可以随意发挥。

每个模块分别讨论。

01

单片机控制芯片

控制芯片部分我用了一个,板载一个CH340串口芯片,支持一键下载,方便后期烧写程序,然后这个板上还有一个EEPROM芯片,但我们不能在这里使用这个芯片。事实上,它只需要一个单片机的最小系统,然后使用针IO引出所有的嘴。单片机与其他模块的连接可通过排针排母实现。

这里使用的控制芯片实际上是单片机。如何选择单片机的型号主要取决于您设计的机器人的功能以及您需要使用的外设(串口、中断、定时器、AD/DA等等),需要使用多少外设,明确这些可以做出有针对性的选择。

以此为例机器人有以下部分:

  • 两个编码器电机,所以必须有两条路PWM信号(定时器生成) 两个电机正反转逻辑信号(4个普通电机)IO口);

  • 两个编码器测速(编码器分割)AB两相,则需要四路编码器测速,定时器生成测速信号);

  • 一个MPU6050姿态传感器必须一路模拟IIC(两个普通IO口),一路中断外部;

因为stm32单片机的定时器通常可以同时在不同的引脚上输出多个信号,如高级定时器TIM同时生成两条路PWM信号分别给左右电机,使用通用定时器TIM2生成两个编码器测速信号,接收左电机的编码器,另一个通用定时器TIM4生成两个编码器测速信号,接收右电机的编码器。在这种情况下,我们实际上可以用三个定时器完成电机pwm调速和编码器测速。然后,通过调速和测速,可以实现速度PID控制了。可参考定时器的具体使用方法STM芯片手册和使用手册。

另外,如果你想自己设计一个全轮结构,你需要四个电机,然后把上面列出的外设翻倍。如果是阿克曼结构,在上面列出的上面加一个舵机。IO嘴,但姿态传感器MPU6050不需要翻倍,因为无论你的机器人结构如何,你只需要一个姿态传感器。

单片机的选择大概就是这些内容。

02

电机驱动模块

由于单片机引脚不能直接驱动电机,因此需要电机驱动芯片,这里选择,可驱动两路直流电机。

(忽略这个比较突兀的电解电容,这个模块买来的时候本来这个位置是一个贴片的钽电容,我接了一个12V之后,钽电容器可能会因为电压不稳定而爆炸,然后我自己焊接了一个普通的电解电容器。

模块原理图如下。

  • VM是驱动电机的电源,连接12V;

  • VCC是电机控制逻辑的电源,连接5V;

  • PWMA和PWMB两路电机PWM信号接收口、接单片机pwm信号输出口;

  • AIN1、AIN2、BIN1、BIN二是电机控制逻辑接收口,接单片机电机控制逻辑输出口;

  • AO1、AO2、BO1、BO2是接收电机的电机的控制逻辑输出口 -两相;

  • STBY是整个电机驱动芯片的使能口,高电平使能,连接5V或3.3V;

这些基本上是电机驱动模块。

03

电机编码器

看看编码器直流电机的图片。

接线端子的左右两个是,分别接收电机驱动模块AO1、AO2和BO1、BO2.然后左右的第二根就是,接到VCC5V和GND可以;最里面的两个是接收单片机编码器测速信号接收口。

p>04

姿态传感器

姿态传感器选用MPU6050模块。

MPU6050集成了三轴陀螺仪和三轴加速度传感器,还可以外接一个三轴磁力计。陀螺仪实际上就是测量整机沿XYZ三轴的转动的角度,即俯仰角、侧倾角和航向角。我们这里实际上只用到了航向角。

关于MPU6050模块,实际上没有很多可以说了,因为芯片内部比较复杂,也没有必要搞清楚它的实际原理,会用即可。我们这里只关心他怎么接到单片机上。

看一下这个模块的引出脚分别是什么。

  • VCC是电源引脚,接5V;

  • SCL和SDA是IIC的时钟线和数据线,这里用单片机的普通IO生成模拟IIC信号,所以接单片机的普通IO口;

  • XDA和XCL是此模块外接三轴磁力计的IIC的数据和时钟线,这里空置,不接;

  • AD0脚控制此模块的IIC的地址,IIC设备有一个地址,这个引脚用一个下拉电阻接到地,即为低电平0,后续写IIC驱动的时候就把地址的这一位配置成0即可;

  • INT是此模块的一个生成外部中断的引脚,接到单片机的可以接收外部中断的引脚上即可,通过定期产生外部中断保证机器正常工作;

05

电源处理模块

先看一下整个系统用到几种电压,电机驱动VM需要12V,MPU6050、电机编码器、电机驱动模块的逻辑端和STBY口等需要5V,单片机需要3.3V,由于单片机系统板上已经有5V转3.3V的部分了,所以我们只需要另外加一个,把12V电源转换为5V,就可以满足电源要求了。

这个模块比较简单,就四个口,上面两个口是输入12V的正负,下面两个口是输出5V的正负。只需要把输入12V的正负接到电池的正负即可,然后就可以从输出5V的正负引到各个模块了。

12V转5V的模块网上很多,随便选一个即可。

以上,基本上就把必备的模块介绍完了。然后,就是把这几个模块按照上面所说的连接方式连接起来。

总体的接线方式就是这样。

实际上,具体怎么分配单片机的外设与各个模块的引脚,可以根据单片机的手册,对照每一个外设的引脚配置即可。这里就点到为止。

我这里画了一个底板,底板上焊上排母,然后把各个模块直接插进排母就好了。

底板大概就是这样。

焊完插接件大概是这样。

然后把各个模块都插上,就是上面一开始那样了。

到这里,差不多就把这个单片机控制板的硬件部分给搭建起来了。这部分实际上是比较关键的部分,内容有点杂乱,可能说得不是特别清楚。如果读者哪部分看得不是很明白,可以加我微信(ljk_1212)私下探讨。

今天先写到这里。后续就写写单片机控制的软件部分吧。

标签: 483ai贴片电阻脚侧插usb连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台