这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【i646593001】QuadCopter DIY进程帖

共46条 1/5 1 2 3 4 5 ›| 跳转至

【i646593001】QuadCopter DIY进程帖

助工
2014-05-16 00:16:23     打赏



以前没整过STM32,没玩过四轴,感谢谷哥,感谢度娘。

大哥传帮带,新人同进步!


组装焊接
http://forum.eepw.com.cn/thread/251222/1#3

STM32开发环境的搭建

http://forum.eepw.com.cn/thread/251222/1#4
第一个工程 http://forum.eepw.com.cn/thread/251222/1#10
SWD、下载与调试 http://forum.eepw.com.cn/thread/251222/2#12
LED指示灯实验 http://forum.eepw.com.cn/thread/251222/2#13
UART串口通讯实验 http://forum.eepw.com.cn/thread/251222/2#14
FreeRTOS移植
http://forum.eepw.com.cn/thread/251222/2#15
PWM电机驱动实验 http://forum.eepw.com.cn/thread/251222/2#17
ADC电源电压监测
http://forum.eepw.com.cn/thread/251222/2#18
NRF无线通讯实验 http://forum.eepw.com.cn/thread/251222/2#19
MPU6050传感器驱动 http://forum.eepw.com.cn/thread/251222/2#20

姿态解算程序代码

http://forum.eepw.com.cn/thread/251222/3#22
上位机软件实验 http://forum.eepw.com.cn/thread/251222/3#23
PID控制 http://forum.eepw.com.cn/thread/251222/3#24
传感器驱动结果及工程 http://forum.eepw.com.cn/thread/251222/3#27
传感器数据融合结果
http://forum.eepw.com.cn/thread/251222/5#42


加速度滤波算法分析 http://forum.eepw.com.cn/thread/251222/3#21
数据融合代码分析 http://forum.eepw.com.cn/thread/251222/4#40
Mahony姿态算法解读 http://forum.eepw.com.cn/thread/251222/5#44











关键词: QuadCopter     进程    

助工
2014-05-18 23:59:11     打赏
2楼

下单:

快递:

快递不算慢 

收件:

收件  全家福:

全家福 

First Blood

first blood 

果然如前人所述,USB的管脚太密,一不小心就连起来了,后来多上了点锡,用吸锡枪一吸就好了。

 

第三只手:

 

遥控器完工(USB接口看着实在脆弱,后来又用哥俩好粘了一圈):

 

四轴开关:

 

此处BOOT脚为2.0的,没找着相应排针,换个圆的能凑合插进去:

 

点灯测试:

 

背面:

 

完工:

遥控器:

完工之后首飞成功,固件已经下载好了的。



助工
2014-05-19 19:33:57     打赏
3楼

STM32开发环境的搭建


以前从没有整过STM32,没用过开发环境,所以一边google,一边做。


1、Keil MDK_510

下载地址:

http://www.keil.com/arm/mdk.asp

文件地址:

http://www.keil.com/fid/sj223zwtdy9j1wytrp11z4atj93ocqd1u9yxd1/files/eval/mdk_510.exe


2、注册机

下载地址:

http://pan.baidu.com/s/1tFEDB


3、Keil.STM32F1xx_DFP.1.0.5.pack

下载地址:

http://www.keil.com/dd2/Pack/

文件地址:

http://www.keil.com/pack/Keil.STM32F1xx_DFP.1.0.5.pack


安装方法见下面的网页:

http://www.ucortex.com/forum.php?mod=viewthread&tid=116

不再赘述。


Tips:

对于国外的地址,可能下载的比较慢,我的解决方法是,利用百度网盘的离线下载功能,一般要下载的文件已经存放在百度的服务器上了,基本上是秒传,然后再从百度云上下载该文件,速度不错。


助工
2014-05-19 21:44:01     打赏
4楼

Alientek STM32 《不完全手册V2.0》+37个实验源码+原理图(申请置酷)


http://www.amobbs.com/thread-4517523-1-1.html


网上看到的,先Mark,学习一下


助工
2014-05-20 00:31:33     打赏
5楼
哥俩好俗称AB胶,两管,1:1混合后使用,使用后外观类似于硬质塑料,效果还不错。

助工
2014-05-20 00:58:14     打赏
6楼

晚上新建了project,并编译通过,以后可以在此基础上修改代码了。全部参考网上的内容,仅Mark一下自己参考。


一、下载外设库:stsw-stm32054.zip

还有好多stsw-stm32前缀的文件不知道是干嘛的,新版?不去管。

下载地址:Google输入stsw-stm32054.zip,回车就有了


二、解压stsw-stm32054.zip

备用,得到:


_htmresc:ST的logo完全无用,不用理会。

Libraries:比较重要的文件包含STM32的系统文件和大量头文件,也就是库文件了。

Project:包含大量外设的例程,和各个软件版本的评估板工程模板。KEIL对应的就是MDK-ARM文件下的工程模板。你可以利用这个工程模板来修改,得到你自己的工程模块,本文不用此法。

Utilities:就是评估板的相关文件,引脚定义等。

三、新建工程stm32-demo

新建文件夹stm32-demo,在里面新建Lib,List,Output,User四个文件夹,并新建工程:


选择CPU:   103C8


四、相关文件拷贝

将解压出来的外设库中Libraries目录下两个文件夹拷至工程Lib目录,选择一个库里提供的Example,我选的GPIO目录下的IOToggle,将该目录下文件全都拷至工程User目录下



添加工程Item:


  如上图所示,修改工程名,建立四个Group,点击Groups 一栏右上角图标,依次新建User、CMSIS、Lib、StartUp四个组,点击对应的组再点击右下方Add Files添加相应的文件到对应的组中。

        User组中添加USER文件夹下的c文件。

        CMSIS组中添加\LIB\CMSIS\CM3\CoreSupport文件夹下core_cm3.c文件

        LIB组下添加\LIB\STM32F10x_StdPeriph_Driver\src下的所有文件,这个组的文件也可以根据后面的程序功能添加对应的功能文件。

        StartUp组下添加 \LIB\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 文件夹下startup_stm32f10x_md.s文件,此文件根据芯片的所属类型来选择,STM32F103C8为中等容量器件所以选择md结尾的启动文件。

至此,已经将对应的文件全部加入工程。

添加完成后工程主界面左侧会显示已添加内容:



五、目标参数设置:

1、修改目标时钟,选中Use MicroLIB


2、选择输出目录Output,此处要双击工程内Output文件夹才可选中该目录,选中Create HEX File。


3、选择Listing目录List,方法同上。


4、C/C++ :


C/C++选项卡中的设置比较重要,如图 所示,选项卡中主要有两个地方需要注意,首先是整个工程的宏定义,在前面标准外设库部分已经有过介绍,标准外设库中很多功能都是通过宏定义来实现的,由于标准外设库针对STM32一系列芯片,因此需要通过宏定义来进行针对性的选择。这种选择有两种方式,有的人是直接改动宏定义部分的库文件,缺点是需要更改一些功能时不是很方便,而且笔者建议在尽量不更改库文件的方式下实现功能的配置和使用,另一种方式就是在工程的设置中添加宏定义,这儿添加了两个宏定义, USE_STDPERIPH_DRIVER表示使用标准外设库进行程序开发, STM32F10X_MD表示使用的是STM32F10X系列中等容量器件,本例中中使用的是STM32F103C8T6故填写此项。接下来一个重要的设置就是设置工程所包含的头文件目录,点击Include Paths一栏右侧图标,弹出如上所示的对话框。点击对话框右上角图标,添加工程所包括的头文件路径,添加头文件路径的时候要把当前工程目录中包含头文件的路径都添加进去。

六、程序编译:


此时编译报错,main.c中包含了stm32_eval.h我们没有添加到工程中。将外设库中Utilities目录下STM32_EVAL目录拷贝至User目录,添加至include目录,重新编译仍报错:


由于没有选择EVAL的类型,在C/C++选项中添加宏USE_STM3210C_EVAL,再编译,顺利通过:



上面的例程只是一个工程流程,算是学习一下工程创建和编译的步骤。


助工
2014-05-21 01:21:13     打赏
7楼

下载与调试:


1、借来同事的Jlink,连上电脑,安装Jlink的驱动程序,

2、认识SWD接口:


SWD 和传统的调试方式区别

    SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。

    在大家 GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。

    在大家板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦! 比如你可以选择一个很小的 2.54 间距的 5 芯端子做仿真接口


 


J-Link指定的标准接口


市面上的常用仿真器对 SWD 模式支持情况

(1) JLINKV6 支持 SWD 仿真模式, 速度较慢。

(2) JLINKV7 比较好的支持 SWD 仿真模式, 速度有了明显的提高,速度是 JLINKV6 的 6 倍。 
(3) JLINKV8 非常好的支持 SWD 仿真模式, 速度可以到 10M。
(4) ULINK1 不支持 SWD 模式。
(5) 盗版 ULINK2 非常好的支持 SWD 模式, 速度可以达到 10M。
(6) 正版 ULINK2 非常好的支持 SWD 模式, 速度可以达到 10M。

 

SWD 硬件接口上的不同

 

(1) JLINKV6 需要的硬件接口为: GND, RST, SWDIO, SWDCLK
(2) JLINKV7 需要的硬件接口为: GND, RST, SWDIO, SWDCLK
(3) JLINKV8 需要的硬件接口为: VCC, GND, RST, SWDIO, SWDCLK
(4) ULINK1 不支持 SWD 模式
(5) 盗版 ULINK2 需要的硬件接口为: GND, RST, SWDIO, SWDCLK
(6) 正版 ULINK2 需要的硬件接口为: GND, RST, SWDIO, SWDCLK



3、使用Jlink下载固件:

打开J-Flash ARM程序,打开将要下载的固件,并修改 Option 下 Project settings 项。

选择USB设备,目标接口选SWD,设置CPU型号等。

设置完成后,工程参数显示在左侧栏内,如下图:


板子加电后,依次选择 Target 菜单下 Unsecure Chip,Erase Chip,Program & Verify,Secure Chip即可。


4、Keil MDK打开一个工程,选项中Debug页设置如下:




助工
2014-05-21 23:09:46     打赏
8楼

LED指示灯实验


该实验考察GPIO的使用, STM32中GPIO有8种工作模式,资料见   http://blog.csdn.net/it1988888/article/details/7944314


从飞行器原理图.pdf文件中可以看到,飞行器臂上12个LED灯共同由PC13 接口控制。


int main(void)
{
       
  /* GPIOD Periph clock enable */
  int i = 0;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  /* Configure PC13 in output pushpull mode */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);


  while (1)
  {
    GPIO_SetBits(GPIOC,GPIO_Pin_13);
    for(i=0;i<10000000;i++);
    GPIO_ResetBits(GPIOC,GPIO_Pin_13);
    for(i=0;i<10000000;i++);
  }
}

 刚开始 i 值设置的太小,看不出结果,调试中能看到效果,后来改大就OK了


助工
2014-05-21 23:52:02     打赏
9楼

擦,发现自己的电脑没有串口,明儿找个USB转串口线了,看看资料先!


UART,是通用异步收发传输器(Universal Asynchronous Receiver / Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。那么它要完成什么功能呢?它的最基本功能,是串行数据和并行数据之间的转换。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。

    UART作为一种软件协议来看,是异步串口通信协议的英文缩写,它包括了RS232RS499RS423RS422RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。RS232RS499RS423RS422RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(最底层)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的数据链路层(上一层)的概念。


程序修改的crazyflie的uart.c的程序,改一下端口定义即可,留证据:







助工
2014-05-23 01:19:10     打赏
10楼

今天阅读Crazyflie的程序,发现他们的代码中移植了freeRTOS,遂想在自己的四轴中使用同样的方法。参考网上相关的成功案例( http://www.amobbs.com/thread-5255622-1-1.html , http://www.****.com/auzxj/blog/11-11/235480_4fb3b.html ),移植成功了,总结一下。


一、下载FreeRTOS的源码

FreeRTOS项目地址: http://www.freertos.org/ ,好像被墙了,自己想办法。网站左上角有个带绿色图标的download 连接,然后。。。


二、解压FreeRTOS文件

我下载了一个FreeRTOSv8.0.1.exe 的文件,自解压文件,解压之。


打开在Source/portable目錄,保留RVDS和MemMang目錄,其餘可刪除。此文件夹根据不同的编译器进行配置,我的编译器是Keil,Keil中的文件与RVDS相同,因此保留RVDS。MemMang目录配置内存管理的文件。


三、FreeRTOS文件配置


1、复制下Source文件夹到工程下Lib文件夹,并重命名为FreeRTOS。


2、复制\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h文件到工程文件夹,我是放在main.c文件的同一个目录.\User\下。


3、复制 Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md.s
至.\user\並改檔名為STM32F10x.s,因为我是用STM32F103C8,若是其他容量请自行選對應的startup files。
在 __heap_limit 段后添加

                IMPORT xPortPendSVHandler
                IMPORT xPortSysTickHandler
                IMPORT vPortSVCHandler

__Vectors区段中断向量表将SVCall Handler、PendSV_Handler、SysTick Handler改由RTOS管理,这样stm32f10x_it.c就不会影响到这三个OD要用到的中断程序。直接注释掉旧的,添加新的

                ;DCD     SVC_Handler                ; SVCall Handler
                DCD     vPortSVCHandler           ; SVCall Handler

                ;DCD     PendSV_Handler             ; PendSV Handler  
                ;DCD     SysTick_Handler            ; SysTick Handler
                DCD     xPortPendSVHandler        ; PendSV Handler
                DCD     xPortSysTickHandler       ; SysTick Handler 


4、修改Project Items,如下图


list.c,queue.c,task.c文件位于原Source目录,port.c文件位于\Source\portable\RVDS\ARM_CM3\目录,heap_2.c文件位于\Source\portable\MemMang目录。同时记得更新StartUp Group下的.s文件为刚才修改过后的.s文件。


五、配置头文件路径

添加刚才加入的FreeRTOS相关路径,



六、编译文件

根据报错信息相应修改,直到编译通过。



七、LED程序移植

在freeRTOS系统下重新加入 led 指示灯的实验程序,编译,下载,查看效果。


代码不多,贴上:

/**
  ******************************************************************************
  * @file    GPIO/IOToggle/main.c 
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    08-April-2011
  * @brief   Main program body.
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  *

	© COPYRIGHT 2011 STMicroelectronics

******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "misc.h"

#define LED0_ON()   GPIO_ResetBits(GPIOC,GPIO_Pin_13);
#define LED0_OFF()  GPIO_SetBits(GPIOC,GPIO_Pin_13);

static void prvSetupHardware( void );

/* Two demo Tasks*/       
static void vLEDTask( void *pvParameters );

void Led_Init(void);


int main(void)
{
       
  /* GPIOD Periph clock enable */
	prvSetupHardware();
	
	xTaskCreate(vLEDTask,(signed portCHAR *)"LED", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY+3, NULL );
	
	vTaskStartScheduler();

  return 0;	
}

void vLEDTask( void *pvParameters )
{
    for( ;; )
    {
    LED0_ON();
    vTaskDelay(1000/portTICK_RATE_MS);
    LED0_OFF();   
    vTaskDelay(1000/portTICK_RATE_MS);
    }
}

static void prvSetupHardware( void )
{
    SystemInit(); 
    Led_Init();
}
/*-----------------------------------------------------------*/

void Led_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );

    /*LED0 @ PA8*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init( GPIOC, &GPIO_InitStructure );    

}
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


 效果不错,以后工作就在freeRTOS下做吧。




共46条 1/5 1 2 3 4 5 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]