邢化友,張 路,邊寧濤,司馬斌,韓彥龍,楊 洋
(西安輕工業(yè)鐘表研究所有限公司,陜西 西安710061)
軸承摩擦力矩是軸承領域用來衡量軸承特性的重要技術指標之一,軸承摩擦力矩的準確測定在許多工業(yè)和科學研究領域中都有重要意義。本文對軸承摩擦力矩的測量主要應用復擺能量守恒的原理,推導出軸承摩擦力矩與擺角的關系式,并將關系式編寫入上位機軟件中,最終根據擺角的測量計算出軸承的摩擦力矩。系統(tǒng)中為了減少外界軸承啟動摩擦力的介入,使用非接觸式圓光柵對復擺擺動角度進行實時測量,圓光柵編碼器有著非接觸、精度高等特點,可提供準確可靠的動態(tài)角度數據。本文利用高精度非接觸式圓光柵編碼器開發(fā)一套基于Visual C++與STM32的檢測軟件,實現了軸承摩擦力矩的自動化測量。
測量系統(tǒng)的測試原理如圖1所示。將軸承裝入軸承安裝部件內,擺桿連接部件掛由10 kg負載,軸承安裝部件以小角度(10°)范圍內進行擺動,同時安裝在軸承安裝部件上的碼盤也隨之進行轉動,測頭實時對碼盤旋轉的脈沖進行輸出傳送給STM32,為了精確進行角度的測量對輸出的脈沖進行了400倍細分,并通過光耦將脈沖信號傳遞給STM32,使用STM32的TIM3編碼器模式來對輸入的脈沖進行計數,選用雷尼紹的圓光柵編碼器一圈7200個脈沖,經過400倍的細分后一圈288000脈沖,STM32計一個脈沖周期的方波表示碼盤轉了0.000 125°,最后將角度信息通過RS232發(fā)送給上位機軟件利用推到出的關系式進行軸承摩擦力矩的計算。
圖1 測量原理框圖
下位機系統(tǒng)主要由STM32F407IGT6核心控制器、圓光柵碼盤、碼盤測頭,放大器,高速光耦模塊,數字通訊等組成。系統(tǒng)結構框圖如圖2所示。
圖2 下位機系統(tǒng)結構框圖
當復擺擺動時,圓光柵碼盤與復擺儀器做往復運動,碼盤測頭隨即讀出脈沖個數,經由DB15放大器輸出A、B相,A相為順時針擺動時的脈沖,B相為逆時針擺動時的脈沖。高速光耦模塊將A、B相的5 V脈沖信號轉變?yōu)?.3 V脈沖輸入給STM32控制器。STM32控制器使用TIM1編碼器模式完成對A、B相脈沖信號進行脈沖數據處理,最后轉變成角度數據通過RS232發(fā)送到上位機。RS232數字通訊提供了一個下位機與上位機系統(tǒng)的連接接口。
上位軟件的設計主要考慮到了軟件系統(tǒng)安全可靠,可移植性,基于當下Windows平臺運行及修改方便等因素。因此使用Visual C++2017分別開發(fā)了串口通訊程序,角度信息控制程序,曲線顯示等程序。其中的角度信息控制程序采用的是摩擦力矩與實時擺角的關系進行設計,各部分通過動態(tài)鏈接庫組合成一個整體,其軟件結構框圖如圖3所示。
圖3 上位機軟件結構框圖
串口通信使用的是基于Visual C++2017開發(fā)平臺,與STM32控制器通信采用CMscomm類來實現。CMscomm是第三方提供的控件,使用它可以方便地在Visual C++里實現串口通信[1]。串口通信設計的部分代碼如下:
CMscomm m_ctrlComm;//創(chuàng)建 CMscomm 類的對象m_ctrlComm
codeNM=m_ctrlComm.get_CommEvent();//獲取串口事件碼
myVar.Attach(m_ctrlComm.get_Input());//讀 取接收數據
safarray_inp=myVar;
len=safarray_inp.GetOneDimSize();//得到有效數據長度
strtemp.Format(_T("%ld"),RX_count+=len);//接收字節(jié)數的累計
strtemp=_T("RX:")+strtemp;
m_ctrlRXCount.SetWindowText(strtemp);//顯 示接收數據的累計字節(jié)數
上位軟件角度信息的處理是通過讀取串口接收到的脈沖信息,一方面完成角度的換算,本文中用到的圓光柵碼盤為7 200線,360°產生7 200個脈沖,每個脈沖對應0.05°以此進行角度換算并顯示;另一方面完成軸承摩擦力矩的計算,計算公式如下:
其中,M為軸承摩擦力矩,m為徑向加載的重量,l為軸承回轉中心到整個單擺質心的距離,q為一定周期內單擺擺動到左側最大角度的減幅系數,n為第n個周期,g為重力加速度。部分代碼如下:
GetDlgItem(IDC_EDIT_FUZAI_Z)->GetWindow-Text(strv2);//負載
GetDlgItem (IDC_EDIT_NeiQuan_R)->GetWindowText(strv1);//內圈半徑
GetDlgItem (IDC_EDIT_DANBAI_L)->GetWindowText(strv);//單擺長
fenzi=(youj-zuoj)*m_dy3*m_dyy*10*2;
fenmu1=2*m_dy4*k_hd;
fenmu2=(m_dy4-1)*(t_hd-k_hd);
fuzaiz.Format(_T("%.5f"),mochal1);
GetDlgItem(IDC_EDIT_MCLiju)->SetWindowText(fuzaiz1);//摩擦力矩
上位軟件中使用TeeChart控件進行實時擺角曲線的顯示,此控件具有界面美觀友好,開發(fā)便捷大大縮短程序的開發(fā)周期,并且具有高速的繪圖速度,利用TeeChart控件提供的接口函數進行實時擺角顯示。部分代碼如下:
CSeries chart_T=(CSeries)m_Chart.Series(0);
chart_T.Clear();
m_pLineSerie->ClearSerie();
LeftMoveArray (m_TeeChartArray, m_c_arrayLength,randf(0,10));
數據庫的的設計是為了便于對檢測產品的測試數據的存儲,此系統(tǒng)設計了將待測試產品的相關信息保存到Excal功能,需要保存的產品信息如圖4所示。
圖4 測試產品信息存儲表格結構
在Visual C++2017 MFC中使用ADO數據庫進行Excal操作可以方便的將需要導出的信息保存,當前各種主流數據庫有很多,包括Oracle,MS SQL Server,Sybase,Informix,MySQL MS ACCESS 等。ADO數據庫的訪問流程跟其他數據庫類似,此處不再詳細冗述,下面是使用Visual C++2017中開發(fā)ADO數據庫的步驟:
a)導入ADO動態(tài)鏈接庫
#import "c:programfilescommonfilessystemadomsado15.dll"no_namespace ename("EOF","adoEOF")
b)初始化OLE/COM庫環(huán)境
BOOL CExpApp::InitInstance()
{
AfxEnableControlContainer();
//初始化OLE DLLs
if(!AfxOleInit())
{
AfxMessageBox("初始化 OLE DLL 失敗!");
Return FALSE;
}
......
}
c)利用Connection對象鏈接數據源
_ConnectionPtr m_pConnection;
d)執(zhí)行SQL命令并取得結果記錄集
_RecordsetPtr m_pRecordset;
e)e)記錄集遍歷和更新
if(vID.vt!=VT_NULL&&vUsername.vt!=VT_NULL&&vOld.vt!=VT_NULL&&vBirthday.vt
!=VT_NULL)
TRACE("id:%d,日期:%s,產品編號:%d,摩擦力矩:%d",摩擦系數:%d",
vID.lVal,
(LPCTSTR)(_bstr_t)vUsername,
vOld.lVal,
(LPCTSTR)(_bstr_t)vBirthday);
m_pRecordset->MoveNext();///移到下一條記錄
形成如圖4所示表單。
選取同一個軸承測量10次,分別徑向加載10 kg的條件下使用專用測量裝置對軸承摩擦力矩進行測量,結果如下表1[2]所示。
表1 10 kg負載下測試數據
由測試數據表1[2]可以看出測試結果與計算得出的結果基本吻合,測試數據中存在的誤差是由測試的原理誤差和測試裝置的加工制造誤差組成,由于每個軸承加工的精度存在差異,同一個批次的軸承的摩擦力矩之間同樣存在差異,但是整體的相對誤差很小,同一批次的軸承的摩擦力矩不存在較大波動[2]。如圖 5、圖 6.
圖5 軸承摩擦力矩測試系統(tǒng)
圖6 上位機軟件界面
使用上述方案進行設計的軸承摩擦力矩檢測系統(tǒng),測量的自動化程度高,上位機軟件可適用于基于Windows平臺的系統(tǒng),通用性強、畫面顯示直觀清晰且實時性較好。