在无人机系统与地面站通信过程中,机载陀螺仪姿态数据的高速产生与外部相对低速的无线数据模块传输的矛盾日益突出,严重制约着无人机的发展。针对这一问题,采用FPGAFIFO作为高速数据缓冲,提出一种基于FPGA内建FIFO的无人机陀螺仪前级通信接口。通过高速异步FIFO缓冲,将无人机陀螺仪姿态数据经由FPGA准确无误地发送给地面站,显著提高数据传输质量,实现了高速芯片与低速设备之间的通信。整个设计在实际应用中效果良好,数据稳定可靠,满足了低误码率与高稳定性的要求,以及无人机与地面站高速通信的需求,有着广阔的市场应用前景。
无人机系统对于地面站发送的控制信号以及飞行器传回的姿态数据有着极高的实时性、可靠性与稳定性要求,这对无人机通信系统设计提出了新的挑战。对于采用 ARM作为微处理器的无人机系统来说,系统往往需要协调基于ARM处理器的高速陀螺仪模块与相对低速的外部无线数据传输模块间的工作。在通信高稳定性与低误码率的要求下,处理器不得不花时间运行空操作来等待外部相对低速的传输模块完成一帧数据的收/发。由于等待所浪费的处理器运算周期无形中降低了整个飞控系统的实时性,进而带来许多潜在的不稳定因素。本设计结合无人机系统发展需求,采用FPGA FIFO作为高速数据缓冲,提出一种基于FPGA内建FIFO的无人机陀螺仪前级通信接口。通过高速异步FIFO缓冲,将无人机陀螺仪姿态数据经由 FPGA准确无误地发送给地面站,保证了传输质量,架起了高速芯片与低速设备之间沟通的桥梁。
FPGA内建FIFO的基本工作原理
FIFO即先进先出队列,采用环形存储电路结构,是一种传统的按序执行方法。先进入的指令先完成并引退,随后才执行第二条指令,是一种先进先出的数据缓存器。根据FIFO的读写时钟频率是否相同,可将FIFO分为同步FIFO与异步FIFO。FIFO的应用可以很好地协调不同时钟、不同数据宽度数据的通信,满足高/低速时钟频率要求。与普通存储器相比,FIFO没有外部读写地址线,使用方便。
采用FPGA异步FIFO连接基于ARM处理器的高速无人机陀螺仪模块与相对低速的无线数据传输外设。从硬件的观点来看,FIFO实质上就是一块数据内存。异步FIFO采用2个时钟信号控制其读写操作,分别为写时钟(wrclk)和读时钟(rdclk)。一个用来写数据,即将数据存入FIFO;另一个用来读数据,即将数据从FIFO中取出。与FIFO操作相关的有两个指针:写指针指向要写的内存部分;读指针指向要读的内存部分。FIFO控制器通过外部的读写信号控制这两个指针移动,并由此产生FIFO空信号或满信号。读写时钟相互独立设计,有效地保证了FIFO两端数据的异步通信。
基于ARM的无人机陀螺仪接口结构
由于机载燃油和电能储备的制约,无人机载设备要求小巧轻便,能效比高,因此对芯片的选型及电路结构提出了较高的要求。综合稳定性、数据精度、工作温度、封装体积以及能耗等各方面因素,对无人机陀螺仪传感器经行严格筛选,确定了所示的陀螺仪方案。无人机陀螺仪的主控芯片选用ARM 32 bit CortexTM M3内核的STM32F103T8处理器。其内建64 KB的闪存存储器和20 KB的运行内存,以及7通道的DMA、7个定时器、2个UART端口等。通过板载的8 MHz晶体和STM32内部的PLL,控制器可以运行在72 MHz的主频上,为姿态解算提供强大的硬件支持。
三轴加速度与三轴角速度传感器采用Invensense公司的MPU-6050单芯片方案,此芯片为全球首例整合性6轴运动处理组件,相比其他多芯片实现方案,免除了整合陀螺仪与加速度器轴间差的问题,大大减少了封装空间。三轴磁力计采用Honeywell公司的HMC5883L)芯片,此芯片内部采用先进的高分辨率HMC188X系列磁阻传感器与行业领先的各向异性磁阻技术(AMR),具有轴向高灵敏度和线性高精度的特点,测量范围从毫高斯到8高斯,稳定可靠。气压传感器采用博世公司的BMP180芯片,该芯片性能卓越,绝对精度可以达到0.03 hpa,并且功耗极低。传感器采用强大的7 pin陶瓷无引线芯片承载(LCC)超薄封装,安装使用方便。
FPGA FIFO与陀螺仪的连接
结合无人机ARM陀螺仪的特点,为了适应过程的复杂性,实现操作的简便性,设计选用Altera公司的CycloneII系列芯片EP2C8Q208C8N,在QuartuesII平台上进行Verilog代码设计,使用Altera公司提供的FIFO IP核。此方案稳定高效,易于开发。
陀螺仪与FIFO及FPGA的连接
处理器采集各传感器信号,在ARM内部进行姿态解算,进而得到俯仰角、横滚角、航向角、气压、高度和温度信息。为了及时将解算得到的数据发送回地面站,处理器控制写请求信号wrreq和写时钟wrclk将这些数据高速写入FIFO,然后回到飞行控制程序,进行下一周期的姿态解算。FIFO在数据写满后,写满标志位wrfull会置高电平,ARM处理器通过检测写满标志位的状态来判断是否继续写入数据。与此同时,在FPGA中通过检测所读取FIFO是否为空标志位rdempty来判断是否继续读取数据。读空标志位为低电平代表FIFO中有数据,可以读取,则配合读请求信号rdreq和读时钟rdclk及时读取数据,直到将数据全部读出,标志位变为高电平,此时FIFO中已经没有数据。
关键字:STM32 无人机 陀螺仪
引用地址:
基于STM32的无人机陀螺仪应用详解
推荐阅读最新更新时间:2024-03-16 15:07
意法半导体发布32美分STM32超值微控制器
基于ARM® Cortex™-M0的STM32F030超值系列微控制器让成本敏感型应用受益于32位优势 中国, 2013年7月11日 —— 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布最新的STM32F030超值系列微控制器。批量订货最低价仅为0.32美元,STM32F030是低预算项目的理想选择,同时还让设计人员有机会使用型号齐全且软硬件兼容的32位微控制器产品组合,从而提升应用性能,扩大产品系列。 全新STM32F030超值系列基于48MHz的ARM® Cortex™-M0处理器内核。与同类竞争产品不同,STM32F030虽然只有8位
[单片机]
【STM32外设ADC细节】-注入组与规则组的不同点
参考文档:RM0008 Reference manual.pdf(STM32参考手册) 参考章节: 11.3 AD functional description 11.3.3 Channel selection 11.3.9 Injected channel management 一、注入组与规则组的不同点如下: 1、通道数不同 ADC模块有16个多路通道,可以把转换组织成2个组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 规则组最多16个转换组成。而注入组最多4个转换组成。 2、注入组通道可以打
[单片机]
STM32学习总结之启动文件
学习内容: 学习新建工程之启动文件 用KEIL5 新建一个工程,把工程放在一个事先建好的文件夹内,工程命名为REG 后保存。然后在工程目录下添加启动文件:startup_stm32f10x_hd.s,该文件可以从KEIL5 安装目录找到,也可以从ST 库里面找到,然后把启动文件添加到工程里面。 启动文件很重要单片机运行前,需要检查硬件,启动硬件使硬件唤醒。 启动文件的作用: STM32 的启动文件主要实现了:1、设置初始SP 。2、设置初始PC=Reset_Handler3、设置向量表入口地址,并初始化向量表。4、调用库函数SystemInit,把系统时钟配置成72M,SystemInit 在库文件system_stm32
[单片机]
英国企业研制载客无人机 伦敦至机场仅需12分钟
据英国《华商报》报道,英国一家企业计划于2018年年底试飞载客无人机,如果成功的话,从伦敦市中心前往希思罗机场仅需12分钟。 这款型号为Y6S的无人机由“自动飞行”公司制造,设计搭载2名乘客。公司创始人马丁·沃纳介绍,Y6S能够在129公里距离内遥控飞行,最高飞行高度457米,最快时速113公里,只要12分钟就能从拥挤的伦敦闹市区抵达希思罗机场,而这段路程开车通常需要1小时。 据报道,这款无人机由牛津郡的工程师研发,预计于2018年3月公开“亮相”,并在年底进行试飞。每架售价为2万英镑。 虽然英国上空任何无人机的飞行都需得到英国民航局批准,但沃纳已经构想,让Y6S成为伦敦城市交通的一部分。他称,届时只要花25英镑的票价,就可以在1
[机器人]
stm32使用J-LINK下载
一、硬件连线 二、软件设置 MDK5 1.修改debug,改为J-LINK/J-TRACE Cortex 点击setting,打开Flash Download,根据内存修改Programming 2.返回上一层,修改Utilities 我这里使用了默认配置
[单片机]
嵌入式-stm32学习:按键检测
bsp_key.h #ifndef __KEY_H #define __KEY_H #include stm32f4xx.h //引脚定义 /*******************************************************/ #define KEY1_PIN GPIO_Pin_0 //GPIO引脚号 #define KEY1_GPIO_PORT GPIOA //GPIO端口A #define KEY1_GPIO_CLK RCC_AHB1Periph_GPIOA //GPIO端口时钟 #define KEY2_
[单片机]
STM32库函数配置
stm32 固件库V3.0以上的版本,main等源文件中不再直接包含stm32f10x_conf.h,而是stm32f10x.h,stm32f10x.h则定义了启动设置,以及所有寄存器宏定义,此文件中需要注意的有: 使用V3.0以上版本固件库的方法如下: 1.选择device(配置函数STM32F10x.h,具体配置方法如下) 在STM32F10x.h中有如下代码: #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (S
[单片机]
【STM32笔记】RCC配置函数
void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //使能外部晶振 RCC_HSEConfig(RCC_HSE_ON); //等待外部晶振稳定 HSEStartUpStatus = RCC_WaitForHSEStartUp(); //如果外部晶振启动成功,则进行下一步操作 if(HSEStartUpStatus==SUCCESS) { //设置HCLK(AHB时钟)=SYSCLK RCC_HCLKConfig(RCC_SYSCLK_Div1);
[单片机]