1. PH47运动控制代码框架

1.1. 概述
PH47运动控制代码框架是一套以小型无人机控制为典型应用,基于FreeRtos实时操作系统,为二次开发应用而特别优化的代码框架。用户在该框架下可方便的开发各种针对但不局限于无人机领域的复杂应用,如无人车或船、地面控制站、数据采集、伺服控制、AHRS、地面模拟仿真系统等应用领域。
PH47框架在总体架构上采用了分层模块化、可裁剪、可替换的设计思想,由底层向上分别为驱动层、框架层、算法层和应用层。中高级用户对各层级的各主要功能模块,均可进行替换或裁减,或加入新的功能模块。从而能够方便的进行硬件种类拓展、软件算法扩展或验证评估,代码移植等工作。PH47框架的突出特点在于:

1.1.1. 二次开发界面友好,门槛较低
PH47代码框架以数据总线机制在各个功能模块建立起数据交换通道;以遥测通讯、机载控制参数、航点管理等机制为飞控导航功能的逻辑算法实现提供了基础的功能性保障;以可替换,可裁剪模块化方式实现姿态控制器、高度速度控制器等一系列飞控导航所必须的功能模块。并在设计实现中充分贯彻分层化,模块化设计思想。尽量将架构中的二次开发接口做到最简。

二次开发用户只需要具备基本的C/C++及单片机开发知识即可进行初中级水平的开发。同时,逻辑分层设计也为用户二次开发预置了简洁而又功能齐备的框架结构。

代码框架中设计了一个功能示例类CController_Demo,仅仅使用了包含大量注释在内的约300行代码即展示了18种框架核心特性的基本使用方法。中高级用户大致了解该类后即可迅速上手。

1.1.2. 飞控及其相关系统全栈服务于二次开发
PH47代码框架提供给用户的不仅仅是一套面向二次开发的飞控软件代码体系,还包括了与之对应的飞控硬件设计。目前BBP飞控板硬件架构方式的突出之处就在于模块化和高度的灵活性:mcu、传感器、存储、对外接口均可自由配置,且得到了软件框架的充分支持。不仅如此,配套地面控制站Control Station Studio(CSS)本身就是一套控制站开发套件,用户可利用其开发出高度定制化的地面控制站系统。

1.1.3. 飞行控制层面功能完备、框架自身调试手段丰富
PH47代码框架自身就是一个具备完善飞控功能的软件体系。设计并实现了完善的线程运行调度、数据传输与使用体系、控制参数及航点存储传输机制、飞行数据记录、空地,空空遥测通讯系统、紧急状态处理、多飞控板协作等功能;以及姿态测量算法、位置控制算法和各种飞行、导航、状态控制器等等诸多功能特性。从而为二次开发用户开发提供了强大的功能保障。
同时,代码框架也提供了ASSERT、TRACE、调试串口、全局错误及警告记录传输机制,调试数据总线及数据帧、高分辨率机载数据记录等多样化的调试手段及方法,确保高效率开展二次开发工作。

1.1.4. 配套体系完善
与PH47代码框架同步开发的还有BBP、BBP Min、Single Pilot、PH7系列飞控板;地面站软件开发平台Control Station Studio;固定翼飞行平台Cross;260多轴实验平台。由于是同步开发,故上述产品与PH47代码框架能够高度融合,具备很好的产品适配性能。同时也为用户二次开发提供了全套完整的二次开发方案。

1.1.5. 完善的固件版本
目前PH47代码框架共提供BBP_Fixwing、BBP_Copter、BBDB三个固件版本,分别用于固定翼飞行器飞行控制、多轴飞行器飞行控制,以及多传感器运动控制系统。用户可根据自身需求,选择合适的固件版本进行二次开发或直接使用。

1.2. PH47代码框架配套进行二次开发的产品
1.2.1. 控制站软件开发平台Control Station Studio(CSS)
CSS(Control Station Studio)是一个地面控制站软件开发平台,其能够以设计搭建控制站工程方式,开发面向各种不同用途,具备不同功能特性的地面控制站。CSS具备以下三点突出特性:
 用户的全部显示及操作界面、内部数据组织构成、数据通讯协议、运行控制逻辑均可快速定制及搭建。
 CSS具备插件扩展机制,并提供插件工程源代码,用户能够根据自身需求对CSS功能进行任意扩展。
 使用CSS搭建的控制站之间可进行任意拓扑结构的组网及协同工作。同时提供SDK可实现CSS与其他应用程序间通讯组网。

控制站开发软件 Control Station Studio
1.2.2. 飞控板(BBP,PH7,SinglePilot等)
适用于PH47控制代码框架的飞控板目前有3款,分别为基于Stm32F429、Stm32H743并采用AD工业级IMU的SinglePilot及PH7。以及目前基于Stm32F411 ,并迭代到V2版本的BBP飞控板。上述控制板除可用于小型固定翼或多旋翼无人机飞行控制外,还可应用于其他无人控制对象的运动控制上。

目前,BBP v2飞控板以极其低廉的制造时间及经济成本,硬件架构灵活多变、可扩展性强等突出特点,已成为我们当前开发使用的主力控制板。同时,基于BBP v2电路设计还开发了紧凑型成品化飞控板BBP mini。接下来,还将发布把PH47代码框架移植到基于Stm32H743,具有更高硬件参数及极强硬件资源的新飞控板X。
基于Stm32H743的PH7飞控板
1.2.3. 全复合材料小型固定翼飞行平台Cross
Cross固定翼平台主要面向科研实验领域以及军事背景应用。设计起飞重量1.5至3kg,翼展1.6米,续航时间不小于40分钟,以凯夫拉、碳纤维及聚丙烯泡沫作为主要结构材料。在同级别平台中具有较高飞行气动性能,充足的舱室空间、牢固的机体结构、便捷的维护维修性能,以及便捷的携行及展开特性。与此同时还具有制造成本低廉的优势。

在这里插入图片描述
在这里插入图片描述

1.2.4. 多旋翼飞控实验测试平台
260多轴平台主要用于多轴飞控研发测试,以及需要使用多轴平台作为飞行试验载体进行软硬件研发的小型系统。具有安全性高、坚固不易损坏、使用维护方便的特点。

1.3. PH47代码框架适于面向的应用领域
 面向用户特定需求的小型固定翼飞行器飞行控制系统
 面向用户特定需求的小型多旋翼飞行器飞行控制系统
 多机任务协同或组网系统
 其他无人控制运动平台(车,船)的控制系统
 无人控制运动目标的控制站,或多功能遥控器
 无人值守数据采集与探测装置
 运动控制或运动数据采集装置(如三轴稳定平台,多自由度仿真测试平台,螺旋桨动态推力测定装置等)

1.4. PH47代码框架层级结构
PH47代码框架采用FreeRTOS作为实时操作系统,以Stm32CubeMx生成代码作为底层硬件基础,在其之上建立分层并模块化体系,自下而上分为4个逻辑层:
 驱动层(driver)
 框架层(Frame)
 算法层(Algorithms)
 应用层(Application)
PH47代码框架的分层及模块化结构使得PH47代码框架具备可修改、可移植、可替换特性,从而能够方便的在ST单片机系统间移植,同时也适用于其他型号的单片机系统。

1.5. PH47代码框架二次开发等级
 初级二次开发:在现有PH47代码框架及数据基础上进行二次开发,用户主要在应用层实施开发并建立体系。开发过程中可能可对已有数据总线、参数系统进行扩充。
 中级二次开发:基于以上基础,开发过程中涉及到对硬件外设模块(传感器、存储设备等),以及软件功能模块(如姿态解算模块,姿态控制器、位置控制器等)的增加扩充,或对已有模块进行替换。
 高级二次开发:基于以上基础,令PH47代码框架移植适配于新的控制板硬件架构,或对PH47代码框架进行扩充升级。

1.6. PH47代码框架对二次开发者的技术能力要求
 具备初步的stm32单片机程序设计,开发,调试,以及使用相关开发软件的能力,或是对Arduino体系有初步了解,希望进或正在学习stm32单片机软件设计的开发者。
 嵌入式单片机硬件系统组成有初步了解。
 对无人机飞控系统的软件、硬件构成有初步了解。

在STM32微控制器上控制PH传感器通常涉及到I2C通信或模拟输入读取。这里提供一个基本框架代码结构,包括C文件(.c)和头文件(.h),假设您正在使用HAL库: **PHSensor.h (头文件)** ```c #include "stm32f4xx_hal.h" #include "i2c.h" typedef enum { pH_OK, pH_ERROR } PhSensorStatus; typedef struct { I2C_HandleTypeDef hi2c; uint8_t slave_address; // PH传感器I2C地址 float pHValue; } PhSensorData; PhSensorStatus InitializePhSensor(I2C_HandleTypeDef *hi2cHandle); void ReadPhSensor(PhSensorData *sensorData); ``` **PHSensor.c (C文件)** ```c #include "PHSensor.h" PhSensorStatus InitializePhSensor(I2C_HandleTypeDef *hi2cHandle) { if (HAL_I2C_Init(hi2cHandle) != HAL_OK) { return pH_ERROR; } // 配置I2C参数,如时钟速度、中断等 // ... (这部分根据实际硬件配置) // 注册中断处理函数 // ... (这部分根据实际中断处理需求) return pH_OK; } void ReadPhSensor(PhSensorData *sensorData) { uint16_t data = 0; if (HAL_I2C_Master_Transmit(&sensorData->hi2c, sensorData->slave_address, (uint8_t*)&data, 2, 1000) == HAL_OK) { // 数据解析,假设传感器返回的是两个字节表示电压值 float voltage = ((float)data << 8) | (float)data; // 根据公式转换成pH值(这里简化了计算过程) sensorData->pHValue = CalculatePFromVoltage(voltage); // 成功读取,数据处理 } else { sensorData->pHValue = pH_ERROR_VALUE; } } // 假设这个函数从电压值计算出pH值,需要根据实际传感器的规格填写 float CalculatePFromVoltage(float voltage); ``` **相关问题--:** 1. 我该如何校准我的PH传感器? 2. 如何处理I2C错误,特别是在初始化阶段? 3. 有没有现成的库可以简化这个过程?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值