|
本帖最后由 wangjt1988 于 2013-3-17 21:14 编辑
很多童鞋已经拿到了套件,由于基础不同,大家在硬件焊接/模块驱动/程序调试等方面会遇到各种各样的问题,为了给大家解答,也为了方便大家少走弯路,特此开贴,从最开始的硬件焊接调试,到最后的飞行调试,一一给大家介绍,争取让大家跟着教程都能做出自己的飞控.(当然楼主也是刚开始做不久,飞机也只是可以飞行,还是很不稳定,还需要不断学习,努力)
本贴会持续,不断更新,楼主会跟着大家一同开始四轴的学习.
首先是之前帖子的链接:
开源自己的微型四轴—全套原理图.程序.上位机. http://www.amobbs.com/thread-5515784-1-1.html
匿名四轴--介绍上位机 http://www.amobbs.com/thread-5516299-1-1.html
试飞视频:http://www.56.com/u56/v_ODQ0ODczNDk.html
几个月过去了,上位机经过算法和功能的优化,现在给大家提供新版本的上位机.
大家刚开始使用可能有点摸不到头脑,这里给大家简单介绍一下 (上位机在使用时按F12会有帮助界面)
基本介绍:http://v.youku.com/v_show/id_XNTI4MDczNzI0.html
基本收发:http://v.youku.com/v_show/id_XNTI4MDc0NzEy.html
高级收码:http://v.youku.com/v_show/id_XNTI4MDc2MTMy.html
高级收码2+波形显示:http://v.youku.com/v_show/id_XNTI4MDg0NjQ4.html
飞控状态:http://v.youku.com/v_show/id_XNTI4MDk2ODk2.html
上位机的数据处理速度可以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的闪烁,就需要大家自己写了,实现的方法很多,可以用循环实现,也可以用定时中断实现.选用哪种方式实现,就要看具体的使用地点和情况了. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|