你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

手把手教你用单片机做一个过流过压保护模块

[复制链接]
STMCU-管管 发布时间:2020-7-30 15:24
手把手教你用单片机做一个过流过压保护模块

; |' }' `- M) F5 }, ?
作者:李洪鹏,樊渊博
  R1 L0 v& R2 L; H$ }
11.png
2 X7 i3 M2 S0 G; E$ Q; H1 ~% w& C
作为电子爱好者,我们经常需要自己搭建电路,测试电路的性能和参数,在实验设备里面,电源是最重要的设备之一,一台好的电源可以给我们的测试带来极大的便利和安全,但是很多爱好者是没有一台正规的实验电源的,只能使用一些廉价的开关电源,或者适配器给电路供电,这样操作存在一定的风险性,可能由于疏忽造成了电源短路,或者负载电流过大,导致电源承受不了这么大的功率,造成电源损坏甚至人身安全问题,这个项目的内容就是给大家提供一个廉价的简单的电源保护方案,保证大家在使用电源测试时的安全
项目简介:
       本项目是一个基于STM32的过压过流保护模块,用户可以通过按键进行屏幕交互,设置过压过流值,当过流或者过压触发后,屏幕会指示相应故障,切断输出,用户排除故障后,可通过按键复位故障,再次接通负载
模块指标:
       过流响应时间:小于600uS
       过压响应时间:小于1.3mS
       输入电压范围:9V~60V
       通过电流范围:0A~10A
系统设计框图:
  
22.png
器件型号确定
整个项目其实我们一开始就考虑过要不要使用纯硬件保护方案,然后STM32只做数据采样显示以及过压过流参考值控制,后面仔细考虑了下,虽然反应很迅速,但是我们希望加入数显,用户可以通过按键修改过压过流值,同时为了减小体积,最终还是选择使用单片机处理的方案,32系列型号比较多,为了充分的利用芯片资源,节省成本,我们采用STM32F031F6这个型号,TSSOP20封装,Cortex-M0内核,48M主频,外设及性能足够项目使用了
为了方便采样电流和电压,我选用了TI公司的INA226,该器件可以监视分流压降和总线电源电压,可编程校准值,转换时间和取平均值功能与内部乘法器相结合,可实现电流值和功率值的直接读取
       OLED屏使用中景园的0.73寸屏幕,分辨率128*88,驱动芯片SH1107,这款屏幕有个很不好的地方就是工作电压过高,7V以上才能工作,我初步设计决定这个模块最好5V也能工作,很明显这个屏幕是不符合需求的,但是负责硬件的朋友非要用这个屏幕,我也就没干预太多,最终还是选用的0.73寸的,需要额外增加SX1308这颗升压芯片,大家可以自行更换常见的中景园的0.96寸或者0.91寸的OLED这两尺寸的,驱动芯片SSD1306,需要自行更换驱动库,注意要更换成硬件IIC驱动,稍微有点费时
       其它芯片没有太多注意的,用的常用的型号
       电源芯片:XL7005(BUCK降压),LP2983(LDO降压),SX1308(BOOST升压)
       MOS驱动芯片:UCC27517
       MOS型号:BSC093N15N85/CSD19534

- F4 L9 s0 P. }/ H
原理图:
8 ^, r& c9 l0 ], m( \
33.png
# `0 Z9 b8 v2 z8 e' h8 ^4 `1 D) `
注:原理图源文件请下载附件查看
简要讲解下电源部分,输入电压通过XL7005进行降压后输出5V电压,然后再通过LP2983降压到3.3V给单片机和INA226供电,另一路通过SX1308进行升压到12V给MOS驱动芯片和屏幕供电
GUI设计:
为了节省屏幕刷新时间,每次只显示一个数字,显示为覆盖式,即不更改之前显示的内容,只把目标区域的内容进行替换,减少清屏和重复内容显示所占用的时间,如下面设计图,只有“299”,“299”,“NORMAL”这些字样位置会进行数据替换,单位“V”,“A”,及背景,不需要显示更新
设计的界面图:
44.jpg
程序设计:
按照预期的功能,我们需要使用单片机完成电压电流的数据采样,屏幕显示内容更新,数据处理这三个功能,其中屏幕显示是一个比较占用处理器时间的过程,中景园官方例程提供的还是软件IIC的驱动代码,为了提高显示内容单次更新速度,就必须将官方的代码进行更改,换成硬件IIC驱动,换成硬件IIC后,时钟开到1MHz(实测IIC跑到1.2M以上屏幕驱动就吃不消了),显示一个8*16像素的数字需要11ms左右,这个时间过长,导致其它进程循环周期过长,查看官方的驱动代码后,发现显示内容数据生成的算法过于低效,算法跟中景园他们家0.96寸的型号不一样,我参考0.96寸的算法进行了更改,将显示一个8*16像素的数字提升到了1ms左右的刷新速度,这个速度还算可以,如果各位对这方面感兴趣,也可以配合DMA+中断,再换成SPI接口的硬件连接方式测试一下速度能不能更大幅度提高;电压电流数据采样部分采用的INA226这颗芯片,带触发输出,但是只能限制一种触发输出,为了稳定起见,在初始化INA226的时候,设置为过流触发,设置过流阈值,直接外部中断触发STM32并进行保护动作,电压保护就采用寄存器轮询方式进行监控,所以屏幕刷新速度直接影响电压保护动作速度,快则几百uS,慢则1ms多,除了这两个需要重点处理,其他部分就是常规的代码编写和优化了
程序流程图:
55.png
66.png

% d( A) Q  Q5 h7 p. w
部分程序截图:
代码都做了大量的批注,有些地方大家不太理解的对照程序流程图辅助理解就好,大家可以根据自己的需求在工程里面删改一些内容,自定义一些功能,有什么建议和问题可以在评论区讨论
   
77.png
88.png
99.png

: i8 q/ ?  B5 H5 M5 R
注:源代码请下载附件查看
制作说明:
将附件内容的PCB工程用AD打开,生成Genber文件或者直接把PCB文件交给PCB生产商打样,然后按照BOM表单进行元器件购买,程序文件使用的Keil 5进行编写的,需要安装Keil 5才能打开,程序下载采用的SWD方式,使用JLINK或者DAPLINK等下载器下载
使用教程:
1.    模块说明:
2.    按键介绍:
SET键:进入/退出设置模式
AN键:复位保护操作(未进入设置模式);进入/退出更改阈值模式
+  键:选中下一个数字(未进入更改阈值模式);当前数字数值+1(更改阈值模式)
-      键:选中上一个数字(未进入更改阈值模式);当前数字数值-1(更改阈值模式)
3.    更改阈值 :
①   按一下”SET键”,进入设置状态
②   按“+键”或者“-键”移动光标选中的数字
③   按下“AN键”,进入更改数字状态
④   按“+键”或者“-键”更改数值大小
⑤   按下“AN键”,退出更改数字状态
⑥   按一下“SET键”,退出设置状态
4.    复位保护动作:
确保当前为显示电压电流状态,不是设置模式界面(如果是过流过压触发了保护,请排除故障再操作,以免多次复位保护导致MOS管损坏)
①   按下“AN键”,即可复位
结语:
做这个项目和写这个教学帖,目的是给一些电子爱好者提供一个过压过流保护方案,可以直接用我们的DEMO工程去制作出来,对于有能力的朋友,完全可以在我们的基础上进行改进,这个项目的硬件部分还可以做很多的优化,大家可以在我的程序框架基础上或者仿照我这个程序系统的设计进行自定义的功能设计和开发,希望这篇教学帖子可以帮个各位,感兴趣的朋友可以点个赞,留个评论,谢谢各位~

7 ^# |3 a: s) Y; f' _/ Y
) ]" Y0 L+ D- Q8 A* t相关资料下载:
5 P1 `  x% @( B6 ?9 v# D PCB文件 (1).zip (4.41 MB, 下载次数: 54)
收藏 3 评论2 发布时间:2020-7-30 15:24

举报

2个回答
子曰好人 回答时间:2020-7-31 09:02:06
管管怎么也发起技术性文章啦
ddgod 回答时间:2020-11-17 00:16:31
您好,我想详细了解一下,可以留个联系方式么

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版