有幸收到立创的梁山开发板内测邀请,基于梁山开发板制作一个设计并开源。
上图就是梁山开发板的所有东西了,分为两块板,一张最小系统的核心板——梁山Pi,一张游戏机一样的扩展版——天魁星。还有附送DAP-LINK和电池喇叭。
当然送的天魁星板的游戏我还没来得及玩呢,程序已经被点灯刷掉了。
核心板的主控是GD32F450ZGT6,是一块很强大的MCU。
作为一个开发板/核心板收集玩家
除了在外面买的开发板/核心板外还有不少是自己做的开发板/核心板
紫色的PCB真的很显眼,除了梁山开发板是紫色的外,还有个w801开发版也是紫色的~
什么时候出立创出FPGA开发板我立马入手(dog)
不过作为开发板来说还是有点小了,更不如说是核心板。
像正点原子的阿尔法,战舰开发版和普中科技的51开发板都是芯片板载核心板的形式,然后把IO引出到大板上。
梁山使用一个核心板直接怼进另一个成品板上,更像是做模块化产品。
希望以后可以做成大板板载核心板的形式,这样开发其实会更加方便,核心板也可以拆下换上自己画的板。
上图是初版PCB
下图是改进版PCB
使用梁山Pi核心板(主控GD32F450ZGT6)制作的一个简易的记分牌,附带语音播报,可以用于多种比赛用途,可以外扩大屏。
上面这版是一开始的,供电不够因此改了
下面是新的板,电源电池部分独立出来了,因此电源板可以白嫖10x10
大屏太大啦,桌子都放不下了。
其实以前就做过的基于航顺的一个数码管显示器
https://oshwhub.com/Aknice/ji-yuhk32f030mf4p6-dipc-zhuang-tai-xian-shi-qi
当时好像没做什么功能,只是显示,因此这次想要继续完善,并且做个实用的功能,恰好最近打球缺一个记分器,因此做了这个。
框图大致如上,三线控制MAX7219芯片驱动数码管,串口控制喇叭,MCU比较强大,IO多,因此一个按键一个中断。
和以前没有区别,也是三根线引导DIN CLK CS(LOAD)脚
由于小数码管5V驱动即可,但是大数码管需要12V电压才能驱动,因此需要一个放大电路
由于MAX7219是驱动共阴数码管的,因此DIG0.1.2……为低,SEGA.B.C……为高的时候才会亮,因此设计如上驱动电路
请注意,该驱动电路是驱动共阳数码管的
可以选用一组做分析:
上端:当SEG1_DIG0为低时,Q28 AO3400为导通,Q30 由于R74上拉12V截止,但是现在由于Q28导通,因此Q30基极为低,因此Q30也导通,SEG2_OUT_DIG0从0V变12V。
下端:R57下拉Q20,因此Q20截止,当SEG2_A为高时,Q20导通到地,因此SEG2_OUT_A就接地。
总结一下就是当SEG1_DIG0为低,SEG1_A为高时,12V就会导通到0号管的A字画上
由于放大会导致电平逻辑相反,因此只能用MAX7219(共阴驱动IC)驱动共阳的数码管,若要驱动共阴,或者用共阳驱动IC,那还需要加个反相电路。
还有一点是放大电路使用MOS管,不要使用三极管,否则MAX7219驱动能力不够。
使用了三节锂电池均衡充电电路,这个三节锂电充电电路以前做过,现在拿过来加了个开关电路和均衡电路
开关电路就是有电源的时候用电源同时断开电池给系统的供电又给电池充电,没电源输入就用电池给系统供电,以前讲过了,不细说。
使用8pin对插,这样电池板也能白嫖做板了
不过千万注意不要插歪了,不然会烧板喔
根据数据手册
配置CON1 CON2 10K下地,CON3 10K上拉到3.3V
MCU串口电平需要3.3V。
由于全部数码管都做在一整张PCB上是十分昂贵的,大板就要500+RMB,如果用拼版方式将会节省很多打板费用
拼板如上,预留了M3螺丝孔以加强结构
思路大致如下:
我们可以把一个大的数字板做成一个PCB板,然后打10张,通过跳电阻的方式来选择是哪张板,这样只需要打一次10张PCB(10x10以内,20元),再用对插针连接,便可省钱。
背部需要连接的插针如下,打叉不用焊接,测试用
上图为跳线原理图,上面的是选择第几个管,下面的是选择芯片组1还是2
对应如下图
SEG1/2_数字为选择数码管,为12V共阳端,只需要焊一个,带ABCD后缀为芯片组,比分数字为芯片组1,24秒倒计时为芯片组2,要全部焊接
使用语音模块我们需要烧录语音文件进入语音模块的FLASH中
插入USB连接电脑
电脑此时会出现一个U盘磁盘,先删除里面的所有文件,然后把附件ZH.7z内文件全部放入U盘中
U盘内ZH文件夹
ZH文件夹内放入语音文件
MAX7219代码原理之前的航顺已经讲了,基于原来的代码上做了很多改进优化,加入了许多功能。
Write_Max7219(uchar num,uchar address,uchar dat,uchar dp)
这个函数加入了小数点是否显示
bcd_Max7219(void)
这个函数将模式设置为bcd译码模式
lum_Max7219(uchar num,uchar lum)
设置第几组管的亮度
full_Max7219(void)
全显示
fullclear_Max7219()
清屏
不过这些代码全部写在main中,应该写在新的.c文件中
语音模块使用串口通信,开启串口配置就不说了
我们来看看语音模块的通信格式
我们使用的是组合播放,一起播放分数
知道了通信格式后,还需要知道语音表:
就是烧录进语音模块ZH文件夹下的语音包对应的数字或中文
我们需要用到组合播放,格式如上
比如播报:123比321
可以用自带的软件生成看看格式
AA固定;1B为组合播放模式;0E为播放了多少曲目,现在只有7首,一首占2个,因此该位也就是14,0E;30和31就是16进制的0和1,后面同理,33就是3等。最后一位是校验和,对前面所有发送数据加起来取低两位。
为了曲目相同,因此我选择固定曲目的形式对第三位固定。
考虑最长播报应该是:?百?十?比?百?十? 一共11位,因此第三位长度码为22,即0x16
空的字节可以用语音表中的空0.02秒空白语音代替,也可以用不存在的语音代替,代码中使用0x39,0x39代替,即第99个语音包,实际上不存在,因此会直接跳过。
语音组合:
实际播报会有很多特殊情况,比如:
0:0 播报:零比零。
错误播报:零零零比零零零
1:2 播报:一比二
错误播报:零零一比两
10:100 播报:十比一百。
错误播报:十零比一百零零
101:102 播报:一百零一比一百零二
错误播报:一百一比一百二
111:110 播报:一百一十一比一百一十。
错误播报:一百十一比一百十
这些需要做特殊优化,这些已经在代码中写好。
比如:
十位0播报条件是百位不为0,并且个位也不为0,这样播报100时十位直接跳过,101时十位零又播报。
十位1播报条件是百位不为0,具体可以查看代码。
校验和:
我们发送的长度最长不超过26位,因此都是存在一个voice的数组中,通过分数判断然后存储对应位的语音数字
(voice数组应为25才对)
串口发送格式要求我们最后一个数据是做前面所有数组求和结果的低2位
我们需要对前面25个数组求和,然后取他的低2位做最后一个数据发送出去
这样数据就发送出去了
DP的电阻请严格按照上图阻值贴,之前没注意全都贴和其他位一样的。
然而DP位二极管是只有两个的,因此会把点烧掉,视频中小数点就是烧掉了
实际上DP应该用7.4V点亮更佳而不是12V。
白嫖梁山开发板PCB券和商城券
梁山开发板视频教程具体清晰,资料目前官方还在完善,硬件也有需要修改的地方,等正式上线后应该问题都会解决。
实际比赛中使用的样子
!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。
EEWorld Datasheet 技术支持