MiniFly微型四轴学习与开发日志(二)

本文解析了四轴飞行器遥控器的软件架构,包括通信链路设计、程序框架、源码分析及任务功能说明等内容。重点介绍了遥控器与四轴之间的交互过程,以及各功能模块的任务分配。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

控制模式中的定点模式(需配合光流模块),此模式下,通过光电定点,激光(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();		/*显示初始化*/
	
	

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值