本帖最后由 小叶三千 于 2021-5-13 22:30 编辑
#申请原创# @21ic小跑堂
我们通常使用的可调电源,普通的可调电源一般会有两个内容的显示,一个是当前调至的电压值,一个是当前用电器的电流值。下面介绍一下使用INA226的功率芯片制作这个既能显示电压值,又能显示电流值的表头制作。 一.所需硬件 1. INA226功率芯片,这个是采集数据的主要器件,下面会有介绍。 2. 屏幕(这里使用的OLED12864-7线SPI),用于显示电压电流值。 3. 单片机(这里使用的是新唐N76E003),因为我们要把采集的数据转换成我们所需要的数值显示在屏幕上,所以不需要太强大的MCU,一般的最小的51即可。 4. 采样电阻——100mΩ。INA226需要用采样电阻来获取电流值,所以这个电阻尽量选择精度高一点的,功率大一点的。 5. 剩下的就是一些单片机的基本外设了,电容、电阻等等就不多说了。 二.INA226简介
直接放截图吧,更详细的内容看附件的芯片手册。
三.硬件PCB 根据INA226的手册,简单的画了一个PCB,将单片机、OLED屏也集成到了PCB中,AD工程请见附件。 原理图:
PCB图:
四.软件编写 1. INA226驱动,IIC通信,需要在单片机进行IIC驱动编写,具体可见附件的IIC_INA226.c
2. INA226的读写 INA226有10个寄存器,其中4个是可读可写,6个只能读取
每个寄存器的意义请看下图,程序里也有。
之后就是INA226的读寄存器和写寄存器
INA226_data.Read_Data[1]是输入的电压值,也就是iread(0x80,2),读取的0x80的地址(本机地址),0x02是读取的寄存器,由手册可知,0x02代表的是总线电压。如果不准的话,可以更改后面的系数1.25。我这里感觉还挺准的。 INA226_data.Read_Data[0是输入的电流值,也就是iread(0x80,4),0x04是读取的寄存器,由手册可知,0x04代表的是电流,INA226_data.Var_Iref是系数,也是同理,校准用的。
3. OK,主要的已经搞定,接下来就是OLED12864的驱动了,我使用的是大字体显示,本来屏幕就小,那么字就大一点。
下图是电流和电压的数值显示
4. 基本差不多了,还有注意的是初始化的时候,INA226需要写入采样时间和电流的校准值
寄存器0x05,校准寄存器,0x0036是怎么算出来的呢,手册上面有公式。 公式:0.00512/( 电流分辨率0.001A * 取样电阻0.1)=51.2=0x0033 之后感觉不是很准,我把数值上调到了=0x0036 寄存器0x00,采样时间寄存器。设置转换时间204us,求平均值次数128,采样时间为204*128,设置模式为分流和总线连续模式。
五.实物调试
接下来就是把程序烧录到单片机中,进行调试了,下图是我制作完成的实物,大家凑合看吧,看着有点Low,哈哈,调试了好长时间,也换过好多硬件调试,上面是我制作的经验心得,分享给大家。
|