ROS专栏—基于STM32F103的INA219电源数据采集

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

一、专栏介绍

这篇博客为ROS小车专栏第一篇,自己想要做一个ROS小车,同时通过CSDN平台记录我的制作过程,为后来者提供一些参考吧,恩我也是从零开始摸索,可能会有很多错误和问题,希望大家多多包涵。

二、本文内容

本文主要内容介绍如何通过STM32使用I2C接口通过INA219采集电池数据,主要包含功率、电压、电流等关键数据。

硬件是我自己设计的,我这边也会展示相应的硬件设计原理图,可以作为模块加入到自己的设计中,感兴趣的伙伴一起看下去吧!

三、硬件设计

硬件设计已经开源,文末会提供链接

硬件设计原理图(嘉立创)  

 PCB的3D图大概这个样子

 这个硬件设计已经经过实际测试了,没啥毛病,有需要的朋友可以直接拿过去用,INA219有两种封装,使用嘉立创的图给大家展示一下:SOT-23-8、SOIC-8

这两种封装区别不大,我都试过差不多,个人根据自己的选择即可。 

注意:A0\A1决定了INA219的地址,个人可以根据需求设计,手册上面很清晰

手册文末也会提供,直接减少搜索资料的麻烦

电源部分,我这里给到3.3V,因为一般都是配合单片机使用嘛,感觉3.3V也比较方便 

四、代码部分

代码网上有很多,这部分怎么说呢基本都一个样,也没必要重复造轮子。软件I2C,根据手册去操作对应寄存机就好了。个人感觉有时候代码可以直接复制,修修改改也就熟悉了这部分的具体操作,CV工程师就是我了,哈哈哈哈。

//这个头文件名字无所谓,我是临时使用一个工程改的,就这个名字吧,自己用可以改一下
#include "bsp_i2c_gpio.h"

u8  ina219_busVolt_LSB_mV = 4;   // Bus Voltage LSB value = 4mV
u8  ina219_shuntVolt_LSB_uV = 10;  // Shunt Voltage LSB value = 10uV
unsigned short ina219_calValue = 0;
 
u32 ina219_current_LSB_uA;
u32 ina219_power_LSB_mW;
 
u8 ram_for_ina219[60];
u8 INA219process_flag;

#define Open 1
#define Close 0
 
void INA_SCL_OUT(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
 
    RCC_APB2PeriphClockCmd(INA219_I2C_GPIO_CLOCK, ENABLE);
    
    /* Configure I2C1 pins: PB12->SCL->OUT */
    GPIO_InitStructure.GPIO_Pin = INA219_I2C_SCL_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(INA219_I2C_PORT, &GPIO_InitStructure);
    GPIO_SetBits(INA219_I2C_PORT, INA219_I2C_SCL_PIN);
}
 
void INA_SDA_OUT(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
 
    RCC_APB2PeriphClockCmd(INA219_I2C_GPIO_CLOCK, ENABLE);
    
    /* Configure I2C1 pins: PB14->SDA-OUT */
    GPIO_InitStructure.GPIO_Pin = INA219_I2C_SDA_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(INA219_I2C_PORT, &GPIO_InitStructure);
    GPIO_SetBits(INA219_I2C_PORT, INA219_I2C_SDA_PIN);
}
 
void INA_SDA_IN(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
 
    RCC_APB2PeriphClockCmd(INA219_I2C_GPIO_CLOCK, ENABLE);
    
    /* Configure I2C1 pins: PB14->SDA-IN */
    GPIO_InitStructure.GPIO_Pin = INA219_I2C_SDA_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(INA219_I2C_PORT, &GPIO_InitStructure);
}
 
void INA_IIC_Start(void)
{
  INA_SDA_OUT();
  INA_SCL_OUT();
  
  INA_SDA_SET;
  INA_SCL_SET;
  INA_SDA_CLR;
  INA_SCL_CLR;
}
 
void INA_IIC_Stop(void)
{
    INA_SDA_OUT();
 
    INA_SDA_CLR;
    INA_SCL_SET;
    INA_SDA_SET;
}
 
void INA_IIC_Set_Ack(unsigned char ack)
{
    INA_SDA_OUT();
    
    if(ack)
    {
      INA_SDA_SET;
    }
    else
    {
      INA_SDA_CLR;
    }
    
    INA_SCL_SET;
    INA_SCL_CLR;
}
 
unsigned char INA_IIC_Get_Ack(void)
{
    unsigned char ack;
 
    INA_SDA_IN();
    INA_SDA_SET;
    INA_SCL_SET;
    if(INA_SDA_TST)
    {
      ack = 1;
    }
    else
    {
      ack = 0;
    }
    
    INA_SCL_CLR;
 
    return(ack);
}
 
void INA_IIC_Write_8bits(unsigned char dat)
{
  unsigned char i;
  
  INA_SDA_OUT();
  for(i = 8; i; i--)
  {
    if(dat & 0x80)
    {
      INA_SDA_SET;
    }
    else
    {
      INA_SDA_CLR;
    }
   
STM32_INA219电流电压检测是一个嵌入式系统中的重要应用,涉及到微控制器(MCU)STM32与传感器芯片INA219的交互,用于实时监测电路中的电流和电压。在这个项目中,我们主要关注如何利用STM32的IO模拟I2C通信协议来与INA219进行数据交换,以及如何实现宏定义以提高代码的可移植性。 STM32是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M内核的微控制器系列,具有高性能、低功耗的特点。它广泛应用于各种嵌入式系统,如物联网设备、工业控制、消费电子等。STM32的IO端口灵活性高,可以模拟多种通信协议,包括I2C,这使得它能与众多外部设备进行通讯。 INA219是一款集成了电流、电压检测功能的传感器,由Texas Instruments(TI)制造。该芯片能够提供精确的电流、电压测量,具有宽范围的电流检测能力,适用于电池管理系统、电源监控和工业自动化等领域。INA219支持I2C接口,通过这个接口,STM32可以读取到传感器采集的数据。 在实际应用中,STM32使用IO模拟I2C通信协议,主要是因为部分STM32型号可能未集成硬件I2C模块,或者为了节省资源和提高设计的灵活性。IO模拟I2C需要通过编程控制STM32的特定IO引脚模拟SCL(时钟线)和SDA(数据线)的高低电平变化,以实现与I2C总线上的设备通信。这需要对I2C协议有深入理解,包括起始信号、停止信号、地址识别、数据传输和应答机制等。 宏定义在项目中起到了关键作用,它们可以将常量、函数或复杂的操作封装起来,方便在不同项目中复用和移植。例如,可以定义用于配置INA219的寄存器地址和控制字的宏,以及用于I2C通信的时序和延迟的宏。这样,当更换MCU或调整系统参数时,只需修改这些宏定义,而无需改动核心的通信逻辑。 在提供的两个压缩包文件中,“INA219例程.rar”可能包含了示例代码,演示了如何用STM32实现INA219的初始化、数据读取和处理。而“INA219驱动.rar”则可能包含了一套完整的INA219驱动程序库,供开发者在自己的项目中直接调用。 总结起来,STM32_INA219电流电压检测项目涉及的知识点主要包括: 1. STM32微控制器的基本原理和IO模拟I2C通信; 2. INA219电流电压传感器的工作原理和I2C接口; 3. I2C通信协议的理解与实现; 4. 宏定义的应用及其在提高代码可移植性中的作用。 对于开发者来说,掌握这些知识点不仅能实现电流电压的精确检测,还能够提升在嵌入式系统设计中的技能。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值