• 大小: 0.47M
    文件类型: .pdf
    金币: 1
    下载: 0 次
    发布日期: 2021-03-27
  • 语言: 其他
  • 标签: 其他  

资源简介


基于3轴加速度计ADXL345的跌倒检测应用
应用笔记 AN-1023 中断 DC coupled作方式或者 AC coupled作方式。其区别在 ADXI345具有两个可编程中断引脚,INT和INT2,共计 于, DC coupled工作方式下,每个采样点的加速度值将直 八个中断源:DATA_ READY、 SINGLE_TAP、 接与门限( THRESH ACT或 THRESH INACT进行比较,来 DOUBLE_TAP、 Activity、 Inactivity、 FREE FALL、 Water 判断是否发生中断;而 AC coupled工作方式下,新的采样 mark和 Overrun。各个中断均可独立使能或禁用,只需设 点将以之前的某个采样点为参考,用两个采样点的差值与 置 INT ENABLE寄存器中的相应位即可,通过Ⅰ NT MAP寄 门限( THRESH ACT或 THRESH INACT)进行比较,来判断 存器的相应位来选择映射INT1引脚或IT2引脚。 是否发生中断。 AC coupled工作方式下的 Activity检测,是 DATA READY 选择检测开始时的那一个采样点作为参考,以后每个采样 当有新的数据产牛时, Data Ready中断置位;当没有新的 点的加速度值都与参考点进行比较。如果它们的差值超过 数据时,Data_ Ready中断清除 勹限( THRESH ACT,则 Activity中断置位。 AC coupled工 作方式下的 nativity检测,同样要选择一个参考点。如果 SINGLE TAP 新釆样点与参考点的加速度差值超过门限 当加速度值超过一定门限( THRESH TAP)并且持续时间小 ( THRESH INACT),参考点会被该采样点更新。如果新采 于一定时间范围(DUR)的时候, Single_Tap中断置位。 样点与参考点的加速度差值小于门限( THRESH INACT) DOUBLE TAP 并且持续超过一定时间( TIME INACT),则 Inactivity置位。 当第一次 Single Tap事件发生后,在一定时间( LATENT之 FREE FALL 后,并在·定时问( WINDOW)之内,又发生第二次 当加速度值低于一定门限( THRESH FF)并且持续超过一定 Single_tap事件时, Double_Tap中断置位。 时间( TIME FE)时, Free Fal中断置位。 图3所示为有效的 SINGLE TAP及 DOUBLE TAP两种中 与 Inactivity中断的区别在于, Free fall中断主要用于对自 由落体运动的检测。因此,Ⅹ、Y、Z轴总是同时被使能或 禁用;其时间设定也比 Inactivity中断中要小很多, FIRST TAP SECOND TAP TIME FF可以设定的最大值为1.28;而且 Free fal中断只 能是 DC coupled工作方式 THRESHOLD (THRESH_TAP) Watermark 当FIFO里所存的采样点超过定点数( SAMPLES)时, IME LIMIT FO Watermark中断置位。当HIFO里的采样点被读取,使得其 TAPS (DUR): 中保存的采样点数小于该数值( SAMPLES)时, Watermark LATENCY TIME WINDOW FOR TIME SECOND TAP (WINDoW 中断自动清除 LATEN T) 需要指出的是,ADⅹL345的FIFO最多可以存储32个采样点 SINGLE T DOUBLE TAP INTERRUPT INTERRUPT (X、Y、Z三轴数值〕,且具有 Bypass模式、普通FIFO模 式、 Strea模式和 Trigger模式,一共4种工作模式。IIre 图3. SINGLE TAP和 DOUBLE TAP中断 功能也是ADXL345的一个重要且十分有用的功能。但是本 文后面给出的解决方案中,并没有使用到FIFO功能,所 Activi 以,在此不做详细介绍。有关FIFO的更多详情,请参阅 当加速度值超过一定门限( THRESH ACT)时, Activity中断 ADXL345数据手册。 置位。 Overrun Inactivity 当有新采样点更新了未被读取得前次采样点时, Overrun 当加速度值低于一定门限( THRESH INACT并且持续超过 中断置位。 定时间( TIME INACT)时, Inactivity中断置位。 TIME INACT可以设定的最长时间为255 Overrun功能与FIO的工作模式有关,当FIFO工作在 Bypass模式下,如果有新采样点更新了 DATAX、 DATAY 需要指出的是,对于 Activity和 INactivity中断,用户可以针 和 DATAZ寄存器里的数值,则 Overrun中断置位。当FIFO 对X、Y、Z轴来分别进行使能或禁用。比如,可以只使能 匚作在其他三种模式下,只有FIFO被存满32点时, X轴的 Activit中断,而禁用Y轴和Z轴的 activity中断。 Overrun中断才会置位。FIFO里的采样点被读取后, 另外,对于 Activity和 Inactivity中断,用户还可以自由选择 Overrun中断自动清除。 Rev.0 Page 3 of 28 AN-1023 应用笔记 跌倒过程中的加速度变化特性 VECTOR SUM 关于跌倒检测原理的主要研究集中于人体跌倒过程中的加 768 X-AXIS YAXI 速度变化特性。图4至图7分别表示下楼、上楼、坐下及从 512 Z-AXIS 椅子上站起这四种运动中的加速度变化曲线。(跌倒检测器 256 戴在被测人的身上。) 9y 1024 VECTOR SUM 768 X-AXIS Y-AXIS -512 512 Z-AXIS 256 1024 当 201 SAMPLES(50 s 图7站起过程巾的加速度变化曲线 512 1024 1: WEIGHTLESSNESS VECTOR SUM 768 2: IMPACT X-AXIS 768F 3: MOTIONLESS Y-AXIS 4: INITIAL STATUS Z-AXIS 101151201251 301 351 SAMPLES (50/s) 512 图4.下楼过程中的加速度变化曲线 1024 VECTOR SUM 768 X-AXIS -AXIS 512 Z-AXIS G256 u 101 SAMPLES (50/ s) -256 图8.跌倒过程中的加速度变化曲线 由于老年人的动作相对较慢,因此,在图4和图5所示步行 768 运动中,加速度变化并不是很明显。图8表示跌倒过程中 1024 51101151201251301351401 的加速度变化曲线。通过比较图8与图4至图7四幅图,可 SAMPLES (50/s) 以发现,跌倒事件有四种关键特性。这四种特性可用作跌 图5.上楼过程中的加速度变化曲线 倒检测的标准,图8中以方框标示,下面逐一详细解释, 1024 VECTOR SUM 失重 768 X-AXIS 失重现象会发生在跌倒之初。这种现象在自由跌倒过程中 512 Z-AXIS 尤其显著,加速度的矢量和降至近0g的水平。持续时间取 G256 决于自由跌倒的高度。尽管正常跌倒过程中的失重现象不 如自由跌倒过程中显著,但其加速度矢量和同样小于1g(正 常情况下一般大于1g)。因此,这可以作为跌倒状态的第 256 个判断依据。可以由ADXL345的rea中断来检测。 512 768 1024 151 201 SAMPLES (50/s) 图6.坐下过程中的加速度变化曲线 Rev. 0 Page 4 of 28 应用笔记 AN-1023 撞击 系统的典型电路连接 发生失重现象后,人体与地面相撞击;在图8的加速度曲 ADⅪI.345与MCU之间的电路连接非常简单。在本应用笔记 线中,该现象表现为剧烈冲击。这种冲击由ADXL345的 中,我们利用ADXL345和ADuC7026微控制器创建了一个 ctivity中断检测。因此,确定跌倒的第二个依据是在 测试平台。图9所示为ADXL345与ADuC7026之间的典型连 FREE FALLE中断之后出现的 Activity中断。 接。其中,ADXI345的引脚连接高电平,ADXL345工作于 静止 I2C模式。SDA和SCL分别为I2C总线的数据和时钟,与 一般地,跌倒并撞击地面后,人休无法立即站起来。人休 ADuC7026的对应引脚相连。ADuC7026的一个GPIO连接 会在短时间内保持静止状态。在图8的加速度曲线中,表 至AD)XL345的 SDOJALT ADDRESS引脚,以选择ADXL345 示为一段平线,由ADXL345的 Inactivity中断检测。因此, 的IC地址。ADXL345的INT1引脚连接至ADuC7026的一个 确定跌倒的第三个依据是在 Activity中断之后出现 Activity IRQ输入端,以产生中断信号。其他的单片机或者处理器 中断。 都可以采用与图9类似的电路与ADXL345进行连接。。为 获得更高数据速率,ADXL345也可工作于SPI模式。对于 与初始状态比较 关丁SPI连接的示例电路,请参阅ADXL345数据手册。 跌倒后,人体会翻转,因此三个轴的加速度与跌倒前的初 始状态有所不同。如果将跌倒检测器戴在人体上以取得加 速度的初始状态,则可在 Inactivity中断之后读取三个轴的 加速度数据,然后将采样数据与初始状态进行比较。因 此,确定跌倒的第四个依据是采样数据与初始状态之差是 DD/0 否超过一定阙值(如0.7g) SDA SDA/SDI/SDIO SCL/SCLK 这四个依据共同构成整个跌倒检测算法,在此基础上,系 GPIO SDO/ALT ADDRESS 统可根据跌倒状态报警。中断间的时间间隔必须在一定范 GND 围内。正常情况下, FREE FALL中断(失重)与 Activity中断 ADuC7026 ADXL 345 (冲击)之间的时间间隔不应过长,除非从极高处跌落。类 图9.ADXL345与MCU之间的典型电路连接 似地, Activity中断(冲击)与 nativity中断(静止)之间的时间 间隔也不应过长。“利用ADXL345简化跌倒检测算法”部分 利用ADXL345简化跌倒检测算法 给出了个实例及组合理的值。相关的中断检测阈值和 本节将给出以上解决方案的具体算法实现 时间参数可根据需要灵活设置。另外,如果跌倒导致昏迷 表1列出了各寄存器的功能以及本算法中用到的值。有关 等严重后果,人体保持静止的时间会更长。这种状态仍然 各寄存器位的详细定义,请参阅ADXL345数据手册。 可以通过 Inactivity中断检测到。因此,如果跌倒后检测到 Inactivity状态持续一定长的时间,则可发紧急报鳘。 请注意,表1中所示的部分寄存器有两个设置值。这表示 在算法中会切换使用这两个数值,以实现不同的检测目 的。算法流程图如图10所小。 Rev.0 Page 5 of 28 AN-1023 应用笔记 表1ADKL345寄存器功能描述 十六进制十进制 算法中的 地址 地址 寄存器名称 类型 复位值描述 设置 算法中设置的功能 000 DEVID 只读 0×E5器件D 只读 0X01至1至28 Reserved 保留 保留,不要操作保留 OxIC OxI D THRESH TAP 读/写 0×00Tap的门限 不使用 OxIE 30 OFSX 读/写 000X轴失调 0×06 补偿X轴失调,通过初始化 校正获得 OxlF OFSY 读/写 0×00Y轴失调 OxF9 补偿Y轴失调,通过初始化 校正获得 0X20 OFSZ 读/写 0×0z-轴失调 OXFO 补偿Z轴失调,通过初始化 校正获得 021 33 DUR 读/与 0x00Tap的持续时间 不使用 0X22 34 Latent 读/写 0×00Tap的延迟时间 不使用 0x23 Window 读/写 0×00Tap的时间窗 不使用 THRESH ACT 读/写 0x00 Activity的门限 0×200×08设置 Activity的门限为29或05g 0x25 37 THRESH INACT读写 0×00 nativity的门限 0x03 设置 activity的门限为01875g 0x26 38 TIME INACT 读/写 0×001 nativity的时间 0x02/0x0A设置 activity的时间为2或105 Ox27 ACT INACT CTL读/写 0×00 Activity/, nativity0xF(×F使能X、Y、Z三轴的 Activity和 使能控制 lactivity功能,其中 Inactivity 为 AC coupled模式, Activity为 DC coupled或 AC coupled模式 0×28 THRESH FF 读/写 Free-Fal0门限 0×0C 设置Free-Fa门限为0.75 0x29 4 TIME FF 读/写 0×00 Free-Fall时间 0x06 设置 Free-F叫l时间为30ms OX2A 42 TAP AXES 读/写 0x00 Tap/Double Tap 不使用 使能控制 Ox2B ACT TAP STATUS只读 0x00 Activity/Tap 只读 中断轴指示 Oxc BW RATE 读/写 0×0A采样率和功耗模式0×0A 设置采样率为100Hz 控制 OX2D POWER CTL 读/写 0×00工作模式控制 0x00 设置为正常工作模式 Ox2E 46 INT ENABLE 读/写 0x00中断使能控制 OxIC 使能 Activit!y, Inactivity、 Free-F叫中断 0×2F 47 INT MAP 读/写 0×00中断映射控制 0x00 将所有中断映射到T1引脚 48 INT SOURCE 只读 0×00中断源指示 只读 0X31 DATA FORMAT读/写 0×00数据格式控制 OXOB 设置为+-16g测量范围,13bit 右对齐模式,中断为高电平触 发,使用l2C数据接口 50 DATAXO 只读 0×00X轴数据0 只读 51 DATAXI 只读 0×00X轴数据 只读 0X34 52 DATAYO 只读 0×00Y-轴数据0 只读 X35 53 DATAYT 只读 0x00Y-轴数据1 只读 0X36 54 DATAZO 只读 0×00z轴数据0 只读 0x37 55 DATAZI 只读 0x00z-轴数据1 只读 0X38 FIFO CTL 只读 0x00FFO控制 不使用 0x39 57 FIFO STATUS 只读 0×00FFO状态 Rev. 0 Page 6 of 28 应用笔记 AN-1023 INITIALIZATION FREE FALL INTERRUPT ASSERTED? YES YES CONTINUOUS FREE FALL DETECTED? YES TIMEOUT? NO ACTIVITY INTERRUPT ASSERTED? YES TIMEOUT? YES No No∠ INACTIVITY INTERRUP ASSERTED? STABLE STATUS IS DIFFERENT FROM INITIAL STATUS YES GENERATE FALL ALERT ACTIVITY INTERRUPT YES ASSERTED? NO INACTIVITY INTERRUPT ASSERTED? YES GENERATE CRITICAL GENERATE FREE-FALL ALERT CRITICAL ALERT 图10.算法流程图 Rev.o Page 7 of 28 AN-1023 应用笔记 算法中的各中断门限和相关时间参数如下 中断为 ACcoupled工作模式。把 THRESH INACT设为 1.初始化后,系统等待 FREE FAI中断(失重)。 THRESH FF 0.1875g,把TMF_ INACT设为10s, Inactivity中断为 设为075g, TIME FF设为30ms。 AC coupled工作模式。也就是说,如果在10s之内,人 体一直没有任何动作,则会产生 Inactivity中断,使系 2. FREE FALL中断产生之后,系统开始等待 Activity中断 统给出一个严重报警。而在此期间一旦人体有所动 (冲击)。 THRESH ACT.设为2g, Activity中断为Dc 作,则会产生 Activity中断,从而结束整个判断过程 coupled工作模式。 8.木算法还可以检测出人体从较高的地方跌落。如果 3. FREE FALL中断(失重)与 Activity中断(冲击)之间的时 Free fal中断连续产生且之间的间隔小于100ms,可以 间间隔设为200ms。如果该时间间隔大于200ms,则认 认为,人体处于连续的跌落状态。如果 Free Fal中断 为无效。200ms计时通过MCU定吋器实现 (失重)连续发生300ms,则说明人体是从超过045m的 4. Activity中断产生之后,系统开始等待 Inactivity中断(冲 高度跌落,系统会给出一个跌落的报警。 击后静止)。 THRESH INACT设为01875g, TIME INACT 设为2s。 Inactivity中断为 AC coupled工作模式。 ×10×0.32=045m 5.在 Activity中断产(撞击)生之后的3.5s时间之内,应该有 Inactivity中断(撞击后的静止)产生。如果超时,则认」 本算法巳在ADuC7026微控制器中以C语言实现。我们将同 为无效。3.5s计时需要通过MCU中的定时器来实现。 时提供一个基于该解决方案的测试案例,以便验证算法。 包括向前跌倒、向后跌倒、向左侧跌倒、向右侧跌倒在内 6.如果 Inactivity中断之后的加速度值与初始状态(假设已 的四种体位,毎种体位均测试20次。前10次试验为典型跌 知)下数值的矢量差超过0.7g,则说明检测到一次有效 倒,在跌倒后无长时间静止,后10次试验也为典型跌倒 的跌倒,系统会给出一个报警。 只是跌倒后有长时间静止。表2列出了测试结果。 7.当检测到跌倒状态之后,为了判断是否在跌倒之后人 木试验表明,木文提出的基于ADXL345的解决方案可以有 体有长时间的静止不动。需要继续检测 Activity中断和 效地检测到跌倒状态。请注意,这只是一个简单的实验 Inactivity中断。这里把 THRESH ACT设为05g, Activity 要验证本解决方案的可靠性,还需要进行更加全面、有效 和长期的实验 表2.测试结果 测试条件 测试结果 实验编号跌倒体位 跌倒后有无长时间静止 检测到的跌倒(次数)检测到的长时间静止(次数) 1至10 向前跌倒 无 10 0 11至20向前跌倒 有 10 21至30向前跌倒 无 10 0 31至40向前跌倒 有 10 41至50向左侧跌倒 无 10 0 51至60向左侧跌倒 有 10 10 61至70向左侧跌倒 无 10 71至80向左侧跌倒 有 10 0 0 Page 8 of 28 应用笔记 AN-1023 代码实例 ADuC7026 river'包括AuC026GPO控制函数、C主机读 本节将给出以上解决方案基于ADXI.345和ADuC7026平台 写函数以及ADuC7026初始化。“x345h”含ADXI345寄存器及 的C语言代码。项目中含有四个h文件和一个.文件,采用 位定义。“x345ioh”文件含用于通过rC及SD读写ADXL345的 Keil uv3进行编译。文件“ FallDetection.c”含趺倒检测算法。 函数。 “ Falldetection.h”详细列出跌倒检测算法中用到的函数及变 量定义、ADXL345读/写函数的应用以及ADXL345初始 化。 FallDetection. c include "FallDetectionh"// Include header files void IRQ Handler() irg / IRQ interrupt unsigned char ii if((IRQSTA GP TIMER BIT)==GP TIMER BIT) / TIMERl interrupt, interval 20ns TIClRI = 0; / Clear T-MER1 interrupt if(Detectionstatus=0xF2)// strike after weightlessness is detected, waiting for stable TimerWaitForstable++ if(TimerWaitForStable>=STABLE WINDOW) //Time out, restart IRQCLR GP TIMER BIT; / Disable ADuC7026's Timer1 interrupt Detecionstatus=0xF0; putchar (Detections=atus)i ADXL345Registers [XI345 TERESH ACT]=STRIKE THRESHOLDi ADXL345Registers [xL345 TERESH INACT ]=NOMOVEMENT THRESHOLD; ADXL345Registers [XI345 TIME INACT]=STABLE TIME ADXL345Registers [XI345 ACT INACT CTl]=XL345 INACT Z ENABLe XL345 INACT Y ENABle I XI345 INACT X ENABLE I XL345 INACT AC I XI345 ACT Z ENABLE I XL345 ACT Y ENABLE I XL3 45 ACT X ENABLE XI345 ACT DC; x1345Wr-te(4 XL3 45 THRESH ACT, &ADXL 3 4 5Registers [Xl345 THrESH Act])i else if(Detectionstatus--OxF1) //Weightlessness is detected, waiting for strike T'imerWaitForstrike++ if(TimerWaitForStrike>=STRIKE WINDOW) // Time out, restart IRQCLR GP TIMER BIT; / Disable ADuc7026's Timer1 interrupt Detectionstatus=OxFO putchar(Detections-atus)i ADXL 345Registers[XI345 TERESH ACT]-STRIKE THRESHOLDi ADXL345Reqisters [ xl345 TERESH INACt]=NOMOVEMENT THRESHOLD; ADXL 345Registers [XL345 TIME INACT]=STABLE TIME i XI345 INACT X ENABLE I XI345 INACT AC I XI345 ACT Z ENABLE I XI345 ACT Y ENA ENABLE I XL345 INACT Y ENABLE ADXL345Registers XI345 ACT INACT CTl]=XL345 INAcT BLE|x345 ACT X ENABL三 KL345 ACT DCi x1345Wr-te(4, XL3 45 THRESH ACT, &ADXI345Regiscers [XL345 THRESH ACT]) Rev.0 Page 9 of 28 AN-1023 应用笔记 if((IrQSTA&SPM4 IO BIT)==SPM4 IO B-T)// External interrupt form ADXL345 INTC IRQCIR =SPM4 IO BIT;// Disable ADuC7026's external interrupt x1345Read(-, XI345 INT SOURCE, &ADXL345Registers [Xl345 INT SoURCE]); if((ADXL3 4 SRegisters [XL3 45 INT SOURCE&XI345 ACTIV-TY)==XL3 45 ACTIVITY) / Activity interrupt asse≌ted if(DetectionStatus==OxFl) / Waiting for strike, and now strike is detected Detectionstaus=0xF2;// Go to status "F2 putchar(Detect-onstatus)i ADXL345Regis=ers [XI345 THRESH ACT]=STAB-E THRESHOLD; ADXL345Regiscers [Xl345 THRESH INACT]=NOMOVEMENT THRESHOLDi ADXL345Regis-ers [XI345 TIME INACT]=STAB-E TIMEi ADXL345Regis-ers [XI345 ACT -NACT CTL]=X-345 INACT Z ENABLE XI345 -NACT Y ENABLE I X-3415 INACT X ENABLE XL3415 INACT AC XL3 45 ACT Z ENABLE XL345 ACT Y ENABLE XI345 ACT X ENABL XI,345 ACT AC; x-345Write(4, XI345 THRESH ACT, &ADXL345Registers [XL3 45 THRESH ACT]) TRQFNI=GP TTMER BTT; / Enable ADuc7026's Timer1 interrupt T-merWaitForstable=0 else if(DetectionStatus==0xF4)// Waiting fcr long time motionless, but a movement is detected Detectionsta-us-0xF0; // Go to status "Fo", restart putchar(Detect-onstatus ADXL345Regis=ers[XI345 THRESH ACT]=STRIKE THRESHOLD ADXL345Regis-ers XL345 THRESH INACT I=NOMOVEMENT THRESHOLD ADXI345Regis-ers [XI345 TIME INACT]-STAB-E TIME; ADXL345Regis-ers [XI345 ACT -NACT CTL]=X_345 INACT Z ENABLE I XL345 -NACT Y ENABLE I X-345 INACT X ENABLE I XL345 INACT AC I X-345 ACT Z ENABLE I XL345 ACT Y ENABLE I XI345 ACT X ENABLE I ⅩL345 ACT O x_345write(4, XL345 THRESH ACT, &ADXL345Registers XL345 THRESH Acrl)i else if((ADXL 3 45Registers [XI345 INT SOURCE]&XL3 45 INACTIVITY)==XI345 INACTIVITY)// Inactivity interrupt asserted if(Detections Status==0XF2) // Waiting for stable table is detected IRQCLR GP T-MER BITi x-345Read(6, XI345 DATAXO, &ADXl345Registers [Xl3 45 DATAXO])i DeltaVector Sum=0 Acceleration [i]=ADXL345Registers [XI345 DATAXl+i*2]&OxlFi []<<8)|ADXL345 ters [Xl 345 DATAX0+i*2; if(Acceleration [1.<0x1000) Rev. 0 Page 10 of 28

资源截图

代码片段和文件信息

评论

共有 条评论