控制模式中的定点模式(需配合光流模块),此模式下,通过光电定点,激光(2m以内)定高的方式实现四轴稳定悬停,如果挂载光流模块,此模式作用相同于定高模式。注意:此模式关闭空翻功能。
通信链路
MiniFly 遥控器、四轴主机、上位机之间通信链路关系如图所示:

- Radiolink 链路:无线通信方式
- Usblink 链路:STM32 USB 虚拟串口通信方式
- WiFilink 链路:手机控制命令数据通过 WiFi 摄像头模块接收并转成串口方式输出与四轴通信
当遥控器与四轴 NRF51822 通信成功后,遥控器会不断发送数据包给 NRF51822,NRF51822 接收并解析,然后再转发给 STM32F411,STM32F411 接收到后会立即向 NRF51822返回一条数据包,一应一答模式。
如果遥控器连接了上位机,遥控器将四轴返回的数据转发给上位机,即遥控器会将接收到的应答数据包先解析,解析完成后转发给上位机。同样,上位机发下来的数据遥控器也会先解析再转发给四轴。Radiolink 链路中,遥控器定周期发送控制命令,四轴定周期返回姿态和其他数据。
程序框架
MiniFly 遥控器固件 Firmware_F103 工程分组:

可以看到工程分有 14 个分组,其中
- CONFIG 分组主要是配置参数保存至 Flash 相关的代码。
- COMMUNICATE 分组主要是跟通信相关的代码。
- GUI_APP分组主要是界面显示相关的代码。
- COMMON 分组主要是调试相关的代码。
- HARWARE 分组主要是硬件底层驱动相关代码。
- GUI_DRV分组主要是界面驱动相关代码。
部分代码关系图:

adc.c 主要实现采集摇杆电位器电压 AD 值。
joystick.c 主要实现将 AD值转为 THRUST、YAW、PITCH、ROLL 对应百分比。
remoter.c 主要实现将百分比乘以设定速度值并打包成 ATKP 包格式,然后以 10ms 周期性发送到 radiolink.c 的发送队列中,即 上述的 commanderTask。
radiolink.c 主要实现实时发送 ATKP 数据包给四轴,发送成功四轴会返回一个应答包,即上述的 radiolinkTask。
usblink.c 主要实现发送 ATKP 格式数据包到上位机,接收上位机串口数据并打包为 ATKP 格式,即上述的 usblinkTxTask 和 usblinkRxTask。
aktp.c 主要实现解析四轴通过 radiolink.c 返回的应答包并通过 usblink.c 转发给上位机,上位
机 通 过 usblink.c 发下来 的 数 据 包 将 通 过 radiolink 转 发 给 四 轴 , 即 上 述 的radiolinkDataProcessTask 和 usblinkDataProcessTask。
usblink.c 是 USB_LIB 驱动代码上构建的,USB_LIB 即 USB_CONFIG 分组和 USB_CORE 分组的驱动代码。
USB_LIB 主要实现了USB 虚拟串口的功能。
main_ui.c、menu_ui.c、debug_ui.c 及其他 xx_ui.c 均是在 GUI_DRV 分组里的驱动代码上构建的,GUI_DRV 驱动代码主要是 oled 驱动代码、oled 显示字符串及汉字代码、oled 基本绘图代码等。
mian_ui.c 主要实现主界面显示、低电量报警、解锁加锁、一键起飞降落、紧急停机、一键翻滚、切换至调试界面、切换至微调界面等功能。
menu_ui.c 主要实现菜单显示功能。
debug_ui.c 主要实现显示调试界面。界面切换是通过按键来实现,所以几乎所有的界面代码 xx_ui.c 都调用了 keyTask.c。部分界面需要蜂鸣器报警功能,所以调用了beepTask.c。
源码解析
USER 分组的 main.c包含了所有硬件初始化和任务的创建的代码。
int main(void)
{
NVIC_SetVectorTable(FIRMWARE_START_ADDR,0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/*中断配置初始化*/
delay_init(); /*delay初始化*/
configParamInit(); /*配置参数初始化*/
ledInit(); /*led初始化*/
oledInit(); /*oled初始化*/
beepInit(); /*蜂鸣器初始化*/
keyInit(); /*按键初始化*/
joystickInit(); /*摇杆初始化*/
usb_vcp_init(); /*usb虚拟串口初始化*/
radiolinkInit(); /*无线通信初始化*/
usblinkInit(); /*usb通信初始化*/
displayInit(); /*显示初始化*/

本文解析了四轴飞行器遥控器的软件架构,包括通信链路设计、程序框架、源码分析及任务功能说明等内容。重点介绍了遥控器与四轴之间的交互过程,以及各功能模块的任务分配。
&spm=1001.2101.3001.5002&articleId=115816566&d=1&t=3&u=03abb09dae6b418482c0ac349bdb4ffb)
4491

被折叠的 条评论
为什么被折叠?



