0%

四旋翼飞行器学习笔记

四旋翼飞行器学习笔记


还记得很久很久以前,有幸在学校认识把无人机从大学玩到公司的老司机,当时觉得哇塞,自己做个无人机好牛逼,于是,一颗对飞行的赤诚之心在梦想里萌芽,当时在社团找到一块小四轴的PCB,当时的我,可谓是菜到一种境界,连电阻电容都不认识的人或许是因为那块PCB颜色好看,找学长要了一个,于是,或许……从那是开始,还是想学习一下四旋翼这个方向,然后……..好像很久很久都没有这棵种子并没有得到灌溉,最近,算是真的下定绝心了吧,不求它长成一棵参天大树,但至少也得让我看见小树苗吧,哈哈哈。

遥控器部分

好像对于商用的一些东西,有很多可能我们认为并不重要的东西,当涉及到利益的时候,可能有很多的东西并不能简单的CTRL C+V的白嫖 我们很少注意到这一点

1
2
版权所有,盗版必究!!
本程序只供学习使用,未经作者许可,不得用于其它任何商业用途,否则将依法追究其责任!

遥控器大致思路

遥控器采用STM32F103C8T6单片机作为主控芯片,使用SPI通信的NRF24L01进行单向数据传输,(或许是为了节约成本)使用单片机内部时钟,用定时器定时采集ADC通道的ADC值,通过DMA直接搬运到寄存器中供数据传输。借此,总结一下相关知识。

时钟配置

时钟配置是单片机运行的基本,当然如果你只是简单的点灯,不需要严格的时钟配置。但这种情况几乎不会存在,所以,熟悉时钟配置很有必要。

  • STM32CUBEMX—HAL库

    利用STM32官方系列的可视化时钟配置,似乎让时钟配置十分简单和快捷,只需要动几下鼠标便可实现时钟树配置。

  • STM标准库

    使用标准的库函数进行时钟配置可能需要麻烦一点,只要思路清晰,也一样很顺利的进行配置。

    以正点原子的时钟配置为例

    1. 选择使用外部晶振还是内部晶振 这里选择外部晶振

    2. 根据选择的晶振修修改Stm32f10x.h中HSE宏定义 应该修改第二个

      1
      2
      3
      4
      5
      #if !defined  HSE_VALUE
      #ifdef STM32F10X_CL
      #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
      #else
      #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
    3. 定义system_stm32f10x.c中系统时钟宏定义

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    /* #define SYSCLK_FREQ_HSE HSE_VALUE */
    #define SYSCLK_FREQ_24MHz 24000000
    #else
    /* #define SYSCLK_FREQ_HSE HSE_VALUE */
    /* #define SYSCLK_FREQ_24MHz 24000000 */
    /* #define SYSCLK_FREQ_36MHz 36000000 */
    /* #define SYSCLK_FREQ_48MHz 48000000 */
    /* #define SYSCLK_FREQ_56MHz 56000000 */
    #define SYSCLK_FREQ_72MHz 72000000
    #endif

    ​ 4.修改system_stm32f10x.c中系统时钟的修改

    1
    2
    3
    4
    5
    #else    
    /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
    RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE| RCC_CFGR_PLLMULL6);//!!!一定要注意这里啊啊啊!!!!!RCC_CFGR_PLLSRC_HSE

SPI通信协议

  • 硬件SPI

    硬件spi更加稳定,但是代码如果使用HAL可能会遇到初始化的一些bug,但都还好,应该有人踩过坑啦

  • 软件模拟SPI

    软件模拟SPI是很常见的方式,不需要特定的IO接口,缺点就是容易被中断打断时序。

ADC+定时器触发+DMA传输