电子说
Freescale 的 MMA8452Q 是一款智能、低功耗、三轴电容式微机械加速度计,拥有 12 位分辨率。它适用于任何需要感知方向或运动的项目。为了方便与小巧的 QFN 封装进行交互,我们将其集成到了开发板上。
文件下载:SEN-12756.pdf
本教程旨在帮助你尽快上手 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。通过旋转开发板使其他轴感受到重力的拉力来测试它们。
在使用 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 xaxis acceleration data
Serial.print("Acceleration on the xaxis is ");
Serial.println(xAcceleration);
或者,如果你想要带有物理单位的值,可以使用 cx、cy 和 cz 类变量。这些是从加速度计读取的计算后的加速度值,单位为 g:
zAcceleration = accel.cz; // Read in calculated zaxis acceleration
Serial.print("Acceleration on the zaxis 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 相关的文档,可以参考以下资源:
我们非常喜欢加速度计,以下是一些使用加速度计的教程和项目,供你参考:
你在使用 MMA8452Q 开发板的过程中有没有遇到什么有趣的问题呢?或者你对哪个拓展项目最感兴趣呢?欢迎在评论区分享你的想法。
全部0条评论
快来发表一下你的评论吧 !