赞
踩
从现在开始我们要接触一个完整的工程,所以我们要对整个工程进行分析,将硬件设计、软件设计模块化,一个模块一个模块的完成,最后将各个模块融合在一起,就是我们整个工程。模块化设计是现在代码开发非常重要的思想,上一篇我已经完成了距离检测和报警模块,后续将补充遥控、陀螺仪、上位机、低通滤波、PID等代码设计,因为这些代码我已经在stm32基础篇中逐个完成,现在我要做的是将之前的各个代码进行整理合并,再加入PID对程序整体控制,即可完成四旋翼的设计。
因为stm32是单线程cpu,所以我准备将程序设计为四个频率的循环,1000Hz、500Hz、250Hz,5Hz四个大程序。看图
程序中控制程序执行的相当于是程序心脏,心脏使用TIM7(简单定时器)设置计数溢出中断即可,1ms一次中断,算是查询的一种。
底层驱动不再赘述
先看1000Hz、500Hz、250Hz的设计
首先陀螺仪的数据至关重要,所以不管陀螺仪数据是否被使用,前提是陀螺仪数据都需要最近一次的飞行姿态,所以陀螺仪数据频率最高。
只有有了陀螺仪数据,PID算法才能正常执行,所以PID算法要稍晚于陀螺仪数据,PID内环程序包括了将PWM信号写入电机,所以要高于外环程序。
继续看5Hz程序。
按惯常思维,遥控器数据和测距报警应该是越快越好,但是这里由于硬件原理的限制,设置为5Hz,(1)测距模块使用的是超声波,超声波测距原理周期最少需要70ms,所以为了保证数据正确性,只能设置低赫兹。(2)遥控器数据接收,这个数据是非常重要的,但是由于我设定的是使用PPM信号,PPM信号周期为20ms,所以为了确保数据有效,设置为5Hz,后期也可以根据需要提高PPM的数据处理频率。测距模块可以升级为激光测距,也可以提高。
但是因为是第一次设计,所以按照现有的来,后续慢慢升级。
通过分析,看样子无人机设计也很简单,其实不然,只是总结的比较简单,内部有很多需要我们潜心研究的地方,比如,超声波测距有两种方法:(1)IO口的高低电平变化计时,(2)通过定时器的输入捕获功能。所以在程序模块化设计的时候有很多方法,有麻烦的也有简单的,麻烦的数据更加精确,简单的逻辑更加清晰,这些都是程序设计时候会碰到的问题,需要我们自己选择,当然程序设计技术高低也反应的产品的价值。一起加油啊
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。