这颗芯片,我把握不住
使用十年的笔记本电脑退役了,留下了一块笔记本电源,19V4.7A的输出能力,于是想要做一个可调电源,将19V转为需要调节的电源,此为背景。

先去立创开源广场搜索下「可调电源」以及「USB电流表」,来参考下。
可调电源部分不详表,使用立创EDA画好PCB,蹭免费打样打板后焊接好后就OK了。电压、电流检测及显示部分采用立创开源广场用的最多的方案 INA226 单芯片采集电压、电流、功率,配合STM32单片机+OLED显示。老套路,使用立创EDA画好PCB,蹭免费打样打板,然后焊接,调试,于是有了这篇文章。
第一步、STM32工程建立,uart输出OK
使用STM32CubeMX图形化工具,配置好I2C、uart、时钟后,直接生成代码,然后使用 HAL_UART_Transmit API来通过uart发送数据就OK,此时自信小伙信心满满,就这?很轻松嘛~
第二步、I2C驱动OLED
淘宝商家就是给力,直接提供了示例程序,拷贝下,然后改下操作I2C的部分,直接使用HAL 库API函数替代,很轻松,OLED点亮了,就是这显示咋有点儿问题呢?

先让OLED全灭、全亮显示下,看是不是屏坏了

编译、下载、开机,全灭,全亮正常显示,OLED屏幕没坏,查代码吧。淘宝商家说了,我们示例程序是验证过的,没问题的……
区别在于我只是把他们GPIO模拟的I2C操作,换成了HAL API来操作,那就重点查下写到OLED的这部分……

很快,我就找到了问题,在 OLED_Refresh 函数更新显存到OLED的时候调用了 HAL_I2C_Mem_Write ,就这里与我写的全灭、全亮 OLED_SET_ONE_V函数不一样,于是把这里也换成OLED_WR_Byte试一试,结果显示横线问题解决了……我好像明白为什么了。点一下:二维数组,指针 。换成OLED_WR_Byte传入了正确的数据,就能正常显示了
第三步、INA226初始化
INA226规格书中地址描述如下:

我的电路图如下:

然后,我自信满满的用0x40来对INA226初始化,结果毫无疑问的初始化失败了。我以为需要8bit地址,于是用0x80地址进行I2C通讯,然后,继续失败。上万用表,量它供电,3.3V正常,量A1 A0 pin脚对地电压,0V,正常啊,百思不得,算求,不管你地址是多少,直接扫I2C地址,不信扫不出来!代码如下:

看到注释了吗?实际地址为0x44,与A0 A1脚测量值对不上……
找到INA226的地址了,就可以对它进行初始化了,这没啥,看规格书,或者看大神文章都能看懂
参考 CSDN 怪都督的文章:
https://blog.csdn.net/weixin_44625313/article/details/113829226
第四步、测量不准确
INA226搞定后,结合OLED显示,很快搞定了,信心满满的拿来测试下电压,卧槽,怎么测试不准确啊,电压偏高,稳压电源输出9.1V INA226读到的电压是9.59V……

看规格书描述,测试电压读数需要乘以1.25mv,得到最终值,可是,我已经按它要求,乘以1.25mv 了啊!
又想起读到的ID与手册描述不符,这手册,不是,这芯片它不正经吧?我先测量几个值,计算下!
电压4.1389V,02H读取值3482 LSB=4138.9/3482=1.1886
电压5.350V,02H读取值4510 LSB=5350/4510= 1.186
电压9.100V,02H读取值7672 LSB=9100/7672=1.186
电压13.414V,02H读取值11307 LSB=13414/11307=1.186
这 LSB分明是1.186!乘以1.25可不是测量电压变高嘛!改代码,读取值乘以1.186,编译、下载、测试,这次就对了嘛
电压搞定后,搞电流,结果电流读值也不准,看手册:


这…… CalibrationRegister的值是计算出来的,使用我计算的,测量电流不准确,使用大神的值,电流还是不准确
参考 CSDN 怪都督的文章:
https://blog.csdn.net/weixin_44625313/article/details/113829226
考虑到我这芯片,ID对不上,VBUS的LSB对不上,那这电流对不上是不是也就很正常了?这芯片应该不是正儿八经的原厂芯片,不知道从哪里来的芯片,只能说淘宝芯片水太深,把握不住。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)