一、项目介绍
本项目是一个小型智能手表原型,具有简单的计步和计时功能。
二、使用器件
组成模块有MAX32660,ADXL362,OLED屏幕
1、MAX32660-EVK模块
主板上已安装基于MAX32625PICO的调试适配器;完成编程后,可将其直接拆卸。调试模块支持可选的10引脚Arm® Cortex®调试连接器,用于实现DAPLink功能。组合尺寸为0.65in x 2.2in,而主板独立尺寸为0.65in x 0.95in。外部连接采用双排连接头,兼容过孔和SMT应用。该电路板以非常小的空间提供强大的处理子系统,很容易集成到各种应用中。
MAX32660采用了带浮点运算功能的Cortex-M4内核,最大主频96MHz, 带256KB Flash和96KB SRAM,性能很强劲
- 超低功耗
- 高分辨率:1 mg/LSB
- 医疗植入式衍生选项
- 内置系统级节能功能包括:
- 运动激活的可调阈值休眠/唤醒模式
- 自主中断处理,无需微控制器干预,系统其余部分可以完全关断
- 深度嵌入式FIFO较大程度地减轻主机处理器负荷
- 唤醒状态输出支持实现独立的运动激活开关
- 噪声低至175 µg/√Hz
- 宽电源和I/O电压范围:1.6 V至3.5 V
- 采用1.8 V至3.3 V供电轨供电
- 片内温度传感器
- SPI数字接口
- 可通过SPI命令选择测量范围
- 小尺寸、薄型(3 mm × 3.25 mm × 1.06 mm)封装
3、OLED屏幕
使用IIC OLED屏幕,使用方便快捷。
三、计步原理
计步器使用向前、垂直和侧面的三个运动分量来计算一个人行走的总步数。计步器使用加速度计来获取这些值。每次取样后,加速度计都会不断更新3轴加速度的最大值和最小值。这些3轴(Max + Min)/ 2的平均值称为动态阈值水平,该阈值用于确定是否应该记录该步数。
计步器在运行时可以处于任何方向,因此计步器使用三个平方加和后开方用来作为计步运算值。
四、主要代码
计步判断代码
u8 judge(short data, short data0, u16 t, u8 threshold)
{
u8 j = 0;
if (data - data0 > 12)
{
k1 = 1;
if (k0 == 2)
{
min = data0;
tl = t;
j = 1;
}
}
else if (data0 - data > 12)
{
k1 = 2;
if (k0 == 1)
{
max = data0;
tx = t;
j = 2;
}
}
else
k1 = k0;
if (j == 1 && max - min > threshold)
j = 3;
k0 = k1;
return j;
}
五、实物展示
六、血泪史
本设计原本十一期间计划完成,但是出现了各种各样的问题,导致进度一拖再拖,首先感谢Lucia的不抛弃,在我像放弃的时候拉我一把,还在我迷茫,找不到问题所在的时候,联系工程师远程交流。
设计首先经历了投板不过的问题,由于之前焊接QFN比较少经验不足,可能产生虚焊,同时设计走线有问题,SPI通信一直不稳定,一直无法实现功能,然后为了能够按时提交项目,选择不打板,换为使用成品模块,在面包板上搭建原型的方案,结果万万没想到掉入了第二个深坑。
在新买的模块和面包板上实验时,还是一直无法实现通信,而且找不到原因,MISO上一直有一个毛刺无法排除,修改了无数次代码
最后联系了硬禾学堂Lucia,通过远程协助,确认了程序没问题后,又进行了各种尝试,仍然不能通信,最后决定从头开始,重写了一个只有ADXL362驱动的程序,为了排除干扰,使用杜邦线直接和ADXL362模块连接,据然可以了!!
随即想到,之前更换了杜邦线,更换模块插在杜邦线上的位置,但是从来没调整过MAX32660核心板的位置,将面包板掉头,核心板插在了另一边,一切问题迎刃而解,后来拆开面包板,发现面包板的两个簧片不知道是什么原因,短接在了一起,正好就是MISO引脚,造成了这个毛刺,在解决了SPI通信问题后,一切变得非常顺利。