MMA8452Q 加速度计开发板使用指南

电子说

1.4w人已加入

描述

MMA8452Q 加速度计开发板使用指南

一、引言

Freescale 的 MMA8452Q 是一款智能、低功耗、三轴电容式微机械加速度计,拥有 12 位分辨率。它适用于任何需要感知方向或运动的项目。为了方便与小巧的 QFN 封装进行交互,我们将其集成到了开发板上。

文件下载:SEN-12756.pdf

二、教程涵盖内容

本教程旨在帮助你尽快上手 MMA8452Q,它分为几个部分来解释开发板的工作原理和使用方法:

  1. 硬件概述:介绍 MMA8452Q 集成电路本身以及我们将其集成的开发板。
  2. 示例连接:说明如何将 MMA8452Q 连接到常见的 Arduino 板。
  3. 示例代码:我们编写了一个 Arduino 库,使你的 Arduino 代码更简洁易写。本部分将展示使用该库的示例代码,并演示如何自行使用该库控制加速度计。

三、所需材料

要完成本教程,你需要以下独特的组件:

  1. MMA8452Q 开发板:这是一个很好的起点(除非你打算直接使用微小的集成电路)。
  2. Arduino 板:你可以使用任何手头的 Arduino 板,如 Arduino Uno、RedBoard、Pro、Mega 等。
  3. 330Ω 电阻:如果你使用的是 5V 微控制器,这些电阻将有助于保护 MMA8452Q 免受超出规格的电压影响。

此外,你还需要开发板和 Arduino 之间的某种互连方式,面包板和跳线是常用的组合。最后,你需要在 MMA8452Q 开发板上焊接一个连接器。如果你使用面包板连接,建议使用直插式公头引脚。

四、硬件概述

引脚功能

MMA8452Q 开发板引出了加速度计上几个最重要的引脚,各引脚功能如下: Pin Label Pin Function Input/Output Notes
3.3V Power Supply Input 电压应在 1.95 - 3.6V 之间
SDA I²C Data Signal Bi-directional 双向数据线,电压不应超过电源电压(如 3.3V)
SCL I²C Clock Signal Input 主控制时钟信号,电压不应超过电源电压(如 3.3V)
I2 Interrupt 2 Output 可编程中断,可指示数据就绪、方向改变、敲击等
I1 Interrupt 1 Output 可编程中断,可指示数据就绪、方向改变、敲击等
GND Ground Input 0V/公共电压

电压供应要求

MMA8452Q 的最大电压为 3.6V,这适用于电源和 I²C 引脚。如果你在 3.3V 系统中使用该传感器,可以直接连接;但如果你使用的是 5V 设备(如 Arduino Uno),则需要在设备之间进行电平转换。幸运的是,MMA8452Q 正常工作所需的功率并不大,在正常工作模式下,它的电流需求在 7 到 165 µA 之间。

地址选择跳线

MMA8452Q 具有可选的 I²C 地址,以防你在同一总线上运行多个 MMA8452Q 或出现地址冲突。加速度计上的“SA0”引脚可以连接到电源或地来选择地址: SA0 Voltage MMA8452Q I²C Address
0V 0x1C
3.3V (VCC) 0x1D

开发板背面有一个跳线,用于将该引脚拉高或拉低。默认情况下,跳线是断开的,这会将 SA0 引脚拉高(板的正面有一个电阻来辅助完成此任务)。如果你通过涂抹一小滴焊锡将两个焊盘连接起来,SA0 将被拉低。对于大多数只使用一个 MMA8452Q 的情况,你可以不碰这个跳线,此时 I²C 地址将为 0x1D。

五、示例连接

焊接操作

在将开发板插入面包板或连接到其他设备之前,你需要在引出引脚处焊接连接器或电线。具体焊接什么取决于你的使用方式。如果你要在面包板或类似的 0.1 英寸间距的穿孔板上使用开发板,建议在引脚处焊接直插式公头引脚(如果需要,也有长引脚可供选择)。如果你要将开发板安装在紧凑的外壳中,你可能需要直接将电线(多股或单股)焊接到引脚处。

简单连接

我们将使用 Arduino 与 MMA8452Q 进行通信并解释传感器的数据。由于使用的是 I²C 接口,我们只需要两根线(除了电源和地)。具体连接方式为:为加速度计提供电源(3.3V 和 GND),然后连接设备之间的 SCL 和 SDA 线。在每条 I²C 线上串联两个 330Ω 电阻将有助于进行一些简单的电平转换。

电平转换

由于 MMA8452Q 的最大电压为 3.6V,你需要在 Arduino 和加速度计之间进行一些电平转换。使用 Arduino 的 3.3V 电源为加速度计供电是一个好的开始,但你还需要在 SDA 和 SCL 线上添加一些保护。在上述示例连接中,我们在 SDA 和 SCL 线上使用了一对串联电阻。这种“电平转换”方法在紧急情况下可以使用,但如果你想要更可靠的电平转换设置,建议在开发板之间使用更强大的电平转换器。市面上有一些逻辑电平转换板可供选择,例如可以使用双向逻辑电平转换器在 Arduino 和加速度计之间进行连接。或者,如果你想完全跳过电平转换,可以使用 3.3V 的 Arduino Pro(或 Pro Mini),并将整个系统运行在 3.3V 下。

六、示例代码

库的安装

我们编写了一个 Arduino 库,使与 MMA8452Q 的交互尽可能简单。你可以点击链接下载该库,也可以从 GitHub 仓库获取最新版本。要安装该库,将 SFE_MMA8452Q 文件夹提取到 Arduino 草图本的库文件夹中。如果你在安装 Arduino 库时需要帮助,建议查看我们的“如何安装 Arduino 库”教程。

加载示例草图

安装 SFE_MMA8452Q 库后,重启 Arduino。然后转到“文件”>“示例”>“SFE_MMA8452Q”>“MMA8452Q_Basic”以打开示例草图。设置好开发板和串口后,将草图上传到 Arduino,然后打开串口监视器。你将开始看到加速度值滚动显示,以及一些关于传感器方向的信息。尝试移动传感器以改变这些值。如果传感器静止平放在桌子上,z 轴应感受到 1g 的加速度,而其他轴的加速度约为 0。通过旋转开发板使其他轴感受到重力的拉力来测试它们。

使用 SFE_MMA8452Q 库

在使用 MMA8452Q Arduino 库时,有一些要点需要注意。例如,“scale”参数可以是 SCALE_2G、SCALE_4G 或 SCALE_8G,“odr”变量可以是 ODR_800、ODR_400、ODR_200、ODR_100、ODR_50、ODR_12、ODR_6 或 ODR_1,分别将数据速率设置为 800、400、200、100、50、12.5、6.25 或 1.56 Hz。

读取和使用值

设置好加速度计后,你可以立即开始读取芯片输出的数据。读取和使用值分为两个步骤。首先,调用 read() 函数获取值:

accel.read(); // Update acceleromter data

调用 read() 函数后,你可以使用两组值来使用数据。从 x、y 和 z 类变量读取将返回直接从加速度计读取的有符号 12 位整数:

xAcceleration = accel.x; // Read in raw x­axis acceleration data
Serial.print("Acceleration on the x­axis is ");
Serial.println(xAcceleration);

或者,如果你想要带有物理单位的值,可以使用 cx、cy 和 cz 类变量。这些是从加速度计读取的计算后的加速度值,单位为 g:

zAcceleration = accel.cz; // Read in calculated z­axis acceleration
Serial.print("Acceleration on the z­axis is: ");
Serial.print(zAcceleration);
Serial.println(" g's");

请记住,这些变量只有在调用 read() 函数后才会更新。在开始使用加速度值之前,请确保调用了该函数。

读取方向

MMA8452Q 有许多实用的额外功能,其中之一是方向检测,它可以估计设备是处于横向模式、纵向模式还是平放状态。要从加速度计读取纵向/横向数据,使用 readPL() 函数。该函数返回一个字节,其值可能为 PORTRAIT_U、PORTRAIT_D、LANDSCAPE_R、LANDSCAPE_L 或 LOCKOUT:

byte pl = accel.readPL();
switch (pl) { 
    case PORTRAIT_U: Serial.print("Portrait Up"); break;
    case PORTRAIT_D: Serial.print("Portrait Down"); break;
    case LANDSCAPE_R: Serial.print("Landscape Right"); break;
    case LANDSCAPE_L: Serial.print("Landscape Left"); break;
    case LOCKOUT: Serial.print("Flat"); break;
}

如上述示例所示,你可以使用 if 或 switch 语句来检查加速度计的方向。

七、资源与拓展

相关文档

如果你需要更多与 MMA8452Q 相关的文档,可以参考以下资源:

  1. MMA8452Q 数据手册:包含了 MMA8452Q 的电气特性、寄存器、通信规格等大量信息。
  2. MMA8452Q 开发板原理图:MMA8452Q 开发板的 PDF 原理图。
  3. MMA8452Q 开发板 Eagle 文件:MMA8452Q 开发板的 PCB 设计文件。
  4. MMA8452Q 开发板 GitHub 仓库:与 MMA8452Q 相关的设计文件和示例代码。

拓展项目

我们非常喜欢加速度计,以下是一些使用加速度计的教程和项目,供你参考:

  1. Are You Okay? Widget:了解 Elecia 如何将 MMA8452Q 嵌入到填充动物中,创建“Are-You-OK Widget”。摇晃填充动物即可发送推文,让你的朋友知道你的情况。
  2. Getting Started with the RedBot:MMA8452Q 与 RedBot 套件一起使用,添加碰撞检测功能。
  3. Das Blinken Top Hat:在你的 LED 帽子上添加加速度计,根据头部倾斜控制闪烁模式。
  4. Simon Tilts:加速度计不是唯一能够检测倾斜的传感器。查看 Simon Tilt 游戏,它使用了一种非常巧妙的光学方法来检测六种不同的方向。
  5. Dungeons and Dragons Dice Gauntlet:你可以将加速度计嵌入到你的 D&D 护腕中,每当你摇晃手臂时就可以滚动虚拟骰子!

你在使用 MMA8452Q 开发板的过程中有没有遇到什么有趣的问题呢?或者你对哪个拓展项目最感兴趣呢?欢迎在评论区分享你的想法。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分