用户
 找回密码
 注册
发新帖
1#
跳转到指定楼层

【EasyEDA杯】手表二号(STM32+蓝牙4.0+三轴加速度)

  [复制链接]
    还记得手表一号的制作:http://www.kangfu2.com/thread-42852-1-1.html
    如今已经有了半年的时间,我也已经置身社会,不再是一个大学生了。回顾手表一号的制作过程,还历历在目,一个人的制作需要花费的时间和精力太多,要解决的难题也不少。而这次的手表二号也同样如此,本来中途几经放弃,但又重新振作精神,终于在这个初秋把它完成了。
    这次的手表二号与手表一号有重大的改变,几乎是全部焕然一新,虽然最后有些不足,但我觉得自己已经很努力了。
    首先,最大的改变要数外观,之前手表一号用的亚克力外壳,现在我采用了当下比较流行的3D打印技术,其次是表带,采用1.6mm的PU皮表带,再者主控从stc改为cortex-m0内核的stm32f030c8t6,然后是屏幕,为了省电采用的是0.49寸最小的OLED屏幕,最后,加上了三轴加速度芯片ADXL345,以及蓝牙4.0的模块DA14580。下面将依次介绍它们。
    在介绍它们之前,小伙伴们可能很想一睹手表二号的面容了,那我们先说说整个制作过程吧,嘿嘿。
    首先,做完手表一号之后,我为了能用上stm32的芯片做手表,开始学习它,我发现网上大多是stm32f103xxx和stm32f051xxx的教程和开发板,于是先学了,后面发现清风有stm32f030xxx的教程,于是再学它,030和051的芯片非常相似,除了比051少了电压比较器和DAC之外其他基本都相同,但是价格却要便宜很多,这也是我要采用它的原因之一。由于当时资金有限,我就自己做了个最简单的开发板:


    怎么样,很丑吧?不过虽然丑,但实用,并且只是做实验用用,不要在意这么多啦。另外说一下,虽然同为LQFP封装,stm32芯片的引脚比stc芯片的引脚要密一些,洞洞板可能有点困难(大神忽略)。
    不知道用这个板子测试了多少次程序,RTC时钟程序,ADXL345各个模式程序,蓝牙4.0模块程序,OLED驱动显示程序,ADC测电压程序,低功耗程序,计步程序等等。总之,漫长啊。。。然后终于是成形了,接着开始画电路和PCB了:


    采用双面板,尽可能地把面积缩到最小,最终尺寸为20×20mm,这个布线规则要考虑到商家的规定,另外,蓝牙模块天线下不可布线,会严重影响通信。在这个设计阶段我出现了一些错误,首先是OLED电路图画错了,导致PCB也错了,然后已经打样回来了,只好用小刀和飞线改,不过还好只有一条线错误。所以我们设计的时候一定要考虑周到并重复检查,确保无误。还有一个错误就比较致命了,属于设计上错误,下面会重点提及。



    打样回来的PCB,看着还行吧,普通的绿油,普通的板子,哈哈,焊上OLED,额,咋不亮,还好一下子就发现是连线有错误,改过来了,现在的电路图和PCB文件也改过来了。
    好,PCB回来了,再就是根据PCB大小设计外壳了:
   

    在某宝上的3D打印看时,说是很多画图软件都可以,不过要stl文件。本人有CAD证书,然而,并没有什么用,还是不会画。在网上看到说CAD主要画平面工程图,立体图虽然也能画,但是不怎么好。所以我打算自学一个画图软件了,有看到3DMAX,不过听说很难学,所以我就找了个简单易学的,也就是Sketchup。在某个自学网上开始学习,终于学得一点皮毛,可以画出像样的图了,不过还是失算了一把,上面看到的是第二次设计的外壳,虽然还是不如人意,但是也勉强过关,第一次设计的就垃圾得不行。结果3D打印了两次,花了米米不说,还浪费了时间,宝宝心里苦啊,但宝宝不哭。
    来看看3D打印效果如何:




    感觉还行吧,再牵强也只能怪自己画图画得不好,和表带不是很搭,因为树脂是米白色的,表带用的亮白,不过配其他颜色表带就更不行了。可以看到,比起手表一号,这个手表二号又要小很多。
    好,这下终于可以装机测试啦,首先焊接元件到PCB,这里有个元器件焊接有点难度,便是ADXL345了,它采用的是LGA的封装:


    小也就算了,引脚都在背面,在网上搜这种封装的焊法,其工厂工艺是SMT机,打钢板,送回流焊,当时就觉得要用热风枪,只可惜热风枪在家里,没办法,电烙铁硬上了。为啥要急着硬上呢?因为当时马上就要毕业了,想在毕业前送给她,这个手表由于前面的各种已经拖了好久了。
    结果,坑爹的事情就此发生,之前我说过有个设计上致命的错误,那就是我在ADXL中断2端口与单片机中断端口之间接了个三极管(为什么要接三极管,后面讲ADXL功能时会提到),结果导致低功耗测试通过不了,一直有个3ma左右的大电流,于是我对模块进行一一排查,然后检查到ADXL芯片输入的电流达3ma,当时我认为虽然ADXL和单片机通信成功了,但是或许中断端口发生了短路,于是用烙铁强行把ADXL345拆下来,结果可想而知,报废了一块PCB和一片ADXL345。之后我又想通过飞线的办法将ADXL飞上去,结果又报废一片ADXL345,这芯片的引脚太弱了,加温时间稍长就脱落了。。。
    这是我做手表二号最惨痛的教训,随后耽搁了好长一段时间不想理它,也是忙毕设去了。然后后面又想做事得有始有终啊,所以有了下面这个奇形怪状:

    哈哈,直接将ADXL模块上的挖下来,飞线上去,这就尴尬了不。然后一检查,我去,还是有3ma大电流,然后才发现大电流来自三极管,我的心好痛啊,我恨不得把那个三极管碎尸万段,因为之前的ADXL345确实是焊接好了。
    唉~终于,我还是回到了家,用上了热风枪,轻松解决无后患。
    当然,三极管是不能用了,思索再三,改了程序解决了问题,上续电路图中已经改了,但是PCB文件还没改,仍然有个三极管。




    好,prefect!额,松香加得有点多,不怎么漂亮哈。可以用清洁剂洗掉,不过那瓶清洁剂被高铁的阿姨收走了,说是会爆炸,我就只能呵呵了。
    有木有注意到我的蓝牙模块,是的,就在ADXL345旁边,它非常小,也是我找了好久能买到的最小蓝牙模块了,仅有5×7mm,并且是蓝牙4.0,可以达到低功耗目标。

    弄坏了一个,心又碎了一地,不过还好不是蛋碎了一地。这种蓝牙模块嘛,对于我们这些平民DIY人士而言价格还是相当可观的。
    焊好之后当然就是各种测试啦,通过测试来修改程序,这有是一个漫长的过程。。。


    好的,屏幕成功点亮,装机吧!



    额,别想着装机就完了啊,还是要引出烧录引脚,还是要测试要改程序,不用说,漫长,因为我并没设计按键,一切操作都要看ADXL345的了,所以必须带手上测试。
    最后,程序定型了,不过仍然有很多需要改进的地方,但不能老是拖着,所以也算圆满结束啦。最终装机,拆除多余测试线:

    只剩两根充电线,充电接口为安卓手机通用接口。




    赶紧戴上瞧瞧,嘿嘿,有模有样的,就是表壳略大,还有表耳的设计不好。



    充电中,背面可见4颗小螺丝。

    点亮!我无法形容此刻的心情!
    下面来看一下演示视频吧!首先不足之处先做说明哈,由于ADXL345和OLED屏幕共用I2C总线,所以导致有些冲突,显示可能会有点问题,但是看时间绝对是没有问题的。另外,计步功能不够完善。还有就是,熄灭之后不能马上尝试唤醒,必须等待两秒左右,这个后面讲。其他问题欢迎指正。
    首先是首次上电开机测试视频:


    然后是各功能演示,视频倒了是由于我只有一个人,自拍自演不好弄,对不住大家了!



    还有一个利用单双击操作的视频不知怎么上传不了,算了。
    下面我将介绍各芯片模块和我的设计,没有图片了哦,纯文字讲解。
    一,主控STM32F030C8T6,具有64K的flash,程序空间足够,我仅用了30K,用到的外设:RTC,配32.768K爱普生贴片无源晶振,提供准确时间,I2C,与ADXL345和OLED显示屏通信,USART,用于调试以及与蓝牙4.0模块通信,ADC和DMA,检测电池电量,在这里我采用两个100k的电阻分压检测,其耗电20ua左右,本想用更大的电阻,但是会检测不准。
    二,ADXL345三轴加速度计,具有低功耗能力,待机0.1ua,休眠23ua,具有敲击检测、静止活动检测、自由落体检测(没有用到)、自动休眠、FIFO等功能,具备两个外部输出中断。流程:上电时,打开敲击中断检测单击与双击并通过中断1控制CPU,CPU进入待机前将其自动休眠和活动静止功能打开,检测到活动时,通过中断2唤醒CPU,当进入计步模式时,打开FIFO功能和水印中断。这就是它的三个模式。其中要实现也是非常困难,有许多寄存器要配置,比如敲击阈值,敲击持续时间,敲击延迟,敲击窗口,中断使能,中断映射,活动阈值,静止阈值等等。每个功能都有对应的轴检测,比如,我唤醒使用的活动中断就是检测X轴,也就是与手臂垂直的那个轴,所以快速地转一下手会将其唤醒。
    之前所说的一个问题,就是为什么要加那个三极管呢?因为它的两个中断要么全设置成低电平触发,要么全高电平,但是CPU待机唤醒需要在WKUP引脚给一个高电平(低电平复位不行,因为ADXL在中断数据未被读走前一直保持中断,那么CPU将不能正常工作),而其他中断要低电平,所以加上三极管做非门用。后面程序改为换模式时更换中断设置解决了此问题。
    三,蓝牙4.0,芯片为DA14580,小米手环1里面也是这个芯片,它为cortex-m0内核,这样我的手表里面还是m0双核呢,哈哈
    四,充电芯片和稳压芯片为TP4057和RT9193.
    五,低功耗设计,注意事项:
        烧录完程序boot0会接地运行程序,这时要去掉上拉电阻,否则有损耗
        CPU停机模式一定要关闭ADC,DMA等外设,没关闭前1ma左右,关闭后300ua
        ADXL345可通过降低电压来降低功耗,U=2.5V时,测量23ua,待机0.1ua
        降低CPU主频,48M下16ma,16M下8ma,8M下6ma
        关闭不使用的外设时钟
        实测:CPU待机4ua,OLED休眠6ua,关闭0ua,ADXL345待机5ua
        由于我的设计没有按键,ADXL345不能待机,只能休眠
    六,计步功能简要说明,(我也是参考网上的,大家有兴趣可以去搜去研究)
        如果记10~100次数包含一个步伐,则速度为0.2s/步~2s/步,这是正常范围
        为使数据平滑,需要使用数字滤波器,即求平均值法
        系统持续更新三个轴数据,找到MAX和MIN,求平均值即为动态阈值,假设每采样50次更新一次,则确定动态阈值后,接下来50次可判定个体是否迈出步伐
        步伐迈出定义:当加速度曲线跨过动态阈值下方时,加速度曲线斜率为负值
        峰值检测:根据X,Y,Z轴中变化最大的一个轴计算步数,如果加速度太小则忽略
        排除无效震动:时间窗口和计数规则。(排除高频震动和低频震动)


    关于是否开源的问题,之前看到有人的资料被拿到网上去卖,所以有些顾忌,开源是为了增加大家一起学习一起进步的,切不可用于商业用途,在这里我的资料设置一些权限,如果有需要的可以在下面留言,有问题的也可以在下面留言。


    OK!以上是我所有的阐述,欢迎大家询问和指教,再次感谢论坛,感谢大家,这两年里,在论坛学到了很多很多,从最开始的什么也不会到现在的一些制作,都来自论坛的帮助,真的很感谢大家!














USR.zip

37.04 KB, 阅读权限: 100, 下载次数: 0, 下载积分: 下载币 -5

pcb和电路图.zip

540.88 KB, 阅读权限: 100, 下载次数: 1, 下载积分: 下载币 -5

评分

参与人数 7下载币 +43 刀币 +43 收起 理由
a1061492840 + 5 赞一个!
流星也会永恒 + 6 + 6 精品文章
hxrong + 6 + 6 原创内容 给力
玩转 + 8 + 8 赞一个!
茅草屋 + 10 + 5 支持DIY精神!
diyxue + 8 + 8 很给力!
疯爱 + 10 支持折腾

查看全部评分

设计的挺好   给你点赞
还有一点忘了说,就是感觉蓝牙模块没实现什么特别的功能,感觉有点浪费,是这样的,因为我自己不会做app,所以没办法,只能说,以后再努力吧
楼主  3D打印一般在什么价位?给个参考
楼主做的不赖,赞一个
会机械制图,又会设计电路板,还会写程序!楼主就是全才的大神啊!!!!!!!!!
会机械制图,又会设计电路板,还会写程序!楼主就是全才的
原创好帖,点赞了。,。,
不错  楼主能给权限下载吗
感觉STM32的时钟不是很准。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回顶部