ZHCABO0 February 2022 TPS1HC100-Q1
在參考設(shè)計(jì)系統(tǒng)中,在外設(shè)模式下使用了一對(duì)不同的無線微控制器。方向盤上使用 CC2652R7 ARM Cortex-M4F 微控制器來控制和配置 TPS1HC100B-Q1 高側(cè)開關(guān)系列。CC2652R7 為主機(jī)廣播一組 BLE 服務(wù)/特性以供操作和配置。對(duì)于連接到模型車的距離傳感器,按比例縮小的 CC2651P3 ARM Cortex-M4F 微控制器用于連續(xù)測(cè)量傳感器陣列的電流并將讀數(shù)報(bào)告給 BLE 主機(jī)。該系統(tǒng)中的 BLE 主機(jī)是標(biāo)準(zhǔn) Apple iPad?,運(yùn)行帶有 CoreBluetooth 后端的簡(jiǎn)單 Swift 應(yīng)用程序。iOS 應(yīng)用程序充當(dāng)系統(tǒng)的中央大腦,從 CC2651P3 讀取傳感器值,執(zhí)行分析/處理以確定對(duì)象的距離,然后在發(fā)生警報(bào)事件時(shí)向方向盤上的 CC2652R7 微控制器發(fā)出警報(bào)。該系統(tǒng)嵌入式部分的方框圖如圖 4-1 所示。
圖 4-1 軟件方框圖(iOS 主機(jī))此外,距離檢測(cè)的軟件流程圖如下方的圖 4-2 所示。此流程圖是從控制 CC2652R7 和 CC2651P3 微控制器的 iOS 主機(jī)這個(gè)層面加以考慮的。
圖 4-2 流程圖(距離檢測(cè))連接在方向盤上的 CC2652R7 通過 BLE 廣播具有表 4-1 中所列特性的以下服務(wù)。
| 特性 | UUID(十六進(jìn)制) | 格式 | 說明 |
|---|---|---|---|
| 傳感器警報(bào) | 0xFFF1 | uint8_t | 啟用/禁用驅(qū)動(dòng)警報(bào)負(fù)載的值。 |
| 傳感值 | 0xFFF2 | uint16_t [8] | 感測(cè)電流的原始 ADC 轉(zhuǎn)換結(jié)果 |
| 陀螺儀值 | 0xFFF3 | uint16_t [6] | 來自 BOOSTXL-SENSORS 的原始陀螺儀值 |
| 加熱器啟用 | 0xFFF4 | uint8_t | 啟用/禁用方向盤加熱器 |
附在模型車上的 CC2651P3 會(huì)廣播表 4-2 中所示的服務(wù)/特性。
| 特性 | UUID(十六進(jìn)制) | 格式 | 說明 |
|---|---|---|---|
| 傳感器距離 1 | 0xFFF1 | uint16_t | 左距離傳感器 |
| 傳感器距離 2 | 0xFFF2 | uint16_t | 中心距離傳感器 |
| 傳感器距離 3 | 0xFFF3 | uint16_t | 右距離傳感器 |
嵌入在方向盤中的 CC2652R7 BLE 微控制器可控制連接到系統(tǒng)的 TPS1HC100B-Q1 高側(cè)開關(guān)陣列的所有方面。CC2652R7 包括以下任務(wù):
CC2652R7 是專為低比例嵌入式系統(tǒng)設(shè)計(jì)的微控制器,因此 CC2652R7 本身不會(huì)執(zhí)行算法密集型計(jì)算或 CPU 繁重的計(jì)算。相反,iOS 主機(jī)用于執(zhí)行有關(guān)數(shù)據(jù)處理和距離檢測(cè)的所有繁重任務(wù)。而 CC2652R7 則從 TPS1HC100B-Q1 的電流感測(cè)中獲取被讀取的值,并將它們放在緩沖區(qū)中供 iOS 主機(jī)讀取。為了對(duì)連接到系統(tǒng)的所有八個(gè) TPS1HC100B-Q1 器件高效地執(zhí)行此操作,使用 SimpleLink SDK 驅(qū)動(dòng)程序包中的 ADC_convertChain 函數(shù)執(zhí)行一系列通道轉(zhuǎn)換。這種轉(zhuǎn)換可以在下面的代碼片段中看到:
adc[0] = ADC_open(SNS1, ¶ms);
adc[1] = ADC_open(SNS2, ¶ms);
adc[2] = ADC_open(SNS3, ¶ms);
adc[3] = ADC_open(SNS4, ¶ms);
adc[4] = ADC_open(SNS5, ¶ms);
adc[5] = ADC_open(SNS6, ¶ms);
adc[6] = ADC_open(SNS7, ¶ms);
adc[7] = ADC_open(SNS8, ¶ms);
while(1)
{
ADC_convertChain(adc, sampleBuffer, 8);
SteeringWheelProfile_SetParameter(STEERINGWHEEL_CHAR2, 16,
&sampleBuffer);
Task_sleep(1000);
}
iPad 上運(yùn)行的 iOS 軟件會(huì)定期輪詢 STEERINGWHEEL_CHAR2 中的值,解析出 ADC 轉(zhuǎn)換結(jié)果所代表的各種負(fù)載電流,然后顯示在 iPad 前端以供用戶查看。
距離檢測(cè)本身是在 iOS 主機(jī)上使用簡(jiǎn)單的閾值算法完成的。每個(gè)傳感器都有一個(gè)與其相關(guān)聯(lián)的 far、medium 和 close 閾值。 如果從 CC2651P3 讀取的值超過這些閾值中的任何一個(gè),則會(huì)將值 3、2 或 1 寫入方向盤中 CC2652R7 MCU 的 STEERINGWHEEL_CHAR1 特性。這些值對(duì)應(yīng)于應(yīng)在方向盤系統(tǒng)上觸發(fā)警報(bào)的強(qiáng)度。例如,close 值對(duì)應(yīng)于碰撞避免事件,在該事件中,系統(tǒng)將以最大強(qiáng)度在方向盤上觸發(fā)負(fù)載/警報(bào)。處理閾值的 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
}
}
在此片段中,左傳感器與一組 far、medium 和 close 距離的閾值進(jìn)行比較。根據(jù)相應(yīng)的級(jí)別,將一個(gè)整數(shù)值分配給 leftLevel 變量。該變量稍后會(huì)組合成一個(gè) 8 位整數(shù),并在觸發(fā)警報(bào)時(shí)寫入方向盤的警報(bào)特性。另請(qǐng)注意,距離算法實(shí)現(xiàn)了對(duì) NUM_DIST_VALS 個(gè)值(默認(rèn)為五個(gè))求平均/積分的基本形式。這是為了避免距離傳感器的靈敏度導(dǎo)致的任何錯(cuò)誤觸發(fā)。警報(bào)的實(shí)際編寫是使用以下包裝器函數(shù)中顯示的標(biāo)準(zhǔn) CoreBluetooth API 完成的:
func writeAlarm(command: UInt8)
{
if((autoPeripheral != nil) && (autoPeripheral.state == .connected))
{
autoPeripheral.writeValue(Data([command]),
for: autoAlarmChar, type: .withResponse)
}
}