- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
硬件设计:
总体思路:
? ? 整个机架采用PCB板,将四个电机固定在PCB板的四个角,外接电池。?
硬件模块:
? ? 单片机、惯性测量模块(IMU)、无线通讯模块、电机驱动模块、续流二极管、电源管理模块(稳压与充放电)、直流有刷电机、大电流放电电池、遥控器。?
硬件选型:
模块名称 元件名称 数量 单片机 STM32F103CBT6 1 惯性测量模块(IMU) MPU6050(三轴加速度计+三轴陀螺仪) 1 无线通讯模块 NRF24L01 1 电机驱动模块 AO3400 5.8A 4 续流二极管 SS34 3A 4 电源管理模块 稳压 TPS79333 3.3V 1 充放电 TP4057 USB兼容5V充电 1 直流有刷电机 空心杯有刷直流电机7*16mm 4 大电流放电电池 250mAh 20C 1 遥控器 JOYPAD游戏手柄 1 ?
硬件工作综述:
? ? 单片机负责整个系统的协调工作;惯性测量模块(IMU)负责测量四旋翼的姿态;无线通讯模块负责四旋翼与遥控器的通讯;电机驱动模块负责驱动电机;续流二极管负责对电机进行续流;电源管理模块中的稳压模块负责整个系统的供电,电源管理模块中的充放电模块负责对电池充电;有刷电机负责提供四旋翼的飞行动力;大电流放电电池负责四旋翼的能量来源;遥控器负责对四旋翼进行遥控和控制。?
硬件设计功能模块图:
实际效果图与相关参数:
尺寸:对角电机轴距10x10cm
重量:33.2g(带电池)
?
软件设计:
总体思路:
? ? 惯性测量模块(IMU)测量出当前飞机的三轴加速度与三轴角速度并传送给单片机处理,由单片机进行基于四元数的姿态解算,求解出当前飞机的pitch、roll、yaw三个角度值,然后根据这三个角度经过PID控制运算,输出四路PWM控制四个直流有刷电机的加减速从而达到飞机的平衡悬停。
? ? 其中,惯性测量模块(IMU)的加速度计由于噪声比较大,所以需要对其进行滤波处理;而遥控器则是对飞机进行实时的姿态控制;最后由于四旋翼制作的特殊性,在调试PID参数阶段会频繁的烧写程序,鉴于此,笔者开发了基于NRF24L01的Bootloader技术,免除了烧写Flash的物理连线限制,可实现远程程序一键下载。?
姿态解算:
? ? 姿态解算属于四旋翼制作的核心部分,如果姿态解算能够实时的反应出飞机的状态,那么对于控制来讲就相对来说比较容易了。而姿态结算所要做的事情就是两个坐标系之间的正确转化(地理坐标系与载体坐标系),这种转化有很多种表示方法,例如欧拉角法、方向余弦矩阵法、四元数法、旋转矢量法等。笔者采用的是应用广泛的四元数法,而旋转矢量法则是一种基于四元数法的改进四元数法。
? ? 四元数本是用于描述四维空间向量的一种方法,对于他的线性变换也就是在四维空间中的拉伸和旋转,显而易见,我们用四元数的向量乘法来表示三维空间中的旋转是绰绰有余的。
? ? 通过惯性测量模块(IMU)传送过来的当前飞机的三轴加速度和三轴角速度的值,这样一个三维的向量,转化为四维向量,然后在四维空间中做线性变换(也可以说在三维空间中旋转)后输出,利用四元数与欧拉角的关系(一定要注意旋转顺序),将当前四元数转换为欧拉角pitch、roll、yaw即得到当前飞机的姿态。
以下给出笔者姿态融合的代码,该代码网上都有,笔者在这里做了些许注释,方便理解。
/*********************************************************************************
函数名:void IMUupdata(float gx, float gy, float gz, float ax, float ay, float az)
说明:IMU单元数据融合,更新姿态四元数
入口:float gx 陀螺仪x分量
float gy 陀螺仪y分量
float gz 陀螺仪z分量
float ax 加速度计x分量
float ay 加速度计y分量
float az 加速度计z分量
出口:无
备注:核心思想:利用陀螺仪来计算高速动态下的姿态,利用加速度计来进行角度修正
**********************************************************************************/
void IMUupdata(float gx, float gy, float gz, float ax, float ay, float az)
{
float recipNorm; //平方根的倒数
float halfvx, halfvy, halfvz; //在当前载体坐标系中,重
文档评论(0)