家里有个以前做的挺漂亮的床头灯,这次想通过本次竞赛培训活动,学习知识,将这个以前的作品改造成物联网设备。
左选右选,最终还是选用了stc15f104w 这款单片机。
本来不太想用stc15f104w,感觉io口不太够用,但根据功能数了一下,跟esp-01s用串口传输数据,占用俩io;连接触摸感应芯片BS801B,占用一个;ws2812使用esp-01s的那一个io口控制,这样一来甚至还多出几个io呢。
下面说说我整理出使用stc15f104w的优势
也考虑过stm32f103c8t6,80c51这样的老牌单片机,但前者的io浪费得厉害,后者还得配外围电路,晶振啊电容啊什么的,占地方。经过上边的比较分析,终于打定主意就用stc15f104w了。
大概需要用到的是 STC15F104w、ESP-01s、AMS1117、BS801B、NCE3401AY等
这些元器件的电压参数如下
名称 | 工作电压(V) | 备注 |
---|---|---|
STC15F104w | 3.8-5.5 | |
ESP-01s | 3.0-3.6 | |
BS801B | 2.2~5.5 |
这,是一个让人头秃的步骤
但是做好了之后可以为整个开发过程提供极好的指导作用。
我的灯的外壳的骨架是木条,存放电路的地方长这个样子:
可以看到,左边留有type-c接口位置的木框厚度为5mm。
这意味着我必须选一个比较长一点的type-c母座,不然公头插进去够不着。
我把立创商城的所有母座都翻了一遍后,只找到了几个比较符合要求的:
不用它的原因:用这个的话,焊好口朝上,位置不对。虽然说可以给他单独搞个小板,但是呢......麻烦啊,还得给小板连线啊什么的,这样太麻烦了。
不用它的原因:同上 ,而且我焊工太渣,但引脚太多还是贴片的(焊这样的type-c有过惨痛教训), and ......
采用原因:引脚较少,画板子的时候把封装重新编辑一下,把引脚那一端移到板子边缘就好了。
BUT...
正当我开开心心的去画原理图的时候,发现一个问题
(左图来自商城规格书)
??????这都是啥 这都是干啥的? 哪个是哪个??????
短暂的思索了一会儿,我觉得这应该可能在type-c的引脚定义里面有,浏览器走一波~
不出所料
OK了,终于可以愉快的画电源部分了~
note: 那四个 “0” 是母座金属外壳的四个孔位,可以接地处理也可以不接。我选择不接地是因为,我感觉的烙铁功率不太够,接地的话散热太快了不好焊(指大面积铺铜接地处理的情况下)。
note: 查看手册,手册推荐的应用电路图中,Kout接了个上拉电阻
关于拉电阻的问题我也搞不太明白,但我的理解是:
使用拉电阻,可以将这条信号线上的电平强制设置为一种稳定的状态,通过上拉/下拉来选择要配置为什么状态,即平时的时候是高是低。这条信号线上要检测的信号为高电平,就配置为下拉电阻;要检测的信号为低,那就配个上拉电阻。
以本设计为例,我电路图配置的是:有触摸输出低电平,那么就把拉电阻设为上拉电阻。当无触摸的时候,信号线一直为高电平,而当人触摸后,Kout输出低电平,这时上拉电阻那条电路产生向BS801B内部流动的电流,而Kout输出低电平相当于接地,这样一来,信号线就被拉低了,线路上就产生了单片机要检测到的低电平信号。
故将原理图修改,添加上拉电阻:
开关mos我直接照着手册画的,NCE3401AY的手册图:
又出大问题...
原理图画到STC15f104w单片机了,就在我 吃着火锅唱着歌 查着资料听着歌的时候,我发现
它!没!有!串!口!!! 这咋办啊,虚拟串口我不见得会写啊!
咋办啊这~
老话说得好: 官网是个好东西
网上找太杂,便先去官网逛逛吧 ~_~
一如既往的辣眼睛,往下翻
卧槽我看见了什么
库函数是个好东西!
真是太棒了!!
这是它的描述,真香
模拟串口引脚的定义方法如下
总结 : stc15f100系列没有硬件串口,所以想要使用串口,应该使用软件模拟串口来实现。单片机的P3.0(5脚) 为RXD,P3.1(6脚)为单片机TXD,下载时也是用这俩口,需要冷启动。
我不想把用P3.0、P3.1当做与ESP-01s通信的串口,因为调试程序时需要反复下载代码验证,如果用3.0、3.1口的话,还得一直拔插ESP-01s,这样是很麻烦的。而且由于高度限制(板子高度需要小于1cm)的原因,我应该不会用排针母座,而是直接把ESP-01s焊在板子上,所以我必须另找IO。
于是 原理图成了这样
完美了,刚刚好把所有IO全部用上。开始的时候计算的还有盈余,现在刚刚好,不多也不少。
在画这个的原理图的时候,我遇到一个问题:串口电平匹配问题。
以下是解决过程
note: 单片机的串口输出的高电平与其供电电压一致。
ESP-01s的串口电平是3.3V,最大耐受也是3.3V。
也就是说,它的RXD无法接收来自STC15f104w这款5V单片机的ttl串口电平,会导致ESP-01s的损坏。
但是呢,(3.3V)TXD --> RXD(5V) 是不需要做处理的,为什么呢?
通过查看手册
STC15系列单片机的手册,我们可以发现,只要输入电压大于2V,就会被判定为高电平。ESP-01s的高电平是3.3V,会被识别判定为1,高电平。
经过以上分析我们知道:只需要做(5V)TXD --> RXD(3.3V)这一路的电压匹配即可。
经过群里许多人的帮助,我最终选择了 74LVC1T45这款电平转换IC
将它布置在单片机的TXD上
现在可以进行下一步操作了:画ESP-01s的电路。
有几点注意>
原理图如下
notes: 测试ws2812灯带的时候,我一开始是直接把灯带的输入端接引脚,结果发现现象很奇怪。莫名其妙的一会儿能用一会儿不能用,很不稳定,百思不得其解啊。
不过我很快发现一个被我忽略的点:又是电压匹配
esp-01s的io输出电压的高电平与其vdd一样,是3.3V。而3.3V,可能不会使ws2812芯片判定为高电平。
这是ws2812的手册。从这里我查到,ws2812把高于0.7*VDD的信号电压认为是高电平。我的ws2812的VDD即供电电压是5V。所以,高于3.5V的信号才会被当作高电平;也就是说,我们的esp-01s的3.3V的高电平,是被当作低电平来处理的,ws2812的信号输入端一直都是低电平。
对esp-01s的输出做一次电压转换才可以使用。
我采用的是1N4148而不是1N4007,是因为4148的开关速度要比4007快,不会出现其他问题。
前面贴出来esp-01s的原理图,就是已经补全了的完整的电路图,带有io口的电平转换。
上图包含调试下载接口以及esp-01s的启动模式(运行/下载)切换
至此,原理图部分顺利结束
其实没啥说的,怎么画板子看官方教程就好,我就不班门弄斧了。
按照外壳空间大小设计板子尺寸
按这个尺寸设计布局,到时候把板子调试测试好,用热熔胶固定到壳子里。
因为我这板子不涉及到高速电路,所以布线在DRC规则下随便布,基本上就是个连连看游戏。
(自动布线功能可以用来验证当前布局是否可行,原理图我已经做好模块化,分模块手动布线即可。)
唯一要注意的是esp-01s的布置,其手册相关如下:
好了,开始画板
大概是这个样子:
在丝印上添加亿点注释:
硬件 | 开发软件 | 使用的库 |
---|---|---|
ESP-01s | arduino | FastLED库、Blinker库 |
STC15F104w | keil | STC15系列官方库 |
blinker Arduino支持库
FastLED库说明文档-太极创客
代码:还没写完
未完待续......
!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。
EEWorld Datasheet 技术支持