ZHCABO0 February   2022 TPS1HC100-Q1

 

  1.   摘要
  2.   商标
  3. 1引言
  4. 2汽车仪表板和 ADAS 负载
  5. 3构建 TPS1HC100 配电板
  6. 4嵌入式系统概览
  7. 5在参考设计中应用 TPS1HC100 配电板
  8. 6原理图
  9. 7布局

嵌入式系统概览

在参考设计系统中,在外设模式下使用了一对不同的无线微控制器。方向盘上使用 CC2652R7 ARM Cortex-M4F 微控制器来控制和配置 TPS1HC100B-Q1 高侧开关系列。CC2652R7 为主机广播一组 BLE 服务/特性以供操作和配置。对于连接到模型车的距离传感器,按比例缩小的 CC2651P3 ARM Cortex-M4F 微控制器用于连续测量传感器阵列的电流并将读数报告给 BLE 主机。该系统中的 BLE 主机是标准 Apple iPad®,运行带有 CoreBluetooth 后端的简单 Swift 应用程序。iOS 应用程序充当系统的中央大脑,从 CC2651P3 读取传感器值,执行分析/处理以确定对象的距离,然后在发生警报事件时向方向盘上的 CC2652R7 微控制器发出警报。该系统嵌入式部分的方框图如图 4-1 所示。

GUID-20211221-SS0I-7LRC-FFLK-CFXBVDRCZHFM-low.png图 4-1 软件方框图(iOS 主机)

此外,距离检测的软件流程图如下方的图 4-2 所示。此流程图是从控制 CC2652R7 和 CC2651P3 微控制器的 iOS 主机这个层面加以考虑的。

GUID-20211221-SS0I-NBKP-R7NN-DVRNXHJWSG9C-low.png图 4-2 流程图(距离检测)

连接在方向盘上的 CC2652R7 通过 BLE 广播具有表 4-1 中所列特性的以下服务。

表 4-1 方向盘服务 (0x1987)
特性 UUID(十六进制) 格式 说明
传感器警报 0xFFF1 uint8_t 启用/禁用驱动警报负载的值。
传感值 0xFFF2 uint16_t [8] 感测电流的原始 ADC 转换结果
陀螺仪值 0xFFF3 uint16_t [6] 来自 BOOSTXL-SENSORS 的原始陀螺仪值
加热器启用 0xFFF4 uint8_t 启用/禁用方向盘加热器

附在模型车上的 CC2651P3 会广播表 4-2 中所示的服务/特性。

表 4-2 传感器距离服务 (0x0519)
特性 UUID(十六进制) 格式 说明
传感器距离 1 0xFFF1 uint16_t 左距离传感器
传感器距离 2 0xFFF2 uint16_t 中心距离传感器
传感器距离 3 0xFFF3 uint16_t 右距离传感器

嵌入在方向盘中的 CC2652R7 BLE 微控制器可控制连接到系统的 TPS1HC100B-Q1 高侧开关阵列的所有方面。CC2652R7 包括以下任务:

  • 在距离事件中启用/禁用汽车负载的电源
  • 连续测量所连接负载的负载电流
  • 广播配置 BLE 服务和特性
  • 管理来自 BOOSTXL-SENSORS BoosterPack 的附加陀螺仪
  • 监控所连接的 TPS1HC100B-Q1 汽车负载的故障状态(过流、开路负载等)。

CC2652R7 是专为低比例嵌入式系统设计的微控制器,因此 CC2652R7 本身不会执行算法密集型计算或 CPU 繁重的计算。相反,iOS 主机用于执行有关数据处理和距离检测的所有繁重任务。而 CC2652R7 则从 TPS1HC100B-Q1 的电流感测中获取被读取的值,并将它们放在缓冲区中供 iOS 主机读取。为了对连接到系统的所有八个 TPS1HC100B-Q1 器件高效地执行此操作,使用 SimpleLink SDK 驱动程序包中的 ADC_convertChain 函数执行一系列通道转换。这种转换可以在下面的代码片段中看到:

    adc[0] = ADC_open(SNS1, &params);
    adc[1] = ADC_open(SNS2, &params);
    adc[2] = ADC_open(SNS3, &params);
    adc[3] = ADC_open(SNS4, &params);
    adc[4] = ADC_open(SNS5, &params);
    adc[5] = ADC_open(SNS6, &params);
    adc[6] = ADC_open(SNS7, &params);
    adc[7] = ADC_open(SNS8, &params);

      while(1)
    {
        ADC_convertChain(adc, sampleBuffer, 8);
        SteeringWheelProfile_SetParameter(STEERINGWHEEL_CHAR2, 16,
                                          &sampleBuffer);
        Task_sleep(1000);
    }

iPad 上运行的 iOS 软件会定期轮询 STEERINGWHEEL_CHAR2 中的值,解析出 ADC 转换结果所代表的各种负载电流,然后显示在 iPad 前端以供用户查看。

距离检测本身是在 iOS 主机上使用简单的阈值算法完成的。每个传感器都有一个与其相关联的 farmediumclose 阈值。 如果从 CC2651P3 读取的值超过这些阈值中的任何一个,则会将值 3、2 或 1 写入方向盘中 CC2652R7 MCU 的 STEERINGWHEEL_CHAR1 特性。这些值对应于应在方向盘系统上触发警报的强度。例如,close 值对应于碰撞避免事件,在该事件中,系统将以最大强度在方向盘上触发负载/警报。处理阈值的 iOS 代码片段如下:

            if(characteristic == leftChar)
            {
                let intValue = (UInt16(data[1]) << 8) | UInt16(data[0])
                
                leftValues[frontPos] = intValue
                leftPos+=1
                
                if(leftPos == NUM_DIST_VALS)
                {
                    leftPos = 0
                    leftPasssed = true
                }
                
                var curSum: Int = 0
                for curVal in leftValues
                {
                    curSum += Int(curVal)
                }
                
                let curAvg = curSum / NUM_DIST_VALS
    
                if(curAvg >= LEFT_THRESH3)
                {
                    leftLevel = 3
                }
                else if(curAvg >= LEFT_THRESH2)
                {
                    leftLevel = 2
                }
                else if(curAvg >= LEFT_THRESH1)
                {
                    leftLevel = 1
                }
                else
                {
                    leftLevel = 0
                }
            }

在此片段中,左传感器与一组 farmediumclose 距离的阈值进行比较。根据相应的级别,将一个整数值分配给 leftLevel 变量。该变量稍后会组合成一个 8 位整数,并在触发警报时写入方向盘的警报特性。另请注意,距离算法实现了对 NUM_DIST_VALS 个值(默认为五个)求平均/积分的基本形式。这是为了避免距离传感器的灵敏度导致的任何错误触发。警报的实际编写是使用以下包装器函数中显示的标准 CoreBluetooth API 完成的:

    func writeAlarm(command: UInt8)
    {
        if((autoPeripheral != nil) && (autoPeripheral.state == .connected))
        {
            autoPeripheral.writeValue(Data([command]),
                                      for: autoAlarmChar, type: .withResponse)
            
        }
    }