STM32实现水下四旋翼(二)硬件清单与软件设计

目录

  • 一. 引言
  • 二. UCOS-III操作系统简介
  • 三. 设计水下四旋翼的多任务系统
  • 四. 硬件电路设计

一. 引言

上一篇我们写了四旋翼的飞行原理,这一篇我们继续做准备工作,主要是讲解一下操作系统,我们的代码是基于操作系统实现的。为什么要用操作系统呢?你的电脑可以同时运行多个程序,得益于操作系统的运转。对于单片机来说是一样的,使用操作系统的单片机可以同时运行多个程序。你能忍受你的电脑同时只能运行Word或浏览器或其他什么东东的单个程序吗?显然不能,那么为什么你可以忍受单片机只有一个main函数呢?因为在此之前你的功能单一简单,或者是你不知道还有操作系统这个东西。如果你一直都让你心爱的板子裸奔的话,从今天开始希望你能给它装备上强大的武器——嵌入式操作系统,它可以最大限度的发挥CPU的性能,实现多任务运行,在实时性要求高的场合它是最为适用的

如果之前没有操作系统基础的童鞋不要气馁,操作系统很难,但是你不需要纠结于难的部分,只把它当成一个工具就行了。就像你用电脑,你需要明白Win10系统内部怎么运行么?你需要自己去实现win10系统么?答案是不需要,会用就行了!手里边有STM32的板子的建议去学一下原子哥的FreeRTOS或UCOS-III操作系统的教程,边学边练。实在不会也没关系,后面的文章我会淡化操作系统,它只是一个框架,我们更关注的是核心代码部分。

二. UCOS-III操作系统简介

嵌入式操作系统有很多,常用的有FreeRTOS和UCOS-II、UCOS-III操作系统。笔者不做过多研究与讲解,只简单介绍它的使用。使用操作系统首先一件事是移植操作系统,移植的过程会稍微麻烦,不同的板子会不一样。本项目使用的自主开发的基于STM32F767IGT芯片的主控器,笔者直接使用了正点原子的阿波罗开发板移植好的工程模板,可以点击下载。

操作系统的知识点很多,我们重点需要理解任务的创建、挂起、删除,任务调度,任务优先级,时间片轮转调度等内容。在我的代码里面没有使用信号量与消息传递机制,使用的都是全局变量,实际上很不规范也不安全,这种设计方法不推荐使用。以笔者的体会,STM32的操作系统不好用,技术要求很高。使用嵌入式操作系统只是一个过渡,笔者后期将会将主要算法集中于树莓派、英伟达等高性能Linux主板上,将STM32作为驱动板。这种上下层控制器的好处是用户只需专注于应用与算法,不需要耗费过多精力于底层实现,当然硬件成本也会高出许多。

三. 设计水下四旋翼的多任务系统

下面我们设计水下四旋翼的多任务系统。四旋翼是一个典型的完整的机器人架构,包含了实现一个机器人所需的全部核心要素,从通信、传感、控制、电源到硬件电路、机械等,如果你从头到尾搭建起了一个四旋翼(包括自己写代码与调试),你将能够胜任一般的机器人设计应用场合了。

这里我们创建5个任务,开始任务(StartTask),通信任务(RadioLinkTask),传感任务(SensorTask),姿态控制任务(StabilizationTask),数据传输任务(TransmissionTask)。系统的层次如图所示,如我之前说的,操作系统只是一个工具,我们的核心是在应用层——应用程序。操作系统能够向下最大程度的发挥CPU的功能,向上最高效最稳定的实现用户的应用程序。开始任务负责创建其他所有任务,完事之后将自己挂起(就是自己不再起作用了)。通信任务(RadioLinkTask)负责与遥控器通讯,解析遥控器的数据、按照指令动作。传感任务(SensorTask)负责解析所有传感器的数据,包括原始数据读取、滤波、融合。姿态控制任务(StabilizationTask)负责三轴姿态角与高度环的PID计算,输出控制量并进行电机控制。数据传输任务(TransmissionTask)包括上传和下传——上传四旋翼的所有当前状态(姿态、油门、电量等信息),同时解析地面站下传的数据进行相应动作或调整参数。
STM32实现水下四旋翼(二)硬件清单与软件设计_第1张图片
整个工程的代码量较大,文件较多,他们的关系我大致表示如下:
STM32实现水下四旋翼(二)硬件清单与软件设计_第2张图片

四. 硬件电路设计

其实这一节应该放在上面,先设计硬件再设计软件,不过无所谓啦。硬件电路的介绍主要是列出使用的器件和使用的STM32的板载资源。如下表所示是使用的硬件清单。

STM32实现水下四旋翼(二)硬件清单与软件设计_第3张图片
这里面5个电机是不一定的。其中四个垂直电机是作为四旋翼,提供垂直动力并调整姿态,前面我们讲了四旋翼的飞行原理,四旋翼依靠俯仰运动或滚转运动,可以提供前后向或左右向的水平分力从而实现前后运动或左右运动,那么对于水下四旋翼是不是也是这样的呢,答案是否定的!!! 因为水下的阻力非常大,四旋翼一般只有30度左右的角度变化范围,提供的水平分力非常有限,你会发现水下四旋翼想要实现水平运动非常困难。笔者自己做过实验,它在原地俯仰、滚转,就是不动,晕!!所以,需要设置一个水平电机,当然可以是两个、三个、四个,都行。水下的四旋翼不像空中要严格控制重量,因为你只需要设计机器人的自重与浮力抵消就行了,这样你可以用很大的电池,笔者自己就用了一个10000MAH的大电池,续航非常持久。

这里面机架部分请自行设计,简单起见可以去淘宝买机器人专用的密封舱,然后自己设计机架,不然密封会很难做
继电器的作用是为了安全起见,因为四旋翼的电流较大,普通的开关承受不了那么大的电流
多芯水密连接器是为了充电用,这样不充电的时候拧上母堵头密封,充电的时候拧下母堵头插上对插线就可以充电。 水密连接器长这个样子:

STM32实现水下四旋翼(二)硬件清单与软件设计_第4张图片

硬件连接示意图如图所示。
STM32实现水下四旋翼(二)硬件清单与软件设计_第5张图片
如果你不是做水下四旋翼只想做空中的四旋翼,上面的硬件框架与软件框架你一样可以用的。只不过不需要考虑防水、密封等,反而简单多了。

从下一章开始我们开始写代码,依次实现遥控器通信、传感器数据融合、姿态控制、数据传输等功能。都看到这里了,点个赞再走呗!

你可能感兴趣的:(嵌入式,STM32,嵌入式,stm32)