套件概述
r$ y: o( R. O( @STHS34PF80 是一款非冷却、工厂校准的红外运动和存在检测传感器,工作波长在 5 µm 至 20 µm 之间。
, w) t7 A1 s5 B% s' C3 Q& q. u: S( F% t% i
STHS34PF80 传感器设计用于测量视野内物体发出的红外辐射量。该信息由 ASIC 进行数字处理,可以对其进行编程以监控运动、存在或过热状况。: R3 ]5 T. V/ u2 f7 L0 u4 `
. C0 X f$ { Q2 Z凭借其卓越的灵敏度,STHS34PF80 可以在最远 4 米的距离内检测到人体的存在,而无需光学镜头。- M5 Z- }. R) D3 @ w* X5 Q- q# s$ O
7 C+ P* a9 ? i/ g. pSTHS34PF80 采用小型 3.2 x 4.2 x 1.455(最大)mm 10 引脚 LGA 封装。. a) p3 `& O4 p5 U% d# Y* o+ {7 Q
) x- p2 U6 V" q: F$ c
% u- R; k) S2 t h: q
/ H- ]$ J' I, t/ NSTHS34PF80是一种红外传感器,可用于检测静止和移动物体的存在,以及过温条件。它使用独特的TMOS技术测量物体的红外辐射,以便在物体位于视场内时检测其存在或运动。2 D$ t: x9 `# k+ F1 [
* [4 N* H! ^3 V& i2 A0 R( w2 e
在传感器上沉积了一个光学带通滤波器,将其工作范围限制在5微米到20微米的波长范围内,使其不对可见光和其他频段敏感。
& d& V. v4 G. ]6 R3 E1 o! ~" K2 p4 x% E7 c
传感器基于一组连接在一起并作为单个感应元件运作的浮动真空热晶体管MOS(TMOS)矩阵。得益于ST独特的MEMS制造技术,实现了先进的热隔离,使传感器能够将最小的温度变化转化为电信号,然后将这些信号馈送给ASIC。
5 F: `# V9 V" v1 \- Y: [
1 R5 f! P e) h' u: G传感器分为两个部分,一个暴露于红外辐射,另一个被屏蔽。通过在两个部分之间进行差分读数,可以消除传感器自加热的影响。
4 E. a$ n2 y! c8 M- h& Y J5 e9 @; F! C. w) t7 H: M0 q& e
STHS34PF80集成了高精度温度传感器,用于测量环境温度并测量物体的精确红外辐射。" L1 ~! y* A! x9 I- D6 \3 F& S2 ~
, e8 x1 M0 J6 }6 S" `6 O4 pASIC还实现了专门的智能处理,以检测/区分静止和移动物体,并可以断言专用中断。
2 T$ X1 f) J. n7 f
4 a+ r' z6 f, V m$ o: `可用不同的输出数据速率(ODR),范围从0.25赫兹到30赫兹,以及单次测量模式。, ?( h; J% h' B; j3 S
, h, R2 @, [( d5 v$ h
STHS34PF80配备了I²C / 3线SPI接口,并采用了与SMD安装兼容的OLGA 3.2 x 4.2 x 1.455 mm 10L封装。5 u2 K& h- ]' M* O* s4 d
* _% S. y- a; n( p! k封装所保证的视场为80°。7 u6 l( h5 I9 G1 x8 U7 H4 G
3 x# H+ {' F ?6 {
5 N6 z! W2 ^8 W. p# N! \- m6 K7 H
4 i8 l$ P* z: G% @0 n+ }& R. E
& h$ D$ I5 c2 C1 ]) F+ K6 `所有功能
) P5 Y. i7 D! N● 主要特性" B2 y0 L- d- n0 ]! ^; z) ?
○ 高灵敏度红外存在和运动检测传感器
- Y" l, [0 g# v; Q) F; Q2 G ○ 对于尺寸为 70 x 25 cm² 的物体,在不使用镜头的情况下可达 4 米! S }/ ?. R: B
○ 集成硅红外滤光片3 r. W, o: e) ]# ~% k
○ SMD 友好
4 ^3 R1 E, l" [% m! B8 q ○ 能够检测静止物体
i1 ^( ?: Z! a" O ○ 能够区分静止和移动的物体0 V. K- [) k; J9 t$ d# I) Z
○ 80° 视野/ \, Q2 T+ U8 |1 i
○ 工厂校准( V$ g5 D' @; ?% j) r5 b5 H
○ 低电量
5 N) \' e) r6 T3 a8 E2 m ○ 用于存在/运动检测的嵌入式智能算法1 |3 _- h$ j6 w6 \$ `' c4 x4 H: ^
h9 c: b3 d+ S● 电气规格! f# N9 D+ a" |7 j# _
○ 电源电压:1.7V 至 3.6V
1 `9 w' s* i! @ ○ 电源电流:10μA
A& }$ D- W2 D p2 c' N& x, [ ○ 2 线 I²C / 3 线 SPI 串行接口' i! P5 s, S/ j. B0 }- P
○ 可编程 ODR(0.25 Hz 至 30 Hz)
; d1 s* ?3 k/ t' x% a# v, h4 A ○ 一击模式% i& `7 X1 p' V1 E7 J
8 O: i( D& [9 q J3 E3 R1 x3 `
● 传感规格4 A8 [% _: l% r
○ 红外灵敏度:2000 LSB/°C! m5 {# l" r6 Y x7 L8 {" @
○ RMS 噪声:25 LSB rms7 s) h! i( o$ Z6 i5 `7 W7 B" H
○ 工作波长:5 µm 至 20 µm0 f$ f; ]5 B8 e) ], S
○ 本地温度传感器精度:±0.3℃( t% x$ w" I# I: C* U: M0 R
* U3 G H, K7 g8 n& ^3 S( i" v- Q● 包装规格
* A2 l; z5 @! p1 g ○ LGA 10 引线,3.2 x 4.2 x 1.455(最大)毫米+ H% R6 @& f0 t$ g+ [; | O
○ 符合 ECOPACK 和 RoHS 标准
. t" @+ f. ^* P/ [- d% j: I9 L3 |0 k( C* a* l
接口
# z3 h$ L" R n) c u& d: i5 cSTHS34PF80模块接口的示意图如下所示,支持IIC或者SPI通讯。
" i# Y, W5 d4 i( O+ r2 f- ?+ g& c5 E+ N0 W
! Y0 I+ |0 ^. t3 {6 x7 @
- a$ y& v8 }. z# C1 f5 E' v
最小系统图 1 c F/ o% l: e( w" Q
& p) K* v1 X8 |! B2 G+ d
( m, Q/ g4 D- X5 ?* @) y1 {2 e1 y! v1 M, s. B7 C
串口配置 8 k9 |" ?( I* Q5 }6 x, T: y. T
查看原理图,PA9和PA10设置为开发板的串口。
\+ p' |. Z9 Q, q9 a# ^4 W0 M$ t3 @" m6 P( M& Z: z
9 I9 [1 p2 J( r) v% B6 P8 x2 C
" n: N. z+ D% c/ w( G' x& S- I配置串口。% C ]4 D- A; U$ \6 l) g; m3 p
: G, C$ R7 h0 {. E
& L. `( c9 V# j/ P) P9 I6 B' u' n9 ?- \! \/ d+ u
IIC配置 6 W Y8 h) M# \! v) ^' F* M4 [& j
在这个应用中,STS34PF80模块通过I2C(IIC)接口与主控器通信。具体来说,STS34PF80模块的I2C引脚连接到主控器的PB6(引脚B6)和PB7(引脚B7)两个IO口。* w- R' I. E; L- ?6 Z
$ b& S+ H5 B* T4 Q' i0 \
K$ ` F/ S& [8 N# K3 |0 M; `" t" o) s3 x7 U5 d% y, E
配置IIC为普通模式,速度为100k。: h7 Q' v9 e# H# _, i
* L) g' k+ D/ [% Y# w+ v6 C) t& w, J
0 G2 X: z+ Z. N' h/ x/ A
7 e. `8 P5 }8 W7 V( J0 x$ K+ n; P: ~IO口设置 / z9 \ a+ W" \7 v3 S/ ~' v
STS34PF80IO设置如下所示。
3 _9 Q- P. S5 b: }& h5 Q/ L在IIC模式下CS需要给个高电平。7 y5 c- F* I% A1 r
3 }0 ]' D+ f) r" U% h2 @1 s7 K
! R Y$ `. E; }0 ?4 m/ I& l
! C& ^4 n+ j3 s4 j/ Y5 O6 t官方提供IIC接线如下所示。
0 v0 { K" g, L: Q7 V" e7 I, K. f* \9 L) N/ S4 z
% I8 j' B, _1 Z! d: V5 P1 Z: Q b" X
; m/ {% b: S9 s2 F0 \/ n/ q* t
' Z3 ?, s+ d8 A' s2 Y) V需要把PA8配置为输出模式,默认高电平,配置PA7为输入模式。! J* [; m3 z1 L0 E. F7 P; T, s
+ I3 ?4 {& a* }* X; e
# p' R+ j: b4 [' B
6 |+ Z, y6 _/ _. J
串口重定向
* r7 ?, c1 [" J打开魔术棒,勾选MicroLIB- z+ b1 X5 m( P& q8 I" p
* e. d1 W5 V( o, W
* r2 u6 R5 L- h8 r! k
$ \0 d# s2 q; F# \; f) ?% R在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。
+ d% d! g* P1 r0 J. b# M# p- : w! L1 x {+ y: B/ g
- /* USER CODE BEGIN Includes */
( }. ~% ?( V5 ~. |* P' V% C5 A - #include "stdio.h"
3 F$ M+ \( f/ a$ S/ M- K e - /* USER CODE END Includes */, J. O A1 Z4 G$ G, _
复制代码 2 T, t8 h2 o/ P+ h( g: w
函数声明和串口重定向:
w) a- b; V. c" N/ o6 F4 [$ L- 3 k/ P# Z9 Y0 T, t* l( k$ g# W5 {
- /* USER CODE BEGIN PFP */
- f& f2 J+ v* H% o4 P @& h6 d2 t - int fputc(int ch, FILE *f){: m4 ~% K" j: K; n, v& S" x
- HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
: |! S. K; g& ? - return ch;
5 \+ l, O h! {$ h* z/ x7 a) |0 _4 w8 ] - }
8 _5 s& p5 Z( M9 F - /* USER CODE END PFP */
# o g# K& D6 C+ \, e0 m( t' s
复制代码
' {3 B. h- i2 S模块地址
s- d* ]' F0 j" ^7 v8 D2 _STHS34PF80模块的默认设备地址为1011010(0x5A)。设备地址是用来识别和通信特定设备的标识符。通过将VL6180模块的设备地址设置为1011010(0x5A),您可以确保与该模块进行正常的通信和控制。& Q' L7 X1 h0 J* ?& w s
/ P0 r! O6 j5 S
* _( D7 R/ x" f3 _* S Q
! H% b; q7 ^9 V' |! P2 N1 qIIC写函数
* Q& N9 ^3 H% Y7 Q/ z, N+ x2 A2 E参考例程序中对应的驱动程序为sths34pf80_write_reg(),如下所示。
8 i- I1 P# k6 m. E1 {2 p) n
% ?- c% q7 D v4 `3 h/ y; U. u
1 y* y, Z$ |2 [
& f _6 q4 Z8 j$ a8 c* `# o由上面表格可以得知,地址为101 1010(0x5A),如果是写操作,那么具体的地址为1011 0100(0xB4)。- /**
$ f# E9 i- P) q" b) Y5 B - * @brief 读取数据" v: Q7 I0 C! A6 `. q: s+ J7 J8 l
- *
3 q4 i2 h l& ^6 B( p - * @param add 模块地址
. j! x6 z$ W, ?5 n T5 o - * @param reg 寄存器地址
+ p% e3 e# `) B+ F& L4 | w& N - * @param data buffer 缓冲区9 ^) F0 @: r9 e9 o0 d0 h5 x
- * @param len 读取长度
/ r0 f N: N8 \ - * @retval ret 正常返回HAL_OK
9 S6 }! a1 b* e! \8 c( v2 c - *
7 G8 R" b7 F2 e6 A( t6 j - */8 d/ I2 h, K0 E) X' ?4 G: U" J
- uint8_t sths34pf80_read_reg(uint8_t add,uint8_t reg, uint8_t * data, uint8_t len)
0 p6 u7 T( q% K- z2 h" l: u - {
' C: A0 q0 R7 G - uint8_t ret;
9 g- X! B$ b5 {6 U0 q$ q; c& J$ ?) k1 ^ - ret=HAL_I2C_Mem_Read(&hi2c1 ,(add<<1)|1,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);9 t9 ~ _# T. X% y( h. n
- 6 A6 W7 X) G+ ?
- return ret;3 E' X- t l4 D3 d7 r3 \6 Z$ ^
- }
复制代码 . ^* ?. T" l/ U: c9 h& {
IIC读函数
) d$ t0 I7 u5 o1 ^7 h9 _参考例程序中对应的驱动程序为sths34pf80_read_reg(),如下所示。1 g( H1 U! V. q% {
) g/ {- y# E6 F/ o) h
3 t) B) ^2 x' L* S6 ^" Y' l. ?! l5 a) Z0 S2 G
由上面表格可以得知,地址为101 1010(0x5A),如果是读操作,那么具体的地址为1011 0101(0xB5)。- /**- x! g' D% |0 m+ Z6 x4 |
- * @brief 写入数据7 I Q, x- `5 e& g# T% b
- *
& l' g6 D3 ]) K - * @param add 模块地址
) P0 y* P3 b/ u - * @param reg 寄存器地址
: z9 a- a* {. K' [' N& p4 ]$ c - * @param data buffer 缓冲区( V* N4 V$ I2 S; }, Z& v
- * @param len 写入长度
6 A& m* h" G/ N/ G - * @retval ret 正常返回HAL_OK! X" Q- b$ ^: b$ j8 [
- *
+ p3 U- Z( |/ v, U3 l/ d - */
8 W# N* @) t2 t - uint8_t sths34pf80_write_reg(uint8_t add,uint8_t reg, uint8_t * data, uint8_t len): A- e4 t- _' d2 N9 A1 h% K
- {
1 `: h- L% A* N$ O" ?* k - uint8_t ret;4 Z2 |$ I% S5 X
- HAL_I2C_Mem_Write(&hi2c1 ,(add<<1)|0,reg,I2C_MEMADD_SIZE_8BIT,data,len,0xffff);: @$ `: i* k1 X5 K; s" \
- return ret;2 V9 W& I, v. ~: z) x6 p _
* a% A3 m+ n2 @- }
复制代码 & V; k! ]. ^4 d: j' W
参考程序初始化
+ e& R, O0 c4 p! X s. ~" X. h* x
& i- I& `9 G2 E5 ]
* ~3 J) S: k4 a6 P. {7 @+ z( q) ~4 X- K5 L
获取ID ' w9 B- o1 |4 }( e
参考例程序中对应的获取ID驱动程序,如下所示。
- u! \& X+ Y0 Y) B4 `- s6 P; i
/ n" u% Z7 `6 [8 n0 M1 U0 I( n1 ^* t: N+ u7 z3 ?
获取ID可以查看0x0F,读出来的值应该为0xD3。9 J: }& ]0 N, w% R
' F. n* a9 c3 e
" K6 |) V6 D& q1 l7 }2 L+ ?
8 Y9 q3 `$ [# _" S
读取函数如下所示。- /**
k3 A) z# c- b/ [ - * @brief 获取设备ID
?& ^* S) U1 s0 u O+ G - *. w( y: U8 o9 F8 v
- * @param add 设备地址
" T- {# i. L" C) L" C1 T6 @# a - * @param val 设备ID.' }9 m: p( \ v2 O+ t5 s. }& D$ o
- * @retval ret 正常返回HAL_OK7 \5 B! e9 ?& j) ^) K7 ]
- *
+ u. _7 p; [# @- F$ E. l - */8 h2 `" w2 r4 |8 P& `5 t a4 g5 }
- 5 y2 \: {; }- x. ]! F
- uint8_t STHS34PF80_getChipID(uint8_t add) G/ I2 @) m _$ E
- {0 m; ~6 m' U* a, A& t, e) ~0 R4 {
- uint8_t temp[1]={0};
4 r" |) p* d2 x0 J - sths34pf80_read_reg(add,STHS34PF80_WHO_AM_I,temp,1);
- k1 q" O( J k* p - return temp[0];
6 z) I! [9 d8 v6 U/ u - }
复制代码 ! p" t' G! a5 u4 A
@' Q0 H$ [6 o7 r3 D/ C5 j& J主函数
$ @! \' l3 V3 r0 f- d) {- /* USER CODE BEGIN 2 */
% P3 l( w4 P, Q/ e- D9 s1 _
7 t. k- O* Y. {7 t: A$ G" t- uint8_t STHS34PF80_ID =STHS34PF80_getChipID(STHS34PF80_ADDRESS);1 r" V+ J' A" T0 F; O2 U! c
- printf("STHS34PF80_ID=0x%x\n",STHS34PF80_ID);
0 p* l8 n5 R! h2 U ~ - c% p6 M7 V2 n' D* v' j! W
- /* USER CODE END 2 */
复制代码 & b3 \. W' A& m
! k% l, f0 {9 r
转载自:记帖 m* @* v2 X* L- V/ n
如有侵权请联系删除" s* K7 Q1 J2 l7 j
- R) A3 x* R7 G- g% _ n
3 B9 b; L2 A: F$ U1 L
6 }5 V- {+ d' i; f) n2 e5 w |