操作视频:基于STM32设计的4G智能插座一_哔哩哔哩_bilibili
资料包下载链接:https://pan.baidu.com/s/15gD5mNYRcF0W_N_SfUuwrw?pwd=1234 提取码: 1234
底板链接:https://item.taobao.com/item.htm?id=901342847635
1 硬件详解
1.1 STM32最小系统板
芯片型号是STM32F103C8T6,下面这个文章对这个板子介绍比较详细,有兴趣可以学习一下;
基于STM32的最小系统电路设计(STM32F103C8T6为例)_stm32微控制器和最小系统电路-优快云博客
1.2 BL0942采集电路
采样是电阻直接采样的方式,通过串电阻分压采集交流电压,通过合金电阻差分采样采集电流;然后芯片内部计算得出功率及用电量等值;采样的详细介绍可以参考这个文章:HLW8032交流电参数模块采样原理讲解-优快云博客
这里比较容易不理解的地方就是BL0942的芯片GND是直接接到交流线的其中一根线的,也就是BL0942的GND直接接交流电了,这不会弄坏芯片或者导致接串口是把GND接到电脑上损坏吗?
第一点:BL0942会不会被烧坏?不会;因为GND是一个参考电平说法,如果我把220V当做另一个电源的零点,那225V可能就是这个电源的5V。还有就是测量ADC也是需要参考地才能测量准确的。
第二点:这个交流电的“GND”会不会烧坏外接电脑?不会,主要靠实物图中红色框的那个黑疙瘩,这个叫直流隔离电源,作用是把输入的3.3V电源完全隔离开成不需要共地的另一个3.3V电源;也就是说BL0942芯片的GND和STM32的GND不是直接相连的。
1.3 继电器驱动电路
这是一个比较常规的低电平驱动继电器电路,KA_IO直接接STM32的引脚;当KA_IO引脚为低电平时,U2(光耦开关 )内部灯点亮,所以U2的3和4引脚导通;然后U17(S8550三极管)基极就被拉低为低电平,U17的发射机和集电极导通,此时继电器的线圈两端就是+5V和GND,线圈通电,继电器闭合,从而继电器的2和5引脚导通。
原理图中D2是一个续流二极管,就是在继电器线圈断电的时候,线圈两端会产生一个自感电动势,这个自感电势会造成破坏,而在继电器线圈两端反向并联一个二极管,为自感电动势提供一个放电电流回路(续流),进而起到保护作用。
1.4 蜂鸣器电路
这个电路比较简单,用的蜂鸣器是有源蜂鸣器,就是通电就会响。主要是使用U20(S8550三极管)作为一个开关;R37是一个上拉电阻,保持电路稳定;R25是一个限流电阻,保护蜂鸣器的。
1.5 4G模块
4G模块用的是银尔达的D100P模块(屏蔽盖印的是Y100E),为了方便用的是DTU的固件,好处不需要STM32进行复杂的AT指令配置,直接在银尔达后台配置好参数,4G模块上电后自动进行配置,STM32只需要串口收发数据就可以了。缺点就是STM32无法获知4G模块的状态,不过可以通过观察4G模块的指示灯来分析4G模块的状态:
2 软件介绍
2.1 阿里云平台
阿里云物联网平台其实只是作为一个公网载体,负责转发两个设备之间数据转发的功能。当然物联网平台还有其他很多的功能,有兴趣的可以仔细研究一下。物联网平台设置比较繁琐,不过只要按照视频流程一步一步设置基本没有任何问题的;只要细心一点,标识符或者复制MQTT参数别出错。
在解析器只用了两个解析器,一个是负责把STM32上报的数据转发给手机端,另一个是负责把手机端的控制数据转发给STM32;还支持其他功能的解析器,例如设备上下线的消息也可以进行转发,不过因为4G模块如果直接断电断线,阿里云平台一般是轮询2分钟没有上报数据才判断设备断线的。
2.2 微信小程序
博主本人对小程序代码不熟悉,代码也是通过百度下载一个例程来修改的;所以小程序界面丑到爆,如果有朋友熟悉小程序代码可以优化一下,不介意的话可以发给我替换一下。
小程序上注意的点:
微信开发者工具上的这个AppId必须要是自己的,不然编译或者真机调试的时候都用不了。
如果编译的时候报域名的错误,就检查一下项目配置里面有没有把域名添加到合法域名里面:
还有就是别复制错了阿里云的设备三元组数据:
2.3 STM32代码
因为4G模块采用的是DTU固件了,所以STM32的代码比较简单,用了三个串口,
串口1是调试用的,代码里面的“printf”都是从串口1输出,调试的时候可以直观知道代码状态;
串口2用来接4G模块,如果想上报数据到云平台,就直接往串口2发送对应格式的字符串就可以了;当然串口2收到的数据就是云平台下发的数据,从里面解析出控制继电器的字段然后就可以了;
串口3是用来接BL0942数据的,对于BL0942的数据解析可以参考这个文章:BL0942电参数采集模块操作说明及疑问解答-优快云博客
如果代码想实现大功率设备自动断电可以参考下面代码;如果想判断大电流,可以在165行插入判断C1的值。
3 常见疑问解答
3.1硬件类
3.1.1 BL0942的GND和交流的零线连在一起有危险吗
BL0942的GND和交流的零线相连是为了提供一个参考地,不然无法准确测量电压和电流;当然也不会对BL0942芯片产生影响,对于BL0942而言,交流的零线是一个地线。
那这个交流零线的GND会不会对STM32造成影响?
不会,因为做了隔离;如下图,U18是一个直流3.3V的隔离电源,右侧是STM32用的GND,左侧是BL0942用的GND,这两个GND是没有连通的,所以这个交流零线的GND和STM32的GND并没有影响。
3.1.2PCB设计类问题
- 电流采样电阻的差分走线
这种走线也叫开尔文接法,目的是为了提高测量精度;电阻两端挖的过孔是为了后面加锡方便,因为走线是从背面走线过来的,到测量电阻这里转了正面,挖孔是为了保证能正常通过大电流。
- 为什么BL0942用的GND不直接从采样电阻取,而是从接入端子取
这个也是为了防止GND的干扰导致电流测量精度误差大,因为采样电阻测量的电压非常小; 一般十几毫伏,所以为了防止干扰,单独从接入端子走一根GND过去给BL0942。
- 走线开窗(没有阻焊层)有什么作用
开窗是为了后面加锡方便,为什么要加锡呢,不是有走线了吗?PCB电路板的铜是有厚度的,一般是1OZ,大概是35um的厚度;所以如果通过大电流就会容易发热烧断,所以需要自己加厚走线焊锡,增大走线。
- 这里挖槽有什么作用
挖槽的目的是电气隔离,PCB板开槽能用来防止爬电距离不够、PCB板受潮后漏电流加大。PCB开槽后,短距离采用直接空气隔离,电气间隙,其耐压将得到一定的保证