姚毅超,林智桂,付廣
上汽通用五菱汽車股份有限公司,廣西柳州 545007
目前主機廠對于實現遙控泊車的主要方法是將此功能做到整車的全自動泊車控制器當中,遙控功能是基于現有車鑰匙或者手機進行開發,局限性較大。車鑰匙可供開發的按鍵較少,手機開發成本較高,時延較大,影響遙控的實時性和使用體驗。因此,本文介紹一款基于STM32和Arduino設計與開發的遙控泊車裝置,用于解決上述問題。
該裝置由遙控器、接收器和無線通信模塊3個部分組成,可實現對遙控車輛的橫縱向控制、行車燈控制和遠程上下電控制。先通過控制器選型確定裝置的硬件構成,再運用編程語言完成對所需功能的編寫,最后在實車上對該裝置進行測試驗證,對行駛車速、主動距離、轉向角度及速度等性能指標進行評估。使用時只需將遙控裝置的接收器連接在整車OBD口上,手持遙控器即可實現對車輛的遠程操控。
(1)基本功能[1]:遙控車輛行駛的基本需求,即通過遙控器上的按鍵控制車輛完成前、后、左、右及制動的操作,同時也可通過其上的搖桿實現同樣功能,區別在于搖桿控制可實現車輛的橫縱向同步控制。
(2)遙控按鍵[1]:遙控器按鍵示意如圖1所示,可進行X、Y方向的移動,當被按下時為制動按鍵。
圖1 遙控器按鍵示意
為滿足使用者體驗的同時保障操控安全,并能夠對遙控系統進行量化分析,該遙控裝置的目標參數設定見表1。
表1 遙控裝置的目標參數設定
遙控系統分為硬件設計和軟件設計,硬件設計包括遙控器控制器、接收器控制器和無線通信模塊的選型,接收器選用普遍應用的STM32F107控制器,遙控器選用開發集成度高、成本低的Arduino控制器配合Joystick Shield擴展板,無線通信模塊選用傳輸距離較遠、穩定性強并具有基站功能的ZigBee模塊[2]。遙控系統的硬件設計框圖如圖2所示。
圖2 遙控系統的硬件設計框圖
完成硬件選型、設計和組裝后,根據遙控器控制器和無線通信模塊的尺寸設計遙控器外殼,其外觀設計效果如圖3所示。
圖3 遙控器外觀設計效果
軟件設計包括軟件架構搭建和算法程序編寫,軟件架構是指控車邏輯、安全機制及底層配置等;算法程序則主要完成具體的控制指令編寫及系統優化。STM32F107控制器根據實現的功能需要在程序中配置CAN、SCI、TIM、NVIC、RCC 6個模塊[3],并編寫相應的接口函數供主程序使用。接收器的軟件設計框圖如圖4所示。
圖4 接收器的軟件設計框圖
Arduino控制器根據要實現的功能通過調用Arduino提供的庫函數完成串口配置及遙控指令的收發,遙控器的軟件設計框圖如圖5所示。
圖5 遙控器的軟件設計框圖
遙控泊車功能目前主要基于總線信號進行實現,對于車輛的轉向、驅動、制動均通過CAN總線上的相關報文進行控制,所介紹的遙控裝置以新寶駿某車型作為試驗車輛對橫縱向控制方法進行測試驗證。
Arduino控制器配合Joystick Shield擴展板組成遙控器,根據擴展板上按鍵和搖桿的數據值解析關系編寫遙控指令發送邏輯,按照上述遙控按鍵定義賦予實際的控制含義,遙控器上的方向鍵是車輛橫縱向單獨控制,搖桿是車輛橫縱向同時控制,因此遙控器實現了橫縱向分開及同時控制,其控制流程如圖6所示。
圖6 遙控器的控制流程
接收器控制器為STM32F107控制器,通過CAN模塊配置相應的CAN通道,使其能夠正常收發CAN報文標準幀;通過TIM模塊配置相應的定時器,使其能夠計算不同周期,接著編寫可控制車速、擋位及制動的報文函數,對其中對應的字節進行賦值,報文函數形式為:
void can_0xID(unsigned int velocity,unsigned char gearreq,unsigned char pressure)
{
unsigned char i;
CanTxMsg TxMessage;
TxMessage.StdId=0xID;
TxMessage.ExtId=0x0000;
TxMessage.IDE = CAN_ID_STD;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.DLC = 8;
CAN1_DATA[0]=0x00;
CAN1_DATA[1]=0x00;
CAN1_DATA[2]=pressure;
CAN1_DATA[3]=velocity>>8;
CAN1_DATA[4]=velocity;
CAN1_DATA[5]=0x00;
CAN1_DATA[6]=gearreq+rc_ID;
CAN1_DATA[7]=CAN1_DATA[0]+CAN1_DATA[1]+CAN1_DATA[2]+CAN1_DATA[3]+CAN1_DATA[4]+CAN1_DATA[5]+CAN1_DATA[6];
for(i = 0;i < 8;i ++)
{
TxMessage.Data[i]= CAN1_DATA[i];
}
CAN_Transmit(CAN1,&TxMessage);
rc_ID=rc_ID+1;
if(rc_ID==16)
{
rc_ID=0;
}
}
其中CanTxMsg為CAN發送結構體,0xID為自定義的報文ID,CAN_ID_STD值為0,CAN_RTR_DATA值為0,pressure為制動壓力請求,velocity為速度請求,gearreq為擋位請求,rc_ID為循環計數,CAN_Transmit為報文發送函數。
將縱向控制報文通過OBD口發送至整車CAN網絡,ESC控制器可執行相應的速度、擋位和制動請求,將代碼燒錄進接收器控制器連接到整車上進行實車測試。車速、擋位和制動請求與響應的變化曲線如圖7至圖9所示。
圖7 車速請求與響應的變化曲線
圖8 擋位請求與響應的變化曲線
圖9 制動請求與響應的變化曲線
基于縱向控制的報文函數形式編寫橫向控制的請求報文,主程序中需根據目標參數中的最大轉角定義對方向盤角度變量值進行限制,實車測試過程中發現方向盤響應表現比較抖動,轉角曲線呈鋸齒狀,針對此問題,通過低通濾波算法和幅值限值算法對轉向控制進行優化,優化算法程序如下:
int limit(int angle,int angle_old){
if(angle> angle_old){
if((angle-angle_old)>ANGLE_THRESHOLD){
return angle_old+ANGLE_THRESHOLD;
}
else {
return angle;
}
}
else {
if((angle_old-angle)>ANGLE_THRESHOLD){
return angle_old-ANGLE_THRESHOLD;
}
else {
return angle;
}
}
}
其中angle_old為上一周期請求的方向盤角度值,angle為當前周期請求的方向盤角度值,ANGLE_THRESHOLD為方向盤角度階躍的限值。
int filter(int value,int value_old){
return(1-WEIGHT)*value_old+WEIGHT*value;
}
其中WEIGHT為比重因子。
經過優化算法處理后,不斷調試比重因子和階躍限值后實現了方向盤的平滑控制,實車方向盤轉動時無明顯抖動,轉角曲線較之前改善明顯,優化前后方向盤響應的對比曲線如圖10所示。
圖10 優化前后方向盤響應的對比曲線
基于縱向控制的報文函數形式編寫遠程上下電控制的請求報文,當接收器控制器接收到來自遙控器控制器的指令0x05時,表示下電請求,向整車CAN總線發送下電請求報文的同時掛P擋,拉起手剎;當接收器控制器接收到來自遙控器控制器的指令0x06時,表示上電請求,向整車CAN總線發送上電請求報文的同時釋放手剎。遠程上下電控制邏輯如圖11所示。
圖11 遠程上下電控制邏輯
遙控器和接收器通過ZigBee無線模塊建立通信實現對車輛的操控過程中可能會因為斷電、信號傳輸不穩定等原因導致通信中斷,由此帶來安全隱患和諸多風險,因此需要建立遙控器和接收器之間通信的安全機制,將安全交互協議分別編寫進兩控制器。
接收器控制器的定時器1每隔120 ms向遙控器發送指令0x11,如圖12所示。
圖12 安全交互邏輯1
接收器控制器接收到數據后判斷值是否為0xff,如果是,則將標志位RC置1,如圖13所示。
圖13 安全交互邏輯2
接收器控制器的定時器2每隔1 s會判斷標志位RC是否置1,如果置位,則清零;如果沒有,Num計數10次后會將標志位flag置零,如圖14所示。
圖14 安全交互邏輯3
遙控器控制器接收到0x11后會向接收器控制器發送指令0xff,如圖15所示。
圖15 安全交互邏輯4
基于上述的安全交互邏輯,需要在主程序中編寫因斷電、接觸不良導致通信中斷時的處理函數,即當標志位flag置零時,接收器控制器要向整車發送報文實現無轉向、無速度且制動的功能。
本文介紹的一款基于STM32和Arduino的遙控泊車裝置經過實車測試驗證后,完成預期設計的所有目標,從硬件選型制作到軟件架構編寫再到功能標定調試,一步步實現遙控裝置對車輛橫縱向的平穩控制和遠程上下電控制。該裝置的開發成功解決了現有車鑰匙按鍵少、手機開發成本高的問題,提供了一種綜合性價比較高的解決方案。