# 四轴飞行器-遥控器设计 **Repository Path**: wang-chen_chen/remote ## Basic Information - **Project Name**: 四轴飞行器-遥控器设计 - **Description**: 课程设计是设计一个四轴飞行器,我负责的是遥控器软件设计以及通信 - **Primary Language**: C/C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-12-19 - **Last Updated**: 2024-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 四轴飞行器-遥控器设计 ​ 该遥控器设计是与本组另一个同学一起完成的,我主要负责软件架构和程序流程,她主要负责原理图和PCB设计 ## 1. 软件方案设计 ​ ![img](README.assets/clip_image002.jpg) **1.1 遥控器通过串口与PC机的通信** ​ 由于飞控板与遥控器通信的时候,会发送遥控器位姿、遥感状态等信息,而我们需要将这些信息发送给上位机PC端,因此我们需要将遥控器通过无线传输获得飞控板数据打包发送给PC端。 ​ 在本报告设计中,利用串口与PC端通信,并且专门设计了与PC机之间的通信协议。 **1.2 ADC遥控数据的获取** ​ 遥控器板子需要获得遥感数据,而摇杆所获得的数据是模拟信号,需要通过ADC模块进行模数转换,转换成数字信号。 ​ 而STM32F4X系列芯片内部配置有ADC模数转换模块,通过配置相应的引脚即可完成对遥感模拟量的获取,并对遥感模拟量进行运算转换成遥感数值,如油门、方向等数值。 **1.3 遥控偏移量的FLASH读写** ​ 因为不同的飞控板其位姿、重量等状态会有所不同,同样的遥控数据会对它们产生不同的影响。因此需要使遥控板和飞控板之间进行遥控偏移量的适配,使得在划动摇杆时能够准确地操控飞控板的飞行。 ​ 而本设计中通过FLASH来存储遥控器适配飞控板时所使用的遥控偏移量,在遥控板开启之后,会对FLASH进行读取遥感偏移量,使得更加准确操控飞控板,并且能在遥控的同时,向FLASH写入使用过程中调整的遥感偏移量,方便下一次进行使用。通过外部按键,向芯片发送低电平信号来控制芯片将遥感偏移量写入FLASH。 **1.4 按键获取遥控微调的偏移值** ​ 除了划动摇杆能过控制飞控板的飞行姿态之外,还需要对飞控板的飞行姿态进行细微的调整,并且将这细微的调整值作为偏移量来作为遥控器和飞控板适配数值,能够写进FLASH。 ​ 因此本报告通过设计外部按键,获取低电平信号来表示对遥控某个数值的微调,一次为5个单位的数值微调。 **1.5 NRF24L01的无线通信** ​ 为保证遥控器和飞控板之间的无线通信,以及在广阔环境内稳定可靠的数据传输,本报告采用了RF射频无线传输的方式,并利用NRF24L01模块来完成射频无线传输,该模块具有传播范围广、传输稳定等优点。 ​ 并且为了进行安全可靠的数据传输,专门为遥控器和飞控板设计了特有的通信协议,通过该协议,飞控板能够准确获取遥控器传来的遥控数据,以及遥控器能够获取飞控板的位姿状态。 **1.6 蜂鸣器开机警鸣和按键提醒** ​ 为保证遥控器开机正常以及按键被正常按下,设置了个蜂鸣器,为开机和按键操作做了个提醒,表明开机成功和按键被成功按下。 ## 2. 程序流程 ​ ![img](README.assets/clip_image002.gif) ​ ​ 第一步,也是先进行初始化,系统核心的配置、引脚的配置以及外设的初始化:对GPIO引脚等属性的配置,ADC、串口、DMA、SPI等模块或协议的配置,这一部分代码通过STM32CubeMx生成。 ​ 第二步,是设置系统产生中断的频率,定义为1ms产生一次中断。 ​ 第三步,是从FLASH中读取遥感的偏移量,作为后面遥控数据计算的偏移参数。并检测NRF24L01与芯片之间能否通过SPI通信和启动ADC。。这一步可与第二步互换。 ​ 最后,利用while死循环等待定时中断的触发。 ​ 系统定时中断函数执行流程为: ​ 1) 每触发一次中断,进行一次计数,如果计数到10,即经过了10ms执行下列步骤,否则直接返回主程序。 ​ 2) 读取ADC转换后的遥感数据。 ​ 3) 扫描按键,判断按键状态,并执行相应的遥感偏移微调。 ​ 4) 设置NRF为发送模式,并发送遥感数据。 ​ 5) 设置NRF为接收模式,等待接收。 ## 3. 测试结果 以下所有测试都讲由串口展示: **3.1 ADC测试** ​ 如图,将ADC输入的输入的四个数值,通过AD转换并打印到串口上,输出为浮点型,保留两位小数。 ![img](README.assets/clip_image002-1625636696528.jpg) **3.2 FLASH读写测试** ​ 如图,对FLASH模块进行测试,首先向flash写入“what the data is”,然后再从flash读出来。 ![img](README.assets/clip_image004.jpg) **3.3 遥控模块测试** ​ 如图 ,对遥感模块进行测试,当人为划动摇杆的时候能够改变四个摇杆数值,并且通过按键能够进行摇杆数值的微调。 ![img](README.assets/clip_image006.jpg) **3.4 NRF24L01无线通信测试** ​ 如图,设置了另一块最小系统板搭载了NRF的接收例程,遥控器作为发送端,对其进行遥感数据发送。 ![img](README.assets/clip_image008.jpg) ## 4. 硬件设计 ​ 硬件设计是由本组另一位同学负责,实名夸奖和感谢她的贡献,为软件测试提供了非常好的效果! ### 4.1 原理图设计 ![1625637000287](README.assets/1625637000287.png) ### 4.2 PCB设计 ![1625637147106](README.assets/1625637147106.png) ### 4.3 实物图 ![1625635439715](README.assets/1625635439715.png)