L3GD20陀螺仪资料
- 格式:docx
- 大小:258.25 KB
- 文档页数:6
PIXHAWK飞控概览Pixhawk飞控的技术规格、接口分配、PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法、接口图,和与其他常见飞控的区别与选择。
技术规格•处理器32位 STM32F427 ARM Cortex M4 核心外加 FPU(浮点运算单元)168 Mhz/256 KB RAM/2 MB 闪存32位 STM32F103 故障保护协处理器•传感器Invensense MPU6000 三轴加速度计/陀螺仪ST Micro L3GD20 16位陀螺仪ST Micro LSM303D 14位加速度计/磁力计MS5611 MEAS 气压计•电源良好的二极管控制器,带有自动故障切换舵机端口7V高压与高电流输出所有的外围设备输出都有过流保护,所有的输入都有防静电保护•接口5个UART串口,1个支持大功率,两个有硬件流量控制Spektrum DSM/DSM2/DSM-X 卫星输入Futaba SBUS输入(输出正在完善中)PPM sum 信号RSSI(PWM或者电压)输入I2C, SPI, 2个CAN, USB3.3 与 6.6 ADC 输入•尺寸重量 38g宽 50 mm高 15.5 mm长 81.5 mmPixhawk 的接口分配PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法Pixhawk 接口图上图中针脚1在右边串口 1 (Telem 1),串口 2 (Telem 2) ,串口 (GPS) 针脚: 6 = GND, 5 = RTS, 4 = CTS, 3 = RX, 2 = TX, 1 = 5V.选择哪款飞控? APM 、PX4,还是 PIXHAWK•APM2.5与2.6是传统ardupilot飞控的最新(也是最终)版本:APM25 与 26 概览•PX4FMU与PX4IO 是这个新飞控家族的最初两个版本:Px4FMU 概览与 Px4IO 概览•Pixhawk是根据我们的需要,结合PX4FMU / PX4IO改进而开发出的PX4飞控的单块电路板版本。
型号:L3G4200DTR
封装: LGA-16
品牌:ST
大名鼎鼎的IPhone4手机上用的就是这款传感器,L3G4200D是一个低功率的轴陀螺仪提供了三种不同的用户可选择全量表(±250 /500 /2000±±存)。
它包括一个传感元件和一个集成电路接口能够提供检测角速度的外部世界,通过一个数字接口.。
常用于
1.游戏和虚拟现实输入设备
2.运动控制与人机界面(人机接口)
3.全球定位导航系统
4.电器和机器人
注意此传感器尺寸非常小,4X4X1mm
(接口)。
该感应元件是采用专业加工过程,而集成电路接口使用一个实现技术,可以设计一个专用电路,是修剪以更好地配合感测元件特点。
该l3g4200d可在塑料栅阵列(客房)封装,提供了极好的温度稳定性和高分辨率在扩大工作温度范围(-40℃°+ 85°丙)。
特点
三选择全表(±250 /500 /2000伤害)2/数字输出接口■16比特率值数据输出■数字输出线(中断dataready)■集成的低和高通滤波器与你可选的带宽■嵌
入式自我测试■宽电源电压,2.4伏至3.6伏■低电压兼容的操作系统,1.8伏■嵌入式断电和睡眠模式■高冲击■扩展温度范围(-40℃至+ 85℃°° )。
陀螺仪知识整理与解析1、陀螺仪基础知识 (2)2、Question and answer (2)3、陀螺仪和加速度计的区别与联系 (3)4、常用芯片介绍 (3)1、陀螺仪基础知识陀螺仪:测量角速度,是角速度传感器。
时间积分后得到相对角度。
陀螺和加速度计是惯性器件,是用来测量相对惯性空间的角速度(或对于积分类型的陀螺来说是角增量)和加速度。
在三维空间中描述一个刚体运动要六轴,三轴加速度,三轴角速度。
测量角速度大部分芯片靠的是测量科特迪奥力,也就是让排水孔的水形成涡旋的力。
角速度跟角速率:速度是矢量、有方向。
而速率是标量,只有大小,帶有平均的意味。
如果采样点很快的話(dt趋于0),速度和速率的数值是一样的。
航模的陀螺仪全是角速度传感器,不管是高端还是低端。
mems陀螺仪积分很多时候造成零偏的主要原因应该是随机游走。
2、Question and answerQ:角速度传感器如果在它的测量轴上匀速转动输出是否为定值?A:是,不过首先要保证你是在匀速转动。
用过几种角速度传感器,发现匀速转动传感器,因为加了高通滤波,传感器输出的电平和静止时的电平一样,只有加速的时候电平才变动。
Q:如果在测量轴的某一位置静态输出为A,那么匀速转过45度后静止,那么此时输出是否为A?A:如果是静止测量,是如此的。
但由于频宽,通常信号有一点点滞后。
Q:用陀螺仪测角度的话,是不是对测出的角速度积分即可?网上看到有些资料说可以用陀螺仪和加速度传感器组合测角度,这种方法具体如何实现?A:理论上如此,但是由于bias、drift、scale和数值积分的误差,积分结果是会漂移的。
假设加速度计测量到重力加速度时,可以对陀螺仪校正角度,得到较为正确的结果。
但是sensor,bias、noise、scale 誤差是免不了的。
所以才將两组数据做“数据融合”,实际操作的方法很多,主流的比如“Kalman滤波”。
Q:为啥四轴要装加速度传感器和角速度传感器呢,位置传感器与角速度传感器有什么区别呢?A:物体在自由空间的运动是两种运动的组合:质心的平移+围绕质心的转动,因此,物体运动有6DOF,6个自由度:3个平移自由度+3个转动自由度。
PIXHACK 中文入门指南PIXHACK是根据PIXHAWK硬件架构平台上由CUAV设计,并有CUAV生产的一款32位开源硬件飞控,由于硬件主要架构跟pix完全相同,所以完全兼容3DR APM固件以及pix原生固件。
PIXHACK在pix原版基础上优化了供电芯片,删减不必要接口,接口做调整优化,改为前后方插线。
主要的亮点是IMU分离设计,内置小型通用减震结构,并采用了CNC一体铣成型工艺,抗干扰性还是稳定性都有质的提升。
Pixhack经过Cuav长达一年的设计,无数个版本的优化及测试,已经达到了比较稳定理想的效果:硬件参数介绍硬件参数介绍:处理器 1. 32位2M闪存STM32F427 Cortex M4,带硬件浮点处理单元主频:168MHZ,256K RAM2. 32位STM32F103备份协处理器内置传感器Pixhack 采用IMU分离设计,内置通用性减震,一般飞行器不需要做减震处理(如果震动太大及频率过高还需减震)1.L3GD20 3轴数字16位陀螺仪2.LSM303D 3轴14位 加速度/磁强计3.MPU6000 6轴加速度计/磁强计4. MS5611 高精度气压计工作环境及电压温度范围:-5~50度PM传感器工作电压2-6SPM传感器输出电压5.4V 3APWM OUT输入供电电压最高9V(支持高压舵机,而原版Pixhawk不支持高于5.5V的供电)2路电源自动冗余(PM口和PWM OUT口),PM口优先供电,出现故障自动切换到PWM OUT口供电外观尺寸主控尺寸68mmX44mmX15MM 重量:68g数据接口1. 5个UART 1个兼容高电压,2个带有硬件流控制2. 1个CAN3. Spektrum DSM/DSM2/DSM-X卫星接收机兼容输入4. Futaba SBUS兼容输入和输出5. PPM信号输入6. RSSI(PWM或者电压)输入7. I2C协议设备扩展8. 预留SPI接口9. 3.3和6.6VADC输入10. 外部MICRO USB接口11. 13个PWM/舵机输出12. 多音蜂鸣器及解锁按键 状态led 接口外围设备支持固定翼多旋翼直升机车船固件支持支持接收机类型接收机类型S-Bus, DSM2,PPM 。
螺仪上。
强烈建议使用附带的不锈钢减震片,可有效过滤震动保障飞行品质!旋翼长度大于300mm的直升机,以及所有油动直升机。
典型450级。
旋翼长度小于300mm的小型直升机。
典型200,250级。
强烈建议使用速度快于0.1s/60°的数码舵机。
启动状态上电后陀螺仪进入启动过程,过程中会保持机身静止,且方向舵需保持中立位置R5闪烁: 正在识别方向舵中立位置,持R4闪烁: 正在预热和校准传感器,持若R4常亮请保持机身静止。
飞行状态进入设置状态:设置状态在飞行状态的锁尾模式设置状态。
进入设置状态的方向舵进行,无需携带左侧的L ED表示设置左侧L ED闪烁表示正在选择设置项和调整参数值:菜单中前一个设置项后一个设置项设置项中前一个值/值-1后一个值/值+1进入和离开设置项:2秒将进入或离开设置即开始为某一设置项调整参数返回设置项菜单。
设置项时将保存设置。
电则放弃设置。
离开设置状态:3秒将离开设置状态并状态。
项中或在菜单中都可直接离设置状态。
设置状态时将自动保存设置。
电则放弃设置。
1.切换到非锁尾模式,保持发射机方向舵(需要重新安装舵臂固定螺丝)。
2.连接舵机与连杆。
调整连杆长度或舵机位置,使有大约有10°夹角。
简易安装也可使尾滑块3.设置陀螺的L imit以及调整舵臂长度,使尾舵故障排除飞机不受控的快速交替摆动(追尾,金鱼尾)。
尽可能减少机械虚位和松动:确保尾保尾连杆不弯曲。
尝试逐步降低发射机上的感度设置,直至飞机无规律的摆动。
尽可能减少飞机的震动:确保主轴、确保尾旋翼不缺损。
使用附带的滤震钢片和海绵胶安装。
若降低陀螺仪R sps设置项的值。
无法离地,飞机完全不受控的逆时针旋转。
调整陀螺仪Dir设置项。
飞机缓慢而持续的往一个方向转动。
确保发射机的TR IM设置为0。
确保陀螺仪启动时飞机静止不动。
全球最小的3轴陀螺仪L3G3250A出世IC购商城()报道:作为智能手机领域的创新技术,3轴陀螺仪在iPhone4中大放异彩。
据最新报道,iPhone4内置的3轴陀螺仪制作商意法半导体公司最近又推出新的3轴陀螺仪L3G3250A,这款产品占板空间相比上一款缩减近40%,是全球最小的3轴陀螺仪。
意法半导体在过去两年内共推出40余款陀螺仪产品,在消费电子和移动应用市场的占有率从2009年的不到1%大幅提升至2010年的30%。
其上一款产品意法半导体的L3G462A陀螺仪已经是市场上最小的3轴模拟陀螺仪,采用4x4x1mm3 超小封装。
而新产品L3G3250A的封装仅为3.5x3x1mm,占板空间由原来的的17.6 mm3 缩减至10.5 mm3,缩减幅度近40%。
以便于满足下一代游戏机、虚拟实境输入设备、运动控制人机界面(MMI)、GPS导航系统、家电以及机器人对更小占板空间的要求。
而且L3G3250A谐振频率设置在音频带宽之外,从而使其可以完全抵抗如安装在传感器附近的扬声器产生的音频噪声,以及通过印刷电路板传递的耦合机械振动,进而使新产品拥有更高的检测精度和可靠性。
意法半导体的3轴陀螺仪产品最早在IPONE4中就得到应用。
2010年,苹果公司创新性地在新产品iPhone 4 中置入“三轴陀螺仪”,让iPhone的方向感应变得更加智能,从此手机也有了像飞机一样的“感应”,能够知道自己“处在什么样的位置”。
这个功能最大的特点就是即使手机在进入隧道丢失GPS信号的时候,也可以依靠拼接陀螺仪感知的加速度方向和大小继续导航。
同时三轴陀螺仪将会与iPhone原有的距离感应器、光线感应器、方向感应器结合起来让iPhone 4更好的人机交互功。
国外一些机构还指出在苹果的另外一款新产品iPad平板电脑中本来也计划要加入这种陀螺仪设计,不过后来由于某种原因放弃了这个计划,但有可能在下一代iPad中会加入这种功能。
而意法半导体公司推出的这一技术进步对手机、平板电脑、游戏机等智能消费电子产品尤为重要,它将用于实现高精准度的手势控制和更直接的用户界面,使其更加真实,有效实现人机互动和提升用户体验,在制造商们在日益激烈的市场竞争中占据有利地位。
陀螺仪说明书型号:FT-01一、电路接口接口使用标准5P航空接头,如右图所示。
具体说明如下:接点1:+10V~+15VDC(标准12V)接点2:GND接点3:232信号输出(19200bps、8bit数据位、1bit停止位、无校验)黄接点4:232输入(用于陀螺仪校准,一般情况下不使用,19200bps、8bit数据位、1bit停止位、无校验)绿接点5:复位,低电平有效,正常工作时接3.3V或悬空二、信号输出说明每一帧数据为4个字节,其中内容如下字节数内容意义0 0xff或0xfe 0xff表示正0xfe表示负1 0xXX 角度绝对值乘以10的高8位2 0xXX 角度绝对值乘以10的低8位3 0xXX 字节0、1、2的和校验例如:角度为-385.1°时,收到数据为:FE 0F 0B 18其中:从上往下看,逆时针方向为正三、具体参数测量范围:+-300°/S分辨率:0.1°非线性度:<0.2%零位稳定性:<1°/H频率响应:100Hz四、具体注意事项1、由于陀螺仪上电自检,需要保证在上电或者复位后2S内保证陀螺仪处于静止状态才能正常工作,否则会有较大的零点漂移。
2、五、参考使用程序由于波特率为19200,每帧数据之间几乎无时间间隔,由因为一帧数据为4个字节,及每帧数据占用的发送时间约为2ms,又因为发送帧率为100Hz,两帧数据之间时间间隔为10mS,同时两帧数据之间没有数据发送的时间约为8mS,可做如下处理:申明一个4字节数据缓冲区buffer[4]和一个char型数Readtime=0,每次串口收到数据便将数据写入buffer[Readtime]并将Readtime加1,同时清零并起启动定时器,当定时器计数到t(为了确保定时器中断发生的时间为两帧数据之间的空闲时间,这里t为2mS到8mS 之间的任意数据,为了保险起见取3mS—6mS)时,从buffer[4]中读得的四个数据,再进行校验和正负判断等处理变可得到角度,并且将Readtime清零。
陀螺仪芯片意法半导体(ST)近日推出一款业界独创、采用一个感应结构检测3 条正交轴向运动的3 轴数字陀螺仪L 3 G 4 2 0 0 D 。
这种创新的设计概念大幅提升运动控制式消费电子应用的控制精度和可靠性,为设备的用户界面实现前所未有的现场感。
现有的3轴陀螺仪解决方案依赖两个或3个独立的感应结构,顶多是在同一硅基片上;而意法半导体的陀螺仪则是3轴共用一个感应结构,这一突破性概念可以消除轴与轴之间的信号干扰,避免输出信号受到干扰信号的影响。
此外,这个创新的产品架构使意法半导体的工程师将传感器与ASIC接口整合在一个4mmx4mmx1mm的超小封装内,解决现在和未来的消费电子应用的空间限制问题。
意法半导体的3轴数字陀螺仪让用户可以设定全部量程,量程范围从±250 dps ~±2000 dps,低量程数值用于高精度慢速运动测量,而高量程则用于测量超快速的手势和运动。
这款器件提供一个16位数据输出,以及可配置的低通和高通滤波器等嵌入式数字功能。
就算时间推移或温度变化,这款器件仍然保持连续稳定的输出。
内置数字输出的L3G4200D 3轴MEMS陀螺仪的设计和制造采用意法半导体销售量超过6亿支的运动传感器的制程技术。
新产品定于2010年第二季度末开始量产。
L3G4200D特性(ST)100元2010●三种可选全尺度(±250/500/2000存保计划)●I2C/SPI数字输出接口●16比特率值的数据输出●8比特温度数据输出●两个数字输出线(中断和data ready)●集成低和高通滤波器的用户可选带宽●在时间和温度上平稳●嵌入式self-test●宽电源电压,2.4 V到3.6 V●低电压兼容的IOS,1.8 V●嵌入式power-down和睡眠模式●嵌入式温度传感器●嵌入式FIFO缓存●高抗撞击能力●扩展的工作温度范围(-40 °C到+85 °C)●ECOPACK® RoHS 和“Green”认证一、寄存器1.控制寄存器CTRL_REG1(地址:20H):选择输出数据速率,带宽,X、Y、Z轴使能DR1-DR0 输出速率选择,BW1-BW0带宽选择见表CTRL_REG2(地址:21H):选择高通滤波模式和高通截止频率CTRL_REG3(地址:22H):中断使能CTRL_REG3CTRL_REG4(地址:23H):选择量程CTRL_REG5(地址:24H):FIFO使能,高通滤波使能STATUS_REG(地址:27H):状态寄存器,ZYXDA=1时,数据已准备好,可读。
Pixhawk飞行控制器概览目录 [隐藏]• 1 Pixhawk飞行控制器概览• 2 技术规格• 3 Pixhawk 的接口分配• 4 PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法• 5 Pixhawk 接口图• 6 选择哪款飞控? APM 、PX4,还是 PIXHAWK•7 PIXHAWK 系统特性•8 Pixhawk飞控系统的组成部分:•9 PX4FMU / PX4IO与PIXHAWK的比较•10 PX4FMU / PX4IO与Pixhawk的主要区别•11 连接与断开DF13接头技术规格•处理器o32位 STM32F427 ARM Cortex M4 核心外加 FPU(浮点运算单元)o168 Mhz/256 KB RAM/2 MB 闪存o32位 STM32F103 故障保护协处理器•传感器o Invensense MPU6000 三轴加速度计/陀螺仪o ST Micro L3GD20 16位陀螺仪o ST Micro LSM303D 14位加速度计/磁力计o MS5611 MEAS 气压计•电源o良好的二极管控制器,带有自动故障切换o舵机端口7V高压与高电流输出o所有的外围设备输出都有过流保护,所有的输入都有防静电保护•接口o5个UART串口,1个支持大功率,两个有硬件流量控制o Spektrum DSM/DSM2/DSM-X 卫星输入o Futaba SBUS输入(输出正在完善中)o PPM sum 信号o RSSI(PWM或者电压)输入o I2C, SPI, 2个CAN, USBo 3.3 与 6.6 ADC 输入•尺寸o重量 38go宽 50 mm;高 15.5 mm ;长 81.5 mmPixhawk 的接口分配PWM,PPM-SUM和SBUS模式下的舵机与电调的连接方法Pixhawk 接口图上图中针脚1在右边串口 1 (Telem 1),串口 2 (Telem 2) ,串口 (GPS) 针脚: 6 = GND, 5 = RTS, 4 = CTS, 3 = RX, 2 = TX, 1 = 5V.选择哪款飞控? APM 、PX4,还是 PIXHAWK•APM2.5与2.6是传统ardupilot飞控的最新(也是最终)版本:APM25 与 26 概览•PX4FMU与PX4IO 是这个新飞控家族的最初两个版本:Px4FMU 概览与Px4IO 概览•Pixhawk是根据我们的需要,结合 PX4FMU / PX4IO改进而开发出的PX4飞控的单块电路板版本。
L3GD20陀螺仪学习1.初始化L3GD20端口配置。
将端口配置为SPI通信接口。
单片机端口初始化包括I/O端口,I/O端口spi系统时钟。
以STM32F303为例配置端口如下:static void L3GD20_LowLevel_Init(void){GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;/* Enable the SPI periph */RCC_APB2PeriphClockCmd(L3GD20_SPI_CLK, ENABLE);/* Enable SCK, MOSI and MISO GPIO clocks */RCC_AHBPeriphClockCmd(L3GD20_SPI_SCK_GPIO_CLK | L3GD20_SPI_MISO_GPIO_CLK | L3GD20_SPI_MOSI_GPIO_CLK, ENABLE);/* Enable CS GPIO clock */RCC_AHBPeriphClockCmd(L3GD20_SPI_CS_GPIO_CLK, ENABLE);/* Enable INT1 GPIO clock */RCC_AHBPeriphClockCmd(L3GD20_SPI_INT1_GPIO_CLK, ENABLE);/* Enable INT2 GPIO clock */RCC_AHBPeriphClockCmd(L3GD20_SPI_INT2_GPIO_CLK, ENABLE);GPIO_PinAFConfig(L3GD20_SPI_SCK_GPIO_PORT, L3GD20_SPI_SCK_SOURCE, L3GD20_SPI_SCK_AF);GPIO_PinAFConfig(L3GD20_SPI_MISO_GPIO_PORT, L3GD20_SPI_MISO_SOURCE, L3GD20_SPI_MISO_AF);GPIO_PinAFConfig(L3GD20_SPI_MOSI_GPIO_PORT, L3GD20_SPI_MOSI_SOURCE, L3GD20_SPI_MOSI_AF);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//GPIO_PuPd_DOWN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/* SPI SCK pin configuration */GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_SCK_PIN;GPIO_Init(L3GD20_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);/* SPI MOSI pin configuration */GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_MOSI_PIN;GPIO_Init(L3GD20_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);/* SPI MISO pin configuration */GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_MISO_PIN;GPIO_Init(L3GD20_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);/* SPI configuration -------------------------------------------------------*/SPI_I2S_DeInit(L3GD20_SPI);SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_Init(L3GD20_SPI, &SPI_InitStructure);/* Configure the RX FIFO Threshold */SPI_RxFIFOThresholdConfig(L3GD20_SPI, SPI_RxFIFOThreshold_QF); /* Enable SPI1 */SPI_Cmd(L3GD20_SPI, ENABLE);/* Configure GPIO PIN for Lis Chip select */GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_CS_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(L3GD20_SPI_CS_GPIO_PORT, &GPIO_InitStructure);/* Deselect : Chip Select high */GPIO_SetBits(L3GD20_SPI_CS_GPIO_PORT, L3GD20_SPI_CS_PIN); /* Configure GPIO PINs to detect Interrupts */GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_INT1_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(L3GD20_SPI_INT1_GPIO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = L3GD20_SPI_INT2_PIN;GPIO_Init(L3GD20_SPI_INT2_GPIO_PORT, &GPIO_InitStructure);}2.陀螺仪初始化配置配置陀螺仪芯片功能和芯片初始化设置对应寄存器配置及功能参考LG3D20数据手册代码示例如下:void L3GD20_Init(L3GD20_InitTypeDef *L3GD20_InitStruct){uint8_t ctrl1 = 0x00, ctrl4 = 0x00;/* Configure the low level interface ---------------------------------------*/L3GD20_LowLevel_Init();/* Configure MEMS: data rate, power mode, full scale and axes */L3GD20_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE; //0x08 L3GD20_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARA TE_1; //0x00L3GD20_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE; //0x07L3GD20_InitStructure.Band_Width = L3GD20_BANDWIDTH_4; //0x30L3GD20_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous; //0x00 L3GD20_InitStructure.Endianness = L3GD20_BLE_LSB; //0x00L3GD20_InitStructure.Full_Scale = L3GD20_FULLSCALE_500; //0x10ctrl1 |= (uint8_t) (L3GD20_InitStruct->Power_Mode | L3GD20_InitStruct->Output_DataRate | \L3GD20_InitStruct->Axes_Enable | L3GD20_InitStruct->Band_Width);ctrl4 |= (uint8_t) (L3GD20_InitStruct->BlockData_Update | L3GD20_InitStruct->Endianness | \L3GD20_InitStruct->Full_Scale);/* Write value to MEMS CTRL_REG1 regsister addres 0x20 Control register 1 write 0x3f */L3GD20_Write(&ctrl1, L3GD20_CTRL_REG1_ADDR, 1);/* Write value to MEMS CTRL_REG4 regsister addres 0x23 Control register 1 write 0x10 */L3GD20_Write(&ctrl4, L3GD20_CTRL_REG4_ADDR, 1);}void L3GD20_FilterConfig(L3GD20_FilterConfigTypeDef *L3GD20_FilterStruct){uint8_t tmpreg;/* Read CTRL_REG2 register */L3GD20_Read(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1);tmpreg &= 0xC0;L3GD20_FilterStructure.HighPassFilter_Mode_Selection=L3GD20_HPM_NORMAL_MODE_RES; //0x00L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0;//0x00/* Configure MEMS: mode and cutoff frquency */tmpreg |= (uint8_t) (L3GD20_FilterStruct->HighPassFilter_Mode_Selection |\L3GD20_FilterStruct->HighPassFilter_CutOff_Frequency);/* Write value to MEMS CTRL_REG2 regsister addres 0x21 Control register write 0xc0*/L3GD20_Write(&tmpreg, L3GD20_CTRL_REG2_ADDR, 1);}void L3GD20_FilterCmd(uint8_t HighPassFilterState){uint8_t tmpreg;/* Read CTRL_REG5 register */L3GD20_Read(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);tmpreg &= 0xEF;tmpreg |= HighPassFilterState; //0x10/* Write value to MEMS CTRL_REG5 regsister 0x24 Control register write 0xff*/L3GD20_Write(&tmpreg, L3GD20_CTRL_REG5_ADDR, 1);}3.L3GD20配置SPI数据读、写寄存器函数读取函数L3GD20_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead) void L3GD20_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead){if(NumByteToRead > 0x01){ReadAddr |= (uint8_t)(READWRITE_CMD | MULTIPLEBYTE_CMD);}else{ReadAddr |= (uint8_t)READWRITE_CMD;}/* Set chip select Low at the start of the transmission */L3GD20_CS_LOW();/* Send the Address of the indexed register */L3GD20_SendByte(ReadAddr);/* Receive the data that will be read from the device (MSB First) */while(NumByteToRead > 0x00){/* Send dummy byte (0x00) to generate the SPI clock to L3GD20 (Slave device) */*pBuffer = L3GD20_SendByte(DUMMY_BYTE);NumByteToRead--;pBuffer++;}/* Set chip select High at the end of the transmission */L3GD20_CS_HIGH();}写L3GD20寄存器函数L3GD20_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite)void L3GD20_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite){/* Configure the MS bit:- When 0, the address will remain unchanged in multiple read/write commands.- When 1, the address will be auto incremented in multiple read/write commands.if(NumByteToWrite > 0x01){WriteAddr |= (uint8_t)MULTIPLEBYTE_CMD;}/* Set chip select Low at the start of the transmission */L3GD20_CS_LOW();/* Send the Address of the indexed register */L3GD20_SendByte(WriteAddr);/* Send the data that will be written into the device (MSB First) */while(NumByteToWrite >= 0x01){L3GD20_SendByte(*pBuffer);NumByteToWrite--;pBuffer++;}/* Set chip select High at the end of the transmission */L3GD20_CS_HIGH();}4.封装读取陀螺仪3轴数据函数将读取出来的数据进行处理计算Demo_GyroReadAngRate (float* pfData)void Demo_GyroReadAngRate (float* pfData){uint8_t tmpbuffer[6] ={0};int16_t RawData[3] = {0};uint8_t tmpreg = 0;float sensitivity = 0;int i =0;L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);/* check in the control register 4 the data alignment (Big Endian or Little Endian)*/ /* 将10位数据进行叠加并选择大、小端模式处理*/if(!(tmpreg & 0x40)){for(i=0; i<3; i++){RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i+1] << 8) + tmpbuffer[2*i]);}}else{for(i=0; i<3; i++)RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i] << 8) + tmpbuffer[2*i+1]);}}/* Switch the sensitivity value set in the CRTL4 */switch(tmpreg & 0x30){case 0x00:sensitivity=L3G_Sensitivity_250dps;//L3G_Sensitivity_500dps=360/pibreak;case 0x10:sensitivity=L3G_Sensitivity_500dps; //L3G_Sensitivity_500dps=180/pi=57.1429 break;case 0x20:sensitivity=L3G_Sensitivity_2000dps;//L3G_Sensitivity_500dps=1/4*180/pibreak;}/* divide by sensitivity */for(i=0; i<3; i++){pfData[i]=(float)RawData[i]/sensitivity; //读出数据除以量程}}后续就是自己的算法处理机判断。
干货!最全的陀螺仪基础知识详解导读:陀螺仪,又叫角速度传感器,是用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置,同时,利用其他原理制成的角运动检测装置起同样功能的装置也称陀螺仪。
陀螺仪的名字由来陀螺仪名字的来源具有悠久的历史。
据考证,1850年法国的物理学家莱昂·傅科(J.Foucault)为了研究地球自转,首先发现高速转动中地的转子(rotor),由于它具有惯性,它的旋转轴永远指向一固定方向,因此傅科用希腊字gyro(旋转)和skopein(看)两字合为“gyroscopei”一字来命名该仪器仪表。
最早的陀螺仪的简易制作方式如下:即将一个高速旋转的陀螺放到一个万向支架上,靠陀螺的方向来计算角速度,简易图如下图所示。
其中,中间金色的转子即为陀螺,它因为惯性作用是不会受到影响的,周边的三个“钢圈”则会因为设备的改变姿态而跟着改变,通过这样来检测设备当前的状态,而这三个“钢圈”所在的轴,也就是三轴陀螺仪里面的“三轴”,即X轴、y轴、Z轴,三个轴围成的立体空间联合检测各种动作,然后用多种方法读取轴所指示的方向,并自动将数据信号传给控制系统。
因此一开始,陀螺仪的最主要的作用在于可以测量角速度。
陀螺仪的基本组成当前,从力学的观点近似的分析陀螺的运动时,可以把它看成是一个刚体,刚体上有一个万向支点,而陀螺可以绕着这个支点作三个自由度的转动,所以陀螺的运动是属于刚体绕一个定点的转动运动,更确切地说,一个绕对称轴高速旋转的飞轮转子叫陀螺。
将陀螺安装在框架装置上,使陀螺的自转轴有角转动的自由度,这种装置的总体叫做陀螺仪。
陀螺仪的基本部件有:陀螺转子(常采用同步电机、磁滞电机、三相交流电机等拖动方法来使陀螺转子绕自转轴高速旋转,并见其转速近似为常值);内、外框架(或称内、外环,它是使陀螺自转轴获得所需角转动自由度的结构);附件(是指力矩马达、信号传感器等)。
陀螺仪的工作原理陀螺仪侦测的是角速度。
陀螺仪传感器L3GD20的接线图如上图,具体引脚接线情况如下:
1.VDD_IO引脚接3.3V电压
2.SCL/SPC引脚接STM32的PA5引脚
SCL为I2C的串行时钟
SPC为SPI的串口时钟
3.SDA/SDI/SDO引脚接STM32的PA7引脚
SDA为I2C的串行数据
SDI为SPI串行数据输入
SDO为三线接口的串行数据输出
4.SDO/SA0引脚接STM32的PA6引脚
SDO为SPI的串行数据输出
SA0为I2C设备地址的低位
5.CS引脚接STM32的PC13引脚
CS引脚用来选择I2C通信模式或者是SPI通信模式,CS引脚为1,高电平时,SPI处于空闲模式,I2C处于通信使能,CS引脚为0,低电平时,SPI处于通信模式,I2C处于非使能模式。
6.DRDY/INT2引脚接STM32的PB0引脚
DRDY表示数据已经准备好,INT2表示FIFO中断
7.INT1引脚悬空
INT1表示可编程中断
8.Reserved引脚接地
9.Reserved引脚接地
10.Reserved引脚接地
11.Reserved引脚接地
12.Reserved引脚接地
Reserved为厂商保留引脚
13.GND引脚接地
14.Reserved引脚通过一个耦合电容接地,在11V电压下电容最小值为1nF
15.Reserved引脚接VDD电压
16.VDD引脚接VDD电压
VDD引脚与VDD电压间要连接一个100nF和一个10uF的电容
陀螺仪传感器L3GD20的一些机械参数:
符号:FS 含义:量程用户可选择:(1)±250(2)±500(3)±2000,单位:dps,degree per second 度每秒
符号:SO 含义:灵敏度(1)±250量程时为8.75(2)±500量程时为17.50(3)±2000量程时为70,单位:mdps/digit
符号:SODR 含义:温度对灵敏度的影响:±2%,温度范围为-40C到+85C
DVOFF:零点漂移水平,(1)±250量程时为±10(2)±500量程时为±15(3)±2000量程时为±75,单位:dps
工作温度范围:-40C到+85C
陀螺仪传感器L3GD20的一些电子参数:
VDD电压范围:2.4V到3.6V,一般值为3.0V
工作温度范围:-40C到+85C
陀螺仪传感器L3GD20内部温度传感器的特性:
TSDR:温度改变时温度传感器的输出变化:-1C/digit
TODR:温度值刷新速率:1HZ
工作温度范围:-40C到+85C
专业术语:
灵敏度:一个角速度陀螺仪是用来产生一个正向输出数据的设备,这些输出数据是在围绕可能的敏感轴顺时针旋转得到的。
灵敏度表示传感器的增加值,灵敏度可以由传感器的自定义角速度来决定。
灵敏度的值在温度和时间改变时变化很小。
零点漂移水平:零点漂移是指在角速度为零时陀螺仪传感器依旧有信号输出。
在某些情况下,零点漂移是由于传感受到压力造成的,而且零点漂移的水平会因PCB曝光之后由于所受的机械压力而发生改变。
FIFO简介
陀螺仪传感器L3GD20内嵌了三个32插槽的16位数据FIFO,分别为偏航(yaw)、俯仰(pitch)、旋转(roll)三个输出通道所使用。
FIFO的存在可以是的系统持续供电,因为主处理器不需要持续的从陀螺仪传感器中调用数据,只需要在需要数据时唤醒FIFO,从FIFO中调用急需的数据。
FIFO缓冲器可以工作在五种不同的模式下:Bypass模式,FIFO模式,Stream模式,Bypass-to-Stream模式,Stream-to-FIFO模式。
每一种模式都可以通过改变FIFO_MODE位来
改变,FIFO_MODE位在FIFO_CTRL_REG寄存器中,(地址为2EH)可编程的FIFO水位标志、FIFO_empty标志、FIFO_full标志能够通过检测DRDY/INT2引脚的中断来使能,该引脚通过寄存器CTRL_REG32(地址为22H)来配置。
并且检测到的中断信息还可以在寄存器FIFO_SRC_REG中使用(地址为2FH)。
FIFO的水位标志值的大小需要由配置WTM4:0来决定,而配置WTM4:0主要由配置寄存器FIFO_CTRL_REG(地址为2EH)来实现。
FIFO的Bypass模式
在Bypass模式下,FIFO不可操作,因此FIFO保持为空。
每一个通道只有首地址可用,其他保留的FIFO槽都是空的,当新的数据可用时,老的数据被覆盖。
FIFO的FIFO模式
在FIFO模式下,从偏航(yaw)、俯仰(pitch)、旋转(roll)三个输出通道得到的数据被存储在FIFO中。
FIFO水位标志中断可以被使能(通过使I2_WMK位进入CTRL_REG3寄存器(地址为22h)),并且当FIFO被填充到特殊的水平时,FIFO的水位标志位会被提升,这个特殊的水平在寄存器FIFO_CTRL_REG(地址为2EH)的WTM 4:0位。
FIFO继续填充直到被填满为止,(一共32个槽的16位数据用来保存偏航(yaw)、俯仰(pitch)、旋转(roll)三个输出通道得到的数据)。
当FIFO满了之后,FIFO停止从输入通道采集数据。
为了从新采集数据,寄存器FIFO_CTRL_REG(地址为2EH)必须被写回到Bypass模式。
、
FIFO的Stream模式
在Stream模式,从偏航(yaw)、俯仰(pitch)、旋转(roll)三个设备来的数据被存储在FIFO中。
水位标志中断可以在FIFO模式下被使能和设置。
FIFO继续填充直到被填满为止,(一共32个槽的16位数据用来保存偏航(yaw)、俯仰(pitch)、旋转(roll)三个输出通道得到的数据)。
当FIFO被填满,并且新的数据到来之后,FIFO会抛弃旧的数据。
可编程的水位标志事件能够被使能,用来在DRDY/INT2引脚产生专用的中断,DRDY/INT2引脚通过引脚CTRL_REG3(地址为22H)来配置。
FIFO的Bypass-to-stream模式
在Bypass-to-stream模式,FIFO开始运行在Bypass模式,当触发器时间产生,(该事件与INT1_CFG寄存器(地址为30H)时间相关),FIFO开始运行在Stream模式。
、
FIFO的Stream-to-FIFO模式
在Stream-to-FIFO模式,从偏航(yaw)、俯仰(pitch)、旋转(roll)三个设备来的数据被存储在FIFO中。
水位标志中断能够通过引脚DRDY/INT2并且设置寄存器CTRL_REG3(地址为22H)的I2_WTM位来使能,而且FIFO的水位标志位在FIFO被填充到特殊的FIFO水平之后可以被提升。
该特殊的FIFO水平被存储在FIFO_CTRL_REG(2EH)寄存器的WTM 4:0位里。
FIFO继续填充直到被填满为止,(一共32个槽的16位数据用来保存偏航(yaw)、俯仰(pitch)、旋转(roll)三个输出通道得到的数据)。
当FIFO被填满,并且新的数据到来之后,FIFO会抛弃旧的数据。
当触发器时间产生(跟寄存器INT1_CFG(地址为30H)事件有关),FIFO开始工作在FIFO模式。
从FIFO中读取数据
FIFO的数据是通过OUT_X(寄存器地址为28H,29H),OUT_Y(寄存器地址为2AH,2BH)以及OUT_Z(寄存器地址为2CH,2DH)。
当FIFO工作在Stream,Trigger或者FIFO模式下时,OUT_X,OUT_Y,OUT_Z寄存器的读操作可以获得存储在FIFO中的数据。
每次从FIFO中读取的数据,最旧的偏航(yaw)、俯仰(pitch)、旋转(roll)数据被放置在OUT_X,OUT_Y,OUT_Z寄存器中。
并且单个位的读取和多个位的读取操作都可以进行,在进行多个位的读取操作时X,Y,Z在读取FIFO数据时,地址会自动增长。
当OUT_Z_H寄存器(地址为2DH)被读取之后,系统从新从寄存器OUT_X_L(地址为28H)读取信息。