设计目的
设计该电流计是为了以后调试板子的时候能在通电的,第一时间里知道流过板子的电流大小,确保当板子内部有短路时能够第一时间知道。
设计原理
该电路板所实现的功能是对电流和电压的实时监测,电压监测采用最简单的电阻串联分压,电流检测使用市面上流行的集成芯片INA226。
设计材料
经过原理分析得出大致所需材料,
单片机采用stm32f103c8t6,有点大材小用了;
单片机供电电源3.3v,使用HT7533稳压芯片;
两个分压电阻10k和1k;
电流监测芯片INA226;
电流监测电阻根据INA226的分压寄存器算出允许的最大电流根据实际需要,选择检测电阻0.01欧姆;
两个usb-A口;
显示使用I2C通信的OLED屏。
设计电路原理图
根据刚才分析的材料,配置外围电路;具体电路可以参考芯片手册;
设计PCB
这里有个地方需要注意:
这里检测电阻的阻值十分的小只有0.01欧姆,所以连接电阻的导线尽可能的粗一点和短一点,就是VOUT和VIN之间的导线尽可能的短,并且尽量不要打孔;(本人就因为之前的导线电阻问题,导线电阻经过测量达到了0.05欧姆,造成误差,可以在程序设计中补偿)。
程序编写
这里的current代表电流值由0.01和0.05电阻,由ina226电流检测的原理得知,ina226是将检测电阻两端的电压值进行处理,所以我们可以直接读取ina226寄存器的值再除以6,在实验中得知除以5也可以。
int main(void )
{
uint16_t a[10];
uint16_t sum=0;
uint16_t CAL;
uint16_t aver;
uint16_t data;
uint16_t shunt;
uint16_t current;
uint16_t power;
uint8_t ACK,ACK1;
uint16_t vol;
uint8_t i;
uint16_t temp1,temp2,temp3,temp4;
OLED_Init();
Delay_ms (100);
AD_Init();
ACK=INA226_WRITEBYTE(0x4127,0X00);
// ACK1=INA226_WRITEBYTE(0X0A00,0X05);
ACK1=INA226_WRITEBYTE(0X0D55 ,0X05);
CAL=INA226_READBYTE(0X05);
// ACK=INA226_WRITEBYTE(0x0A00,0X05);
// data=INA226_READBYTE(0x05);
shunt=INA226_READBYTE(0x01);
current=INA226_READBYTE(0x04);
power=INA226_READBYTE(0x03);
// vol=Get_Value();
// OLED_ShowNum(3,1, shunt , 8);
OLED_ShowNum(4,1, CAL , 8);
while(1)
{
data=INA226_READBYTE(0x05);
shunt=INA226_READBYTE(0x01);
current=(INA226_READBYTE(0x04))/5;
power=INA226_READBYTE(0x03);
// vol=Get_Value();
Delay_ms (10);
sum=0;
for(i=0;i<10;i++)
{
a[i]=Get_Value();
Delay_ms (5);
sum=sum+a[i];
// OLED_ShowNum(3,1, Get_Value() , 8);
// OLED_ShowNum(1,1, sum , 8);
}
aver=sum/10;
// OLED_ShowNum(2,1, aver , 8);
vol=(aver*3300)/4096;
OLED_ShowNum(1,1, vol , 8);
OLED_ShowNum(2,1, current , 8);
OLED_ShowNum(3,1, shunt , 8);//shuntµÄ·Ö±æÂÊÊÇ2.5uv
// vol=aver*11*13*1000/4096;
// temp1=vol/1000;
// temp2=vol/100%10;
// temp3=vol/10%100%10;
// temp4=vol%10;
// OLED_ShowNum(1,1, temp1 , 1);
// OLED_ShowChar(1, 2, '.');
// OLED_ShowNum(1,2, temp2 , 1);
// OLED_ShowNum(1,3, temp3 , 1);
// OLED_ShowNum(1, 4, temp4 , 1);
// OLED_ShowString(1, 1,"hell0 world");
}
具体的代码细节可以关注点赞收藏,之后私信我。
下一篇重点讲解ina226几个寄存器的用法
BOOM清单
No. | Quantity | Comment | Designator | Footprint | Value | Manufacturer Part | Manufacturer | Supplier Part | Supplier |
1 | 4 | 10uF | C1,C2,C3,C10 | C0603 | 10uF | 10uF | SAMSUNG(三星) | C15415 | LCSC |
2 | 1 | 1uF | C5 | C0603 | 1uF | 10uF | SAMSUNG(三星) | LCSC | |
3 | 3 | 0.1uF | C6,C7,C11 | C0603 | 0.1uF | 10uF | SAMSUNG(三星) | LCSC | |
4 | 2 | 22pF | C8,C9 | C0603 | 22pF | 10uF | SAMSUNG(三星) | LCSC | |
5 | 1 | X5511FV-04-C70D30-1000 | H1 | HDR-TH_4P-P2.54-V-F-3 | X5511FV-04-C70D30-1000 | XKB Connectivity(中国星坤) | C2684750 | LCSC | |
6 | 1 | 2.54-1*4P_JX | P1 | 2.54-1*4P_TIGHT_JX | C115245 | LCSC | |||
7 | 1 | 0.01 | R2 | R2512 | 0.01 | 25121WJ0101T4E | UNI-ROYAL(厚声) | LCSC | |
8 | 1 | 100kΩ | R3 | R0603 | 100kΩ | ERJ3EKF1003V | PANASONIC(松下) | C189597 | LCSC |
9 | 3 | 10kΩ | R4,R5,R10 | R0603 | 10kΩ | SCR0603J10K | VO(翔胜) | C3017715 | LCSC |
10 | 4 | 4.7kΩ | R6,R7,R8,R9 | R0603 | 4.7kΩ | SCR0603J10K | VO(翔胜) | LCSC | |
11 | 1 | Key_SMD_6x6x6.5 | SW2 | SW-SMD_4P-L6.0-W6.0-P4.50-LS9.0-2 | |||||
12 | 1 | STM32F103C8T6 | U1 | LQFP-48_L7.0-W7.0-P0.50-LS9.0-BL | STM32F103C8T6 | ST(意法半导体) | C8734 | LCSC | |
13 | 1 | HT7533-3 | U2 | SOT-89_L4.5-W2.5-P1.50-LS4.2-BR | HT7533-3 | HOLTEK(合泰/盛群) | C66271 | LCSC | |
14 | 1 | INA226AIDGSR | U3 | MSOP-10_L3.0-W3.0-P0.50-LS5.0-BL | INA226AIDGSR | TI(德州仪器) | C49851 | LCSC | |
15 | 1 | 2*p排针 | U4 | 2*p排针 | |||||
16 | 1 | 480370001 | USB1 | USB-A-TH_48037-0001 | 480370001 | MOLEX | C136455 | LCSC | |
17 | 1 | USB-302-T | USB2 | USB-A-TH_USB-302-T | USB-302-T | SOFNG(硕方) | C112456 | LCSC | |
18 | 1 | 8MHz | X2 | OSC-TH_L10.0-W4.5-P5.00 | 8MHz | X49SD8MSD2SC | YXC(扬兴晶振) | C21263 | LCSC |