切换到宽版
  • 6245阅读
  • 52回复

[其他]站在巨人的肩膀上改造~MM32L073单键胸牌DS3231时钟配上3D打印外壳 [复制链接]

上一主题 下一主题
离线w7767896789
 

发帖
69
M币
6753
专家
21
粉丝
20
— 本帖被 發騷友 设置为精华,作者+3000M币+5专家(2018-01-31) —




开启正文之前还是先说下,我改造了那些功能吧

(一).时钟显示,时分秒
(二).1个按键实现调节小时和分钟,秒觉得没必要调整就没有做了.操作方法,2秒内按1下按键,小时和分钟之间的2点(冒号)会从常亮变成闪烁状态,即进入调整小时模式,此时按一下按键,小时数值+1,按n下小时+n,数值溢出后变为0重新循环,不操作按键8秒钟后自动退出进入显示时间状态,同理,显示时间状态下2秒内按2下按键,分钟和秒钟之间的2点会闪烁,即进入调整分钟状态,此时按n下按键,分钟数值+n,数值溢出后变为0重新循环,不操作按键8秒钟后自动退出
(三).Solidworks外壳设计并3D打印.


--------------正文---------------

前些天看到各位大神改造LED胸牌时钟帖子,看的我心痒痒,我也跃跃欲试,于是立马买了一块胸牌,到货后发现居然是单键版而且还是MM32L073主控,MM32电压更宽些,可以在2.5-5v工作相对于GD32来说LED会更亮一些,但是MM32L073是coterx-M0架构,硬件删减了不少,不能位带操作的,网上资料也少,只有灵动微官网有一些,从官网下载好资料,擦除清空flash,开启了我的LED胸牌改造之旅.
我将会从以下方面先后讲解这款胸牌的改造路程,若有说错,请踊跃批评,互相学习

1.硬件连接



硬件连接如图,这款胸牌不幸中的万幸的是把ISP下载引脚弄出来了,ISP下载器你可以用CH340,CP2102,Pl2303都可以,原有程序被锁了不能恢复.本来我是用SW下载程序的,但是后来sw焊盘给我弄掉了.另外跟大家说一下,这块PCB其实是通用的,3.3V的STM32,GD32都可以使用,LQFP48封装的引脚顺序是一样的,不同的是工作电压,上图Q1位置是LDO,MM32电压较宽用0欧电阻直接连接电池,STM32和GD32就需要用LDO或者二极管降压到3.3V了,还有就是R1位置,改用STM32和GD32要加1.5K上拉电阻,即PA12-USB的D+脚上拉,这样电脑就会识别出USB全速设备,MM32内部带上拉电阻,R1省略

2.显示原理讲解



所有的胸牌显示原理都是一样的,23个io口控制,图片上是我的款胸牌的引脚图,方向为正面拿着胸牌时,USB口在左上角,LED的共阳控制的,1个控制脚(A10,B14图片标有背景颜色的)直接控制2列,我们不妨把1个控制脚(列选共阳)控制的2列叫做1组,整个胸牌有44列/2=22组,每一组2列有11x2=22个LED,那么正好对应了22+1控制脚=23个io,当控制脚为高电平,其余22个io口为低电平,就会点亮低电平io对应的LED,比如说控制第一组LED(1,2列),PA10控制脚为高,其余脚为低即点亮对应LED,那么我们想点亮B14控制的第2组灯(3,4列)怎么办呢,对比一下第一组和第二组关系,发现是控制脚A10和B14位置对调了,其余io都没有变化,大家看图片上的第一组LED的我标的红色序号1-23,如果按照的我标的序号1-23来说的话,就是第2组控制脚为第1组标号2对应的io口B14,第1组控制脚A10换到标号2的位置上,第3组控制脚为第2组标号3对应的io口B15,第2组控制脚B14换到标号3的位置上,换成通项公式就是第n组控制脚为第n-1组标号n对应的io口,第n组控制脚换到标号n的位置上,而且要注意的是这个替换只能从左往右.

3.关键代码讲解



这是1个全屏显示代码,这个就是根据显示原理写出来的,先列选后行选,由于每一列有11个LED,就需要2个字节数据,第二个字节只取高3位,我是直接取模软件生成8位数据的,没有合并成16位数据,这里需要注意的是控制1组LED的时候控制脚io模式为推挽输出,剩余的22个行选io口要设为开漏模式,即高电平时候为高阻态,要不然23个io都是推挽输出,行选高电平会点亮其余列的LED,接着行选给完数据点亮LED以后, swap(&led_change_num[22],&led_change_num[n2+1]);  就是控制脚替换标号脚的操作了,这样整屏数据就显示出来了,显示时间变化只需要改变显示数组偏移就好了.

4.字符数字取模


可能会有人好奇,数字怎么取模,我在网上没有找到16位取模软件,我用的是8位的pctoLCD,胸牌有11行,即8+3=11位,我还是当做它8+8=16位-2个字节来看,只是有效的为11位,大家看我图片上取模软件的数字的所在区域范围,一个数字范围为6列x16行,下面5行为空即无效,这样有效的只有上面11位了,显示时间有6个数字和2个冒号,就是6x6列+2x4列=44列,刚好.

5.机械结构设计



这是渲染图,很好看吧,但是图片仅供参考,3D打印出来精度还是有点差


我用的是SolidWorks2017,设计过程就是,先拿游标卡尺量好数据,接着拉伸切除圆角,就行了这种四四方方的比较设计的,当然也比较丑


6.组装



首先把多余的ISP下载线拆掉,只留下DS3231的4根线与胸牌连接.



装好后发现DS3231电源LED太亮了,索性拆掉,只焊接一个引脚固定在PCB上,以备后用
最后胡乱塞进去,打热熔胶,封壳,不想再看到他

7.设计过程中遇到的困难

1.LED驱动的io要改变工作模式,推挽输出与开漏输出互换
2.DS3231读数据i2c总线应答问题,我网上找了一份ds3231的例程,在STM32上用的好好的,mm32就不行了,后来发现是读数据完成不应答就好了,卡了1天  时间,很气愤.

8.其他改造方向的探索

1.wifi时钟,刚开始改胸牌时候,是想连接esp8266获取网络时间的,毕竟网络时间才是最准的,连接onenet或者其他时间服务器都可以,but这款胸牌只有2个串口而且都被占用了,模拟串口又不想去写,只好作罢.
2.电脑温度监控器,这个需要用到USB协议了,做成HID或者CDC,还要有写上位机,驱动这些,很复杂,期待大神ing

      


最后再说一下我对这款胸牌原厂程序的见解
这款胸牌,不,应该说所有胸牌都是通过USB协议将自己做成了一个自定义HID设备的,


从USB VIEW图片看出,胸牌有2个Endpoint,一个输入一个输出,都是用的中断传输方式,跟我们的电脑键盘类似,一开始我以为上位机是数据取模兼发送数据的,发现上位机只是发送特定的少量数据,并没有发送取模的大量数据,那么这些数据是什么呢?



比如我们把显示的字符设成图片这样子,并保存后缀.CLED的工程,用记事本打开工程


我们定位到显示字符的位置,看到ASCII码直接显示,后面的cafd,c2eb,d6ae,bcd2是不是对应"数码之家"4个字呢,是的,这种汉字坐标方式让我想起了LCD12864的ST7920中文字库



果不其然就是这样,也就是说这款胸牌的字库是存在flash里面的,上位机只是发送汉字对应坐标和显示速度,效果数据而已,胸牌原厂字库显示真的很好看,但是得不到啊,算了还是得过且过吧,免费的东西,还要什么自行车!

修正一下:我今天看了下GD32款胸牌的上位机,下载数据很慢数据量很大,,说明它还是具有取模功能的,所以更正一下,可能上位机还是有取模功能的,上面的汉字坐标应该是给上位机识别用的,识别出再取模.之前说错了,抱歉

      


最后还是再说一句,胸牌是有专利的,保护知识财产权,人人有责,以上文章仅限交流学习

全部资料共享
链接:https://pan.baidu.com/s/1bqmXcab 密码:4zsu
工程是用MDK5编写,需要去灵动微官网下载安装对应的pack包
程序是MM32L073的,其他单片机GD32不适用




[ 此帖被w7767896789在2018-02-01 20:41重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共12条打赏M币+121
kyhwhb M币 +13 優秀文章 02-06
sckocn M币 +1 優秀文章 02-03
lv1997 M币 +1 熱心助人,m不多,意思下 02-01
q版虎斑猫 M币 +13 優秀文章 02-01
chenzoutie M币 +1 謝謝分享 02-01
troy012 M币 +22 優秀文章 01-31
吴鹏930 M币 +10 謝謝分享 01-31
hddlfz M币 +9 謝謝分享 01-30
qrut M币 +13 優秀文章 01-29
moontree M币 +9 謝謝分享 01-29
12
关键词: 胸牌电子胸牌
离线2545889167

发帖
11664
M币
56836
专家
257
粉丝
4539
只看该作者 1楼 发表于: 01-29
楼主很厉害,研究的很深,赞一个


哈哈,我把你帖子链接加到我帖子开头了,方便大家浏览哈
http://bbs.mydigit.cn/read.php?tid=2324306

本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线2545889167

发帖
11664
M币
56836
专家
257
粉丝
4539
只看该作者 2楼 发表于: 01-29
我看了下,胸牌他枚举的usb厂商和设备居然还是用
0x0483是意法半导体

估计是直接参考了网上的这个帖子
STM32例程之USB HID双向数据传输(源码下载)www.viewtool.com/bbs/forum.php?mod=viewthread&tid=199

只能说这种开发胸牌的也是小厂了,都没自己的厂商id,直接盗用人家的id。

本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共1条打赏M币+13
yzs8414 M币 +13 謝謝分享 02-05

发帖
813
M币
1930
专家
1
粉丝
7
只看该作者 3楼 发表于: 01-29
赞赞赞赞赞
离线dwh96

发帖
40
M币
529
专家
0
粉丝
1
只看该作者 4楼 发表于: 01-29
不错 不错 有空再弄个玩玩  
离线woaishuma1

发帖
80
M币
-323
专家
1
粉丝
2
只看该作者 5楼 发表于: 01-29
这个厉害了,牛!!!!
离线hongo

发帖
50891
M币
139486
专家
263
粉丝
15144
只看该作者 6楼 发表于: 01-29
優秀文章!

发帖
4344
M币
8250
专家
30
粉丝
125
只看该作者 7楼 发表于: 01-29
论坛掀起胸牌风,紧跟各位大佬脚步
离线cknck

发帖
29
M币
16
专家
0
粉丝
4
只看该作者 8楼 发表于: 01-29
厉害了!探索,共享~~赞!
离线小角色t

发帖
369
M币
511
专家
0
粉丝
11
只看该作者 9楼 发表于: 01-29
哪里还有可以得胸牌吗?我好像错过了...
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个