资讯详情

[从零开始]做四轴

原文链接:http://www.9mcu.com/9mcubbs/forum.php?mod=viewthread&tid=1047581&page=1&authorid=403735

陀螺仪视频可参考原始链接

很多童鞋都拿到了套件。由于基础不同,每个人在硬件焊接/模块驱动/程序调试等方面都会遇到各种各样的问题。为了给大家解答,方便大家少走弯路,我们在这里张贴,从最初的硬件焊接调试到最后的飞行调试,一一介绍给大家,努力让大家跟着教程做自己的飞行控制。.(当然楼主刚开始做不久,飞机只能飞,还是很不稳定,需要不断学习,努力)

本帖将继续更新,楼主将跟随大家开始学习四轴. 上位机的数据处理速度可以在1毫秒内处理几十字节的数据帧(无线数据包为32字节,以32字节为例),即32000字节的数据可以在1秒内处理. (1ms接收32字节数据并分析显示数据波形)可以说是写上位机最难的,占用了很多时间,因为如果是10ms如果频率快,比如现在的1ms一帧数据,pc数据处理和显示刷新要处理好,否则程序很容易"死掉",因为windows不是实时系统,还有很多事情要做,所有的资源都不能给上位机程序. 目前传感器采样频率也是1ms一次,您可以使用上位机直接观察采样值和滤波值,非常方便,可以实时观察滤波效果,无需将数据保存在内存卡或计算机上,飞出去看波形. 而且听取大家意见,很多人没有航模遥控,这里加上了鼠标键盘控制功能,可以用鼠标和键盘控制飞机了,当然,手感肯定没有遥控好了. 为了减轻重量,飞机上没有遥控接收模块。飞机的遥控器是通过飞行控制带来的NRF24L01芯片完成,芯片还负责数据传输,因此飞机不能直接通过商业遥控飞行,需要使用通过单片机采集遥控信号NRF模块发送到飞机完成遥控,飞机可以通过飞行数据将飞行数据发送给飞机NRF模块发送到单片机,然后通过串口发送到单片机pc上位机还可以通过飞行参数通过上位机NRF模块实时发给飞机.以下数据连接同时存在: 1:遥控->遥控板->飞机 2:PC上位机->遥控板->飞机 3:飞机->遥控板->PC上位机 可以看出所有的数据传输都要通过遥控板.这样的好处是在遥控飞行的同时可以用上位机接收飞机的飞行数据,并在上位机实时显示,上位机也可以在飞行过程中或飞机落地后,修改飞控参数,十分方便. 焊接好后,就要开始软件调试了,这里才是四轴最"好玩"的地方,当初决定玩四轴也是因为这个,因为四轴硬件简单,主要拼的是软件,不像直机什么的,硬件太复杂了. 软件的调试,建议大家还是一步一步来.虽然我开源了飞控的全部程序,大家烧进去就可以实现基本的飞行了,但是我们自己做飞控最关键的就是程序了,直接copy一个工程过来,想必大家直接消化还是很不容易的.就像学习骑车一样,还不会走路,就学骑自行车,怎么会骑好.所以还是建议大家从基础的开始.     从哪里开始呢,因为我们使用的是stm32f103,大家就从最简单的stm32的驱动开始吧. 以下都是针对我的飞控板写的,大家如果用的自己的,记得需要把IO和端口都改为自己的     stm32可以说就是飞控的大脑,mpu6050和hmc5883就是飞控的眼睛,耳朵.飞控的所有功能,都是通过stm32实现的,所以大家清楚了stm32做什么了以后,就要好好的把他驱动好,让他按照我们的想法来运转,这样飞控才能好好的工作.     首先下载我们需要的软件环境,就是MDK (KEIL FOR ARM),我用的是4.7版本,有了自动补全功能,挺好用.当然,还要有个JLINK,使用swd方式进行调试.然后就可以开始第一步的程序编写了.按照网上的教程,使用库函数建立一个空白的工程,从最简单的,点亮一个LED开始.     要点亮一个led,也不是一件简单的事情,首先,系统时钟要配置好(最新库函数在初始化时已经帮我们把时钟初始化好了,不用我们再初始化了,当然,除非你有特殊要求),然后要配置端口的输入输出,还要打开响应端口的外设时钟. void LED_INIT(void) {         GPIO_InitTypeDef GPIO_InitStructure;        这个是端口配置结构体         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);             打开外设GPIOB的时钟,因为LED是通过GPIOB的9,11,14,15来驱动的         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9 ;                 选择响应的管脚         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  设置IO速度         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   设置IO驱动方式,out为输出,PP为推挽输出         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         对GPIOB进行初始化 } 初始化好了,再写几个函数来操作LED,更加方便 #define LED1_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_11) #define LED1_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_11) #define LED2_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_14) #define LED2_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_14) #define LED3_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_15) #define LED3_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_15) #define LED4_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_9) #define LED4_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_9) #define LEDALL_OFF  GPIO_SetBits(GPIOB, GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9) #define LEDALL_ON         GPIO_ResetBits(GPIOB, GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9)

这几个函数功能很简单,就是对IO的输出电平进行操作.当LED可以点亮后,更高级的比如LED的闪烁,就需要大家自己写了,实现的方法很多,可以用循环实现,也可以用定时中断实现.选用哪种方式实现,就要看具体的使用地点和情况了.

很多童鞋已经拿到了套件,由于基础不同,大家在硬件焊接/模块驱动/程序调试等方面会遇到各种各样的问题,为了给大家解答,也为了方便大家少走弯路,特此开贴,从最开始的硬件焊接调试,到最后的飞行调试,一一给大家介绍,争取让大家跟着教程都能做出自己的飞控.(当然楼主也是刚开始做不久,飞机也只是可以飞行,还是很不稳定,还需要不断学习,努力)     本贴会持续,不断更新,楼主会跟着大家一同开始四轴的学习. 上位机的数据处理速度可以1毫秒处理一个几十字节的数据帧(无线数据包为32字节,这里就以32字节为例),也就是说1秒可以处理32000字节的数据. (1ms接收32字节的数据,并分析,显示数据波形)  这里可以说是写上位机时最难的,占据了大量的时间,因为如果做到10ms接收一帧数据并显示,是比较容易的,如果频率快了,比如现在的1ms一帧数据的话,pc的数据处理和显示刷新要处理的很好才行,要不程序就很容易"死掉",因为windows不是实时系统,还有很多事情要做,不能把所有资源都给上位机程序. 目前传感器的采样频率也是1ms一次,这样就可以用上位机直接观察采样值和滤波后的值,很方便,可以实时观察滤波效果,不用再把数据先保存在内存卡或者电脑上,飞完了在调出来看波形了.     而且听取大家意见,很多人没有航模遥控,这里加上了鼠标键盘控制功能,可以用鼠标和键盘控制飞机了,当然,手感肯定没有遥控好了. 为了减轻重量,飞机上没有设计遥控接收模块,飞机的遥控通过飞控上自带的NRF24L01芯片完成,同时该芯片还负责数据的传输,所以飞机不能直接通过商业遥控遥控飞行,需要用一个单片机采集遥控信号再通过NRF模块发给飞机来完成遥控,同时飞机可以将飞行数据通过NRF模块发给单片机,单片机再通过串口发送到pc上位机,上位机也可以把飞行参数通过NRF模块实时发给飞机.等于是同时存在以下几个数据连接: 1:遥控->遥控板->飞机 2:PC上位机->遥控板->飞机 3:飞机->遥控板->PC上位机 可以看出所有的数据传输都要通过遥控板.这样的好处是在遥控飞行的同时可以用上位机接收飞机的飞行数据,并在上位机实时显示,上位机也可以在飞行过程中或飞机落地后,修改飞控参数,十分方便. 焊接好后,就要开始软件调试了,这里才是四轴最"好玩"的地方,当初决定玩四轴也是因为这个,因为四轴硬件简单,主要拼的是软件,不像直机什么的,硬件太复杂了. 软件的调试,建议大家还是一步一步来.虽然我开源了飞控的全部程序,大家烧进去就可以实现基本的飞行了,但是我们自己做飞控最关键的就是程序了,直接copy一个工程过来,想必大家直接消化还是很不容易的.就像学习骑车一样,还不会走路,就学骑自行车,怎么会骑好.所以还是建议大家从基础的开始.     从哪里开始呢,因为我们使用的是stm32f103,大家就从最简单的stm32的驱动开始吧. 以下都是针对我的飞控板写的,大家如果用的自己的,记得需要把IO和端口都改为自己的     stm32可以说就是飞控的大脑,mpu6050和hmc5883就是飞控的眼睛,耳朵.飞控的所有功能,都是通过stm32实现的,所以大家清楚了stm32做什么了以后,就要好好的把他驱动好,让他按照我们的想法来运转,这样飞控才能好好的工作.     首先下载我们需要的软件环境,就是MDK (KEIL FOR ARM),我用的是4.7版本,有了自动补全功能,挺好用.当然,还要有个JLINK,使用swd方式进行调试.然后就可以开始第一步的程序编写了.按照网上的教程,使用库函数建立一个空白的工程,从最简单的,点亮一个LED开始.     要点亮一个led,也不是一件简单的事情,首先,系统时钟要配置好(最新库函数在初始化时已经帮我们把时钟初始化好了,不用我们再初始化了,当然,除非你有特殊要求),然后要配置端口的输入输出,还要打开响应端口的外设时钟. void LED_INIT(void) {         GPIO_InitTypeDef GPIO_InitStructure;        这个是端口配置结构体         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);             打开外设GPIOB的时钟,因为LED是通过GPIOB的9,11,14,15来驱动的         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9 ;                 选择响应的管脚         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  设置IO速度         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   设置IO驱动方式,out为输出,PP为推挽输出         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         对GPIOB进行初始化 } 初始化好了,再写几个函数来操作LED,更加方便 #define LED1_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_11) #define LED1_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_11) #define LED2_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_14) #define LED2_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_14) #define LED3_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_15) #define LED3_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_15) #define LED4_OFF          GPIO_SetBits(GPIOB, GPIO_Pin_9) #define LED4_ON                 GPIO_ResetBits(GPIOB, GPIO_Pin_9) #define LEDALL_OFF  GPIO_SetBits(GPIOB, GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9) #define LEDALL_ON         GPIO_ResetBits(GPIOB, GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_9) 这几个函数功能很简单,就是对IO的输出电平进行操作.当LED可以点亮后,更高级的比如LED的闪烁,就需要大家自己写了,实现的方法很多,可以用循环实现,也可以用定时中断实现.选用哪种方式实现,就要看具体的使用地点和情况了.

串口初始化好了,就要测试收发了,将串口用串口线和电脑连接起来,先来简单的发送,用上位机看看能不能收到数据. 对了   这里还要设置串口中断         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         NVIC_InitStructure.NVIC_

标签: 环形拉力传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台