STM32四轴飞行器的制作(1)-- 使用stm32最小系统板

这段时间正在学习stm32处理器的使用,为了巩固所学知识,初步熟悉STMF103处理器和外设的使用,打算制作一架微型四轴飞行器,由于这个项目对我来讲还是有难度的,网上也看到一些不太成功的案例,因此打算分几步来实现,即硬件选型(飞控)==>物理结构(机架和电机)==>软件编写(姿态解算+PID控制)==>安装调试(稳定性+性能)。

   目前初步的方案是:

   硬件选型:采用STM103C8T6核心板+MPU6050

   物理结构:采用轴距100mm左右的8250空心杯小四轴结构,具体待定(实际情况为轴距80mm+112mm,使用720空心杯电机)

   软件编写:使用正点原子的开发板和配套软件来开发

   安装调试:打算使用匿名上位机(实际主要通过NRF24L01+USB串口 PC端上位机来调试)

  

  顺便说一下,由于这个项目对于初学者有一定难度,最好保持足够的专注度,不要同时做其它项目,在遇到困难时可以从硬件和软件两个角度想办法,另外对收集到的资料和开发过程要做一些摘要和记录,打铁还需自身硬, 知识不消化等于没有。

 

 目前手头上有miniSTM32开发板,附带的光盘资料整理得很完备也比较多,由于以前学过51单片机,为避免分散注意力导致抓不住重点,我删除了所有的视频资料,打算从《stm32不完全手册》+《Cortex-M3权威指南》+数据手册+使用手册入手,采用开发板+STMF103C8T6核心板+面包板操作,就从点亮一个LED灯开始学习光盘附带的一些例程。

 

跑马灯实验, 知识要点:GPIO端口的配置

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第1张图片

  

 

 MPU6050三轴加速度,角速度测量以及通过DMP计算四元数并获取姿态角实验

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第2张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第3张图片

 

接线方式:使用CH340E USB转TTL串口模块给STMF103C8T6+MPU6050统一供电,

                 USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                 MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                 MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

知识要点:模拟IIC的配置及读写函数,MPU6050三轴加速度和角速度数据的获取,DMP库的移植,通过四元数计算欧拉角

注意事项:使用匿名上位机V4.22处理上传的串口数据时要使用新的通信协议定义的数据格式,另外要小心延时函数的使用,有可能导致数据读不出,具体原因有待研究

 

 NRF24L01无线模块收发实验

 STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第4张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第5张图片

接线方式:使用有源USB Hub给主板和无线模块供电,

                 USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                 MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                 NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                 MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

知识要点:SPI的配置及读写函数,NRF24L01的初始化和收发函数

注意事项:注意USB供电是否充足

 

 PWM驱动空心杯实验

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第6张图片      STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第7张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第8张图片

 

接线方式:使用有源USB Hub给主板和无线模块供电,

                 USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                 MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                 NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA8

                 MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                 空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚

知识要点:定时器Tim1的配置和引脚配置

注意事项:STM103C8T6核心板和电机要统一供电,核心板的引脚无法重映射

 

 整机试验一

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第9张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第10张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第11张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第12张图片

 

接线方式:使用有源USB Hub给主板和无线模块供电,

                 USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                 MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                 NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                 MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                 空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四个通道)

知识要点:使用NRF24L01遥控电机转速

注意事项:1. 本次试验发现电机噪声污染导致NRF24L01无法工作或核心板自动复位,因此保证核心板的供电稳定在3.3V并且纯净是很重要的,可以使用单独的3.3V稳压模块或者参考上图将电池电压先升压至5V再稳压到3.3V,可以使用电容+电感滤波。

                  2. 目前整机较重,四轴飞行器升力不足,必要时考虑用热熔胶把空心杯电机直接固定到PCB底板上。

 

 整机试验二

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第13张图片

STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第14张图片

 

接线方式:使用有源USB Hub给主板和无线模块供电,

                 USART1接线:PA9(USART1_TX) -- 串口模块RX脚 ,PA10(USART1_RX) -- 串口模块TX脚

                 MPU6050接线:VCC -- 3.3V ,GND -- GND,SCL -- PB6,SDA -- PB7

                 NRF24L01接线:VCC -- 3.3V, GND-- GND, CE -- PA12, CS -- PA4, SCK -- PA5, MOSI -- PA7, MISO -- PA6, IRQ -- PA1

                 MCU接线:VCC -- 串口模块V3.3脚,GND -- 串口模块GND脚,ST-Link的四根引线分别接核心板排针上的GND脚,CLK脚,IO脚和V3.3脚

                 空心杯驱动电路:见上图,SI2302的控制极即G极通过10欧姆电阻接PA8脚,PWM-CH1:A0, PWM-CH2:A1, PWM-CH3:A2, PWM-CH4:A3(使用TIM2四个通道)

知识要点:使用PID控制电机转速,上油门后四轴能平稳飞行

注意事项:1. 本次试验发现采用PCB焊装模块的方式很难保证飞行器的重心在正中间(电池的位置也不能偏离重心),如果重心严重偏离中心,由于空心杯电机升力有限,光靠PID调整电机转速很难保证飞行器平稳飞行;

                  2. 由于PCB(70mm X 90mm)和电池(650mAH)超重加上重心偏离,导致飞行器最终没能飞起来,只是单侧飞起来导致炸桨好几次,因此还是使用PCB layout的方式成功率更高,刚开始制作的时候没有考虑周全这在项目开发中也是比较常见的,只能逢山开路遇水架桥了,目前我已经坚持了两个月,还需要继续努力才可能把四轴飞起来。

                  3.为解决升力不足的问题打算把55mm桨叶更换为75mm桨叶,把650mAH电池更换为350mAH电池,适当调整电池的位置使得重心对中。

                  4.现在航模电池很多都使用专用USB充电线,注意最好不要直接使用电脑的USB端口,而是使用手机充电器+专用USB充电线,我的USB充电线由于和电池的端子不匹配,在改装时USB充电线和电池的正负极接反产生了一连串可怕的后果:笔记本电脑两个USB口烧坏,电池也报销了,如果采用手机充电器就不会有这样严重的问题。

                 5.MPU6050在核心板刚上电时读出的数据是不准确的,不能用于PID控制,如果不校正上电后要等十几秒才能启动油门。

                 6.为了加大轴距我使用了四小片碳纤维板把空心杯电机引出,否则桨叶产生的下降气流被PCB挡住影响升力。

                 7.注意四轴必须是两个正桨+两个反桨交叉布局,正反桨的区分注意不能看颜色而是看形状,如上图所示。

                 8.油门(Thro)不能设置为定时器的最大值而是要预留PID调整所需的空间,比如定时器重装值为999,油门则最大为900左右。

                 9.PID调参时可以将Kp,Ki,Kd单独测试它们的临界值(产生震荡),主要用到的是Kp和Kd,若使用积分需要将积分误差限幅为油门的%5左右。

 

后记

      由于自制机架无法保证四个电机的垂直度以及它们的中心在圆内接正方形的四个顶点上,最终我还是选用了轴距为100mm的有刷穿越机的机架,对于四轴飞行器物理结构的精度和软件的精确控制同样重要,否则无法区分到底是硬件还是软件的问题。

 STM32四轴飞行器的制作(1)-- 使用stm32最小系统板_第15张图片

 目前整机可以飞行,高度约20cm,飞行状态也不稳定,无法做到悬停,显然四轴还是偏重,考虑自己焊装飞控以减轻重量。

转载于:https://www.cnblogs.com/yangjd/p/9135301.html

你可能感兴趣的:(STM32四轴飞行器的制作(1)-- 使用stm32最小系统板)