回答

收藏

《2024 DigiKey 汽车应用创意挑战赛》树莓派伏安表采集系统

#竞赛 #竞赛 505 人阅读 | 0 人回复 | 2025-02-27

一、项目名称:
      基于树莓派伏安表采集系统
二、项目概述:
      本项目旨在开发一款基于树莓派采集负载设备的电压,电流,功率的系统,并可以在上位机上显示实时数据,并记录分析。采用电流监测芯片,来自于TI的INA226,控制和数据传输接口为IIC总线,可以检测最大36V,4A,其精度为1ma。

三、硬件部分
     核心部分:
  • ?         处理器?:[color=var(--cos-color-text-link)]Broadcom BCM2712四核[color=var(--cos-color-text-link)]Arm Cortex-A76处理器,主频为2.4 GHz,带有加密扩展,每核512KB二级缓存,2MB共享L3缓存。
  • ?         内存?:提供1GB、2GB、4GB和8GB四种运行内存版本。
  • ?         存储?:支持高速SDR104模式的[color=var(--cos-color-text-link)]MicroSD卡插槽,性能是[color=var(--cos-color-text-link)]树莓派4的两倍。
  • ?         视频输出?:两个[color=var(--cos-color-text-link)]HDMI端口,最高支持4Kp60分辨率,支持HDR。
  • ?         网络连接?:千兆以太网RJ45接口,支持双频802.11ac Wi-Fi 5和蓝牙5.0/低功耗蓝牙(BLE)。
  • ?         USB接口?:两个USB 3.0接口和两个USB 2.0接口,支持同时5Gbps操作。
  • ?         其他特性?:配备了实时时钟(RTC)、电源按钮、UART调试连接器等。
    采集部分:
          INA226是一种电流电压监测器,具有I2C或SMBUS兼容接口。该设备监测电流电压降和总线供电电压。可编程的校准值、转换时间和平均值,结合内部乘法器,使得直接读出电流(安培)和功率(瓦特)成为可能。INA226感知的电流是在公共模式总线电压上,该电压可以独立于供电电压在0V至36V之间变化。该设备从单一2.7V至5.5V的供电中工作,典型的供电电流为330μA。该设备在-40°C至125°C的工作温度范围内指定,并在I2C兼容接口上具有最多16个可编程地址。
     接口:
  • INA226:

    • SDA -> Raspberry Pi的SDA(GPIO2)
    • SCL -> Raspberry Pi的SCL(GPIO3)
    • GND -> Raspberry Pi的GND

  • UART:

    • Raspberry Pi的TX(GPIO14) -> 电脑的RX(通过USB转TTL模块)
    • Raspberry Pi的RX(GPIO15) -> 电脑的TX(通过USB转TTL模块)
    • GND -> GND

原理图如下

四、软件部分
  1. import smbus
  2. import serial
  3. import time

  4. # INA226默认I2C地址
  5. INA226_ADDRESS = 0x40

  6. # 寄存器地址
  7. INA226_REG_CONFIG = 0x00
  8. INA226_REG_SHUNTVOLTAGE = 0x01
  9. INA226_REG_BUSVOLTAGE = 0x02
  10. INA226_REG_POWER = 0x03
  11. INA226_REG_CURRENT = 0x04
  12. INA226_REG_CALIBRATION = 0x05

  13. # 配置寄存器设置
  14. INA226_CONFIG = 0x4127  # 默认配置,平均模式1,总线电压转换时间1.1ms,分流电压转换时间1.1ms

  15. # 初始化I2C总线
  16. bus = smbus.SMBus(1)  # Raspberry Pi使用I2C总线1

  17. # 初始化UART
  18. uart = serial.Serial("/dev/serial0", baudrate=9600, timeout=1)  # 使用默认串口,波特率9600

  19. def write_register(address, register, value):
  20.     bus.write_i2c_block_data(address, register, [(value >> 8) & 0xFF, value & 0xFF])

  21. def read_register(address, register):
  22.     data = bus.read_i2c_block_data(address, register, 2)
  23.     return (data[0] << 8) | data[1]

  24. def ina226_init():
  25.     write_register(INA226_ADDRESS, INA226_REG_CONFIG, INA226_CONFIG)
  26.     # 设置校准寄存器,假设分流电阻为0.1欧姆,最大预期电流为3.2A
  27.     calibration_value = int(0.00512 / (0.1 * 0.001))
  28.     write_register(INA226_ADDRESS, INA226_REG_CALIBRATION, calibration_value)

  29. def ina226_read_shunt_voltage():
  30.     shunt_voltage = read_register(INA226_ADDRESS, INA226_REG_SHUNTVOLTAGE)
  31.     return shunt_voltage * 0.0000025  # 转换为伏特

  32. def ina226_read_bus_voltage():
  33.     bus_voltage = read_register(INA226_ADDRESS, INA226_REG_BUSVOLTAGE)
  34.     return (bus_voltage >> 3) * 0.001  # 转换为伏特

  35. def ina226_read_current():
  36.     current = read_register(INA226_ADDRESS, INA226_REG_CURRENT)
  37.     return current * 0.001  # 转换为安培

  38. def ina226_read_power():
  39.     power = read_register(INA226_ADDRESS, INA226_REG_POWER)
  40.     return power * 0.0025  # 转换为瓦特

  41. def send_data_via_uart(data):
  42.     uart.write(data.encode())  # 将数据编码为字节并发送

  43. if __name__ == "__main__":
  44.     ina226_init()
  45.     time.sleep(0.1)  # 等待初始化完成

  46.     while True:
  47.         shunt_voltage = ina226_read_shunt_voltage()
  48.         bus_voltage = ina226_read_bus_voltage()
  49.         current = ina226_read_current()
  50.         power = ina226_read_power()

  51.         # 格式化数据
  52.         data = f"Shunt Voltage: {shunt_voltage:.4f} V, Bus Voltage: {bus_voltage:.4f} V, Current: {current:.4f} A, Power: {power:.4f} W\n"

  53.         # 通过UART发送数据
  54.         send_data_via_uart(data)
  55.         print(data)  # 在终端打印数据(可选)

  56.         time.sleep(1)  # 每秒读取一次
复制代码

代码说明
  • I2C部分:

    • 使用smbus库与INA226通信。
    • 初始化INA226并读取电流、电压和功率数据。

  • UART部分:
    • 使用pyserial库通过UART发送数据。
    • 数据格式化为字符串并通过uart.write()发送。

  • 主循环:

    • 每秒读取一次数据并发送。




上位机显示软件



分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条