ST公司推出的一系列DISCOVERY开发板中,STM32F4 Discovery是基于ARM CORTEX-M4内核的一款入门级开发套件。下面将简单介绍基于这块开发板的加速度传感器信息获取。注意:On market, there are 2 versions of STM32F4-Discovery board. First release had LIS302DL (old board) and new release (current) has LIS3DSH device. LIS3DSH has 5 selectables full scales (2/4/6/8/16G), old LIS302DL has only 2 (2.3/9.2G). 即市面上有两种开发板:MB997A的MEMS是长方形的LIS302DL,MB997C的MEMS正方形的LIS3DSH。官方自带的MEMS例程中只支持老版的LIS302DL,但两个版本除了性能和寄存器上存在一些差异,在Discovery PCB板上的引脚都是一样的。
- LIS3DSH三轴加速度传感器
LIS3DSH是ST公司推出的低功耗、高性能并且内置有限状态机的三轴高分辨率加速度传感器,可支持1.7~3.6 V的宽输入电压,有±2g/4g/±8g/±16g不同量程范围,1个集成的FIFO(先入先出)缓冲存储区块,16位的数字输出,工作温度范围为-40~+85 ℃,能够提供稳定而精确的测量数据。输出接口采用工业标准的I2C/SPI串行接口,可以实现*落体检测、振动监测与补偿、步行检测等一系列涉及运动状态变化的应用
LIS3DSH与STM32接线原理图如下图所示,SDI(MOSI)、SDO(MISO)、SPC(SCK)连接到STM32的SPI1上,CS作为片选信号连到PE3引脚。传感器还有两个可编程中断源INT1和INT2,可以在某轴的加速度超过设定阈值或是检测到*落体事件时产生中断信号,分别将其连接到单片机PE0、PE1引脚。
其内部功能结构如下图所示:
LIS3DSH内置两个有限状态机,可以运行用户自定义的程序(Each state machine allows implementing gesture recognition in a flexible way, free-fall,wake-up, 4D/6D orientation, pulse counter and step recognition, click/double-click,shake/double-shake, face-up/face-down, turn/double-turn)。这些程序由一系列指令组成,这些指令确定了状态转变。对状态n来说可以转变到状态(n+1)或是reset state,当RESET条件为真时,就转变到reset state;当NEXT条件为真时,就转变到下一个状态。当到达output/stop/continue状态时,会产生一个中断。
Each state includes NEXT/RESET conditions. The RESET condition is defined in the MSB part while the NEXT condition is defined in the LSB part of the ST1_X and ST2_X registers.As shown below the RESET condition is performed first, the NEXT condition is performed only when the RESET condition is not satisfied. When both conditions (NEXT and RESET) are not satisfied, the state machine waits for a new sample and starts the evaluation again in the same state.
- FIFO
LIS3DSH内置了FIFO用于存放每个轴的加速度数据,FIFO有六种运行模式:
1. Bypass mode:这种模式下
2. FIFO mode
3. Stream mode
4. Stream-to-FIFO mode
5. Bypass-to-Stream mode
6. Bypass-to-FIFO mode
- 寄存器
在读取加速度信息之前需要先对传感器进行配置,比如量程、传输速率、工作模式等。来看第一个相关的寄存器CTRL_REG4(20h)
其中ODR[3:0]控制输出速率和工作模式,ODR[3:0]全为0时进入省电/低功耗模式(上电启动后默认进入省电模式,在该模式下除了I2C/SP通信接口外,绝大多数内部模块处于关闭状态以降低功耗。The content of the configuration registers is preserved and output data registers are not updated),具体情况见下表。Xen、Yen、Zen分别为XYZ轴加速度采集使能,默认全部使能。
OUT_T (0Ch)为一个8位温度寄存器,温度值由补码表示,分辨率为1LSB/度,00h表示25摄氏度。
WHO_AM_I(0Fh)为一个8位设备标识寄存器,寄存器中的内容始终为0x3F。
OFF_X (10h), OFF_Y (11h), OFF_Z (12h)分别为XYZ轴的8位偏移补偿寄存器,有补码表示,默认值为0x00。Final acceleration output value is composed as:
Output(axis) = Measurement(axis) - OFFSET_x(axis) * 32 (由于8位补偿值乘了32,因此每个轴的补偿值为-4095~4096LSB)
参考:
http://www.st.com/content/st_com/en/products/mems-and-sensors/accelerometers/lis3dsh.html
https://stm32f4-discovery.net/2014/09/library-35-lis302dl-or-lis3dsh-accelerometer/