《来实战》过流过压保护模块项目#03:搞定程序设计(数据采样+屏显+数据处理)

大家好,作为电子爱好者,我们经常需要自己搭建电路,测试电路的性能和参数,在实验设备里面,电源是最重要的设备之一,一台好的电源可以给我们的测试带来极大的便利和安全,但是很多爱好者是没有一台正规的实验电源的,只能使用一些廉价的开关电源,或者适配器给电路供电,这样操作存在一定的风险性,可能由于疏忽造成了电源短路,或者负载电流过大,导致电源承受不了这么大的功率,造成电源损坏甚至人身安全问题,这个项目的内容就是给大家提供一个廉价的简单的电源保护方案,保证大家在使用电源测试时的安全。

项目简介:

本项目是一个基于STM32的过压过流保护模块,用户可以通过按键进行屏幕交互,设置过压过流值,当过流或者过压触发后,屏幕会指示相应故障,切断输出,用户排除故障后,可通过按键复位故障,再次接通负载 。

视频内容截图:

模块指标:

过流响应时间:小于600uS

过压响应时间:小于1.3mS

输入电压范围:9V~60V

通过电流范围:0A~10A

项目设计

步骤1

系统框架搭建及核心器件的选型

核心器件的选型

整个项目其实我们一开始就考虑过要不要使用纯硬件保护方案,然后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。

步骤2

硬件系统及GUI用户界面设计

简要讲解下电源部分,输入电压通过XL7005进行降压后输出5V电压,然后再通过LP2983降压到3.3V给单片机和INA226供电,另一路通过SX1308进行升压到12V给MOS驱动芯片和屏幕供电。注:原理图源文件请下载附件查看

GUI设计:

为了节省屏幕刷新时间,每次只显示一个数字,显示为覆盖式,即不更改之前显示的内容,只把目标区域的内容进行替换,减少清屏和重复内容显示所占用的时间,如下面设计图,只有“299”,“299”,“NORMAL”这些字样位置会进行数据替换,单位“V”,“A”,及背景,不需要显示更新。

设计的界面图如上图:

顶部内容为“电路城的LOGO”+Protection Modual字样;

第一栏显示电压;

第二栏显示电流;

第三栏显示状态。

步骤3

程序设计

按照预期的功能,我们需要使用单片机完成电压电流的数据采样,屏幕显示内容更新,数据处理这三个功能,其中屏幕显示是一个比较占用处理器时间的过程,中景园官方例程提供的还是软件IIC的驱动代码,为了提高显示内容单次更新速度,就必须将官方的代码进行更改,换成硬件IIC驱动,换成硬件IIC后,时钟开到1MHz(实测IIC跑到1.2M以上屏幕驱动就吃不消了),显示一个8*16像素的数字需要11ms左右,这个时间过长,导致其它进程循环周期过长,查看官方的驱动代码后,发现显示内容数据生成的算法过于低效,算法跟中景园他们家0.96寸的型号不一样,我参考0.96寸的算法进行了更改,将显示一个8*16像素的数字提升到了1ms左右的刷新速度,这个速度还算可以,如果各位对这方面感兴趣,也可以配合DMA+中断,再换成SPI接口的硬件连接方式测试一下速度能不能更大幅度提高;电压电流数据采样部分采用的INA226这颗芯片,带触发输出,但是只能限制一种触发输出,为了稳定起见,在初始化INA226的时候,设置为过流触发,设置过流阈值,直接外部中断触发STM32并进行保护动作,电压保护就采用寄存器轮询方式进行监控,所以屏幕刷新速度直接影响电压保护动作速度,快则几百uS,慢则1ms多,除了这两个需要重点处理,其他部分就是常规的代码编写和优化了。程序流程图与部分程序截图可在附件提供的资料中查看。

代码都做了大量的批注,有些地方大家不太理解的对照程序流程图辅助理解就好,大家可以根据自己的需求在工程里面删改一些内容,自定义一些功能,有什么建议和问题可以在评论区讨论。

注:步骤4即将更新~

附件下载

原文链接:,转发请注明来源!