zoukankan      html  css  js  c++  java
  • STM32四轴飞行器的制作-- 使用stm32最小系统板

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

       目前初步的方案是:

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

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

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

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

      

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

     

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

     

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

      

     

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

     

    接线方式:使用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无线模块收发实验

     

    接线方式:使用有源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驱动空心杯实验

          

     

    接线方式:使用有源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核心板和电机要统一供电,核心板的引脚无法重映射

     

     整机试验一

     

    接线方式:使用有源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底板上。

     

     整机试验二

     

    接线方式:使用有源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的有刷穿越机的机架,对于四轴飞行器物理结构的精度和软件的精确控制同样重要,否则无法区分到底是硬件还是软件的问题。

     

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

     

     

    附录:  自制飞控

        在上一篇中小四轴实现了有限的飞行,但由于机架的电机垂直度仍然有偏差(我使用720电机但机架适配820电机),重量超标(模块搭建自然超重),效果不尽如人意,因此打算采用自制飞控的方式同时选购新的机架,由于本人不会熟练地画pcb布线图,因此目前还没有想好如何自制飞控。

        打算从以下几个方面做准备:

      1)熟悉贴片元件的焊接方法并购买必要的工具;

         贴片焊接方法可参看 贴片焊接   贴片元件的焊接方法(上)   贴片元件的焊接方法(下)  SMT芯片的焊接方法

       相关工具参考下文

    随着时代和科技的进步,现在的越来越多电路板的使用了贴片元件。贴片元件以其体积小和便于维护越来越受大家的喜爱。但对于不少人来说,对贴片元件感到“畏惧”,特别是对于部分初学者,因为他们认为自己不具备焊接元件的能力,觉得它不像传统的直插元件那样易于焊接把握,其实这些担心是完全没有必要的。读者可以使用合适的工具和掌握一些手工焊接贴片的知识,很快就会成为焊接贴片元件的专家。

    一、使用贴片元件的好处

    首先我们来了解贴片元件的好处。与引线元件相比,贴片元件有许多好处。第一方面:体积小,重量轻,容易保存和邮寄。如常用的贴片电阻0805封装或者0603 封装比我们之前用的直插电阻要小上很多。几十个直插电阻就可以装满一袋子但换成贴片电阻的话足以装好几千个甚至上万个。当然,这是在不考虑其所能承受最大电流情况下的。第二方面:贴片元件比直插元件容易焊接和拆卸。贴片元件不用过孔,用锡少。直插元件最费事也最伤神的就是拆卸,做过的朋友都有这个体会,在两层或者更多层的PCB 板上,哪怕是只有两个管脚,拆下来也不太容易而且很容易损坏电路板,多引脚的就更不用说了。而拆卸贴片元件就容易多了,不光两只引脚容易拆,即使一、二百只引脚的元件多拆几次也可以不损坏电路板。第三方面:贴片元件还有一个很重要的好处,那就是提高了电路的稳定性和可靠性,对于制作来说就是提高了制作的成功率。

    这是因为贴片元件体积小而且不需要过孔,从而减少了杂散电场和杂散磁场,这在高频模拟电路和高速数字电路中尤为重要。综述所说,笔者可以负“责任”的说,只要你一旦适应和接受了贴片元件,除非不得已的情况,你可能再也不想用直插元件了。

    二、焊接贴片元件需要的常用工具

    在了解了贴片元件的好处之后,让我们来了解一些常用的焊接贴片元件所需的一些基本工具(见图1)。


    图1 手工焊接贴片元件所用到常用工具

    1. 电烙铁

    手工焊接元件,这个肯定是不可少了。在这里向大家推荐烙铁头比较尖的那种,因为在焊接管脚密集的贴片芯片的时候,能够准确方便的对某一个或某几个管脚进行焊接。

    2. 焊锡丝

    好的焊锡丝对贴片焊接也很重要,如果条件允许,在焊接贴片元件的时候,尽可能的使用细的焊锡丝,这样容易控制给锡量,从而不用浪费焊锡和吸锡的麻烦。

    3. 镊子

    镊子的主要作用在于方便夹起和放置贴片元件,例如焊接贴片电阻的时候,就可用镊子夹住电阻放到电路板上进行焊接。镊子要求前端尖而且平以便于夹元件。另外,对于一些需要防止静电的芯片,需要用到防静电镊子。

    4. 吸锡带

    焊接贴片元件时,很容易出现上锡过多的情况。

    特别在焊密集多管脚贴片芯片时,很容易导致芯片相邻的两脚甚至多脚被焊锡短路。此时,传统的吸锡器是不管用的,这时候就需要用到编织的吸锡带。

    吸锡带可在卖焊接器材的地方买到,如果没有也可以拿电线中的铜丝来代替,后文将会讲述。

    5. 松香

    松香是焊接时最常用的助焊剂了,因为它能析出焊锡中的氧化物,保护焊锡不被氧化,增加焊锡的流动性。在焊接直插元件时,如果元件生锈要先刮亮,放到松香上用烙铁烫一下,再上锡。而在焊接贴片元件时,松香除了助焊作用外还可以配合铜丝可以作为吸锡带用。

    6. 焊锡膏

    在焊接难上锡的铁件等物品时,可以用到焊锡膏,它可以除去金属表面的氧化物,其具有腐蚀性。

    在焊接贴片元件时,有时可以利用其来“吃”焊锡,让焊点亮泽与牢固。

    7. 热风枪

    热风枪是利用其枪芯吹出的热风来对元件进行焊接与拆卸的工具。其使用的工艺要求相对较高。

    从取下或安装小元件到大片的集成电路都可以用到热风枪。在不同的场合,对热风枪的温度和风量等有特殊要求,温度过低会造成元件虚焊,温度过高会损坏元件及线路板。风量过大会吹跑小元件。对于普通的贴片焊接,可以不用到热风枪,在此不做详细叙述。

    8. 放大镜

    对于一些管脚特别细小密集的贴片芯片,焊接完毕之后需要检查管脚是否焊接正常、有无短路现象,此时用人眼是很费力的,因此可以用到放大镜,从而方便可靠的查看每个管脚的焊接情况。

    9. 酒精

    在使用松香作为助焊剂时,很容易在电路板上留下多余的松香。为了美观,这时可以用酒精棉球将电路板上有残留松香的地方擦干净10. 其他贴片焊接所需的常用工具除了上述所说的之外,还有一些如海绵、洗板水、硬毛刷、胶水等。在此不做赘述,有条件的朋友可以去了解和动手实践使用。

    (从左至右,第一排为:热风枪、镊子、焊锡丝。第二排为:电烙铁、松香、吸锡带)

     

      2)寻找已有的飞控原理图和布线图并考虑打样;

         使用匿名开拓者飞控和遥控器,以下是打样回来的pcb样板

       

      3)准备相应的物料清单;

         可以从pcbdoc文件中导出BOM文件

      4)对源程序要做相应的修改以适应飞控。

        源程序主要是要分析各模块的驱动程序和主控程序,如有必要才做修改。

       世上无难事,只怕有心人,四轴飞行器牵涉的知识确实比较多,我想很多人从小都有一个飞行梦,如果是这样那么从多轴飞行器起步是一个不错的选择。

  • 相关阅读:
    手动制作openstack windows镜像
    kolla-ansible部署多节点OpenStack-Pike
    手动制作openstack CentOS 镜像
    VNC Viewer连接打开remote display的VMware虚拟机出现闪退
    Host does not support domain type kvm for virtualization type 'hvm' arch 'x86_64'
    ImportError: No module named 'requests.packages.urllib3'
    使用kolla安装的openstack mariadb为集群所有节点无法启动
    kolla-ansible部署单节点OpenStack-Pike
    墨刀--在线原型设计工具
    Pycharm配置支持vue语法
  • 原文地址:https://www.cnblogs.com/yangjd/p/9135301.html
Copyright © 2011-2022 走看看