1.概述
4.軟件中的測速處理流程
5.測速處理代碼
6.測試方法
7.測試結(jié)果
8.參考資料
1. 概述
在電機(jī)控制中,大部分都有速度環(huán)控制,電機(jī)轉(zhuǎn)子速度的獲取可以從絕對值編碼器直接讀取、測量霍爾編碼器每隔 60 °的脈沖信號時間進(jìn)行計算、測量增量編碼器多個脈沖(M 法)或單個脈沖之間(T 法)的時間來計算, 本文主要講述如何使用 NXP RT1170 的增強(qiáng)型 QDC 外設(shè)和增量編碼器測量電機(jī)轉(zhuǎn)子速度的方法。
2. 正交編碼器信號與測速方法介紹
正交編碼器輸出 A、B、Z 信號,3 個信號都為方波信號,當(dāng)電機(jī)正向旋轉(zhuǎn)時,A 信號超前 B 信號 90 度,反轉(zhuǎn)時 B 信號超前 A 信號 90度,Z 信號為歸零信號,轉(zhuǎn)子轉(zhuǎn)一圈產(chǎn)生一瞬間的脈沖信號,主要用于圈數(shù)計數(shù)或 A、B 信號的脈沖數(shù)歸零,下圖為編碼器 A、B 信號示意圖,圖片來自 RT1170 參考手冊。
速度的測量的可以通過讀取編碼器的脈沖計數(shù)(兩次速度環(huán)控制周期之間的脈沖數(shù))計算出間隔角度,RT1170 的 QDC 自動捕獲兩次速度環(huán)之間脈沖數(shù)的定時器計數(shù),從而知道時間:T = 定時器計數(shù) * (1/定時器頻率)。
當(dāng)兩次速度環(huán)之間有多個脈沖時,相當(dāng)于 M 法測速;當(dāng)電機(jī)速度很快,中間只有一個脈沖計數(shù)時,相當(dāng)于 T 法。
3. RT1170 QDC 解碼器用于測速的寄存器介紹
RT1170 的 QDC 外設(shè)檢測 A、B 信號邊沿(可開啟濾波和反向),判斷相位關(guān)系,對位置寄存器 UPOS、LPOS 進(jìn)行加或者減操作,當(dāng)反向時,寄存器 CTRL2 的 DIR 位給出方向信息。
在速度環(huán)中每次讀取 POSD 寄存器時,QDC 自動將保存兩次速度環(huán)之間的脈沖差值的 POSD 保存到 POSDH,同時清零 POSD,同時將這些脈沖之間所經(jīng)過脈沖計數(shù)由POSDPER保存到POSDPERH 供軟件讀取。
LASTEDGE( Last Edge Time Hold Register )對兩次脈沖數(shù)之間進(jìn)行計數(shù),主要用于 T 法測速和 0 速檢測(當(dāng) LASTEDGE 計滿溢出時判斷為速度為 0 速,因為長時間沒有脈沖邊沿產(chǎn)生)。
下圖為 QDC 外設(shè)信號流程和寄存器框圖。
4. 軟件中的測速處理流程
如圖所示,當(dāng)兩次速度環(huán)之間有脈沖數(shù)時,即 POSDH 不為 0 時,使用脈沖數(shù)除以時間的方式進(jìn)行速度計算,按下圖左方處理,如果兩次速度環(huán)之間有方向變化判定為 0 速(剛好反向的情況)。
如果兩次速度環(huán)周期之間沒有脈沖,則使用 LASTEDGEH 來進(jìn)行速度估算,因為電機(jī)速度太低,長時間沒有脈沖產(chǎn)生,如果電機(jī)是勻速的,估算的速度就比較準(zhǔn)確的,根據(jù)方向使用 Speed = C/M 計算,當(dāng) LASTEDGEH 太大時,判定電機(jī)停止為 0 速。
5. 測速處理代碼
QDC 測速代碼,其處理和上圖中的處理流程一致,軟件只需要較少的操作即可計算出速度。代碼如下所示:
其他初始化代碼詳見工程文件。
bool_t MCDRV_EncSpeedCalUpdate(enc_block_t *this)
{
int64_t i64Numerator;
s_statusPass = FALSE;
// Read POSDH, POSDPERH and LASTEDGEH
this->ui16Dummy = this->pENC_base->POSD;
this->sSpeed.i16POSDH = this->pENC_base->POSDH;
this->sSpeed.ui16POSDPERH = this->pENC_base->POSDPERH;
this->sSpeed.ui16LASTEDGEH = this->pENC_base->LASTEDGEH;
// POSDH == 0
if(this->sSpeed.i16POSDH != 0)
{
// Shaft is moving during speed measurement interval
this->sSpeed.i16PosDiff = this->sSpeed.i16POSDH;
this->sSpeed.ui16Period = this->sSpeed.ui16POSDPERH;
this->sSpeed.ui16Period_1 = this->sSpeed.ui16Period;
if(this->sSpeed.i16PosDiff > 0)
{
this->sSpeed.i8SpeedSign = 1;
}
else
{
this->sSpeed.i8SpeedSign = -1;
}
if(this->sSpeed.i8SpeedSign == this->sSpeed.i8SpeedSign_1)
{
// Calculate speed
i64Numerator = ((int64_t)(this->sSpeed.i16PosDiff) * this->sSpeed.f32SpeedCalConst); // Q16.0 * Q5.27 = Q21.27
this->sSpeed.f32Speed = (i64Numerator / (uint32_t)(this->sSpeed.ui16Period))<<4; // Q5.27 -> Q1.31
}
else
{
this->sSpeed.f32Speed = 0;
}
this->sSpeed.i8SpeedSign_1 = this->sSpeed.i8SpeedSign;
}
else
{
// Shaft is NOT moving during speed measurement interval
this->sSpeed.ui16Period = this->sSpeed.ui16LASTEDGEH;
if((uint32_t)(this->sSpeed.ui16Period) > 0xF000UL)
{
// Shaft hasn't been moving for a long time
this->sSpeed.f32Speed = 0;
this->sSpeed.i8SpeedSign_1 = this->sSpeed.i8SpeedSign;
}
else
{
// Speed estimation in low speed region
if(this->sSpeed.ui16Period > this->sSpeed.ui16Period_1)
{
if(this->sSpeed.i8SpeedSign > 0)
{
i64Numerator = ((int64_t)(1.0) * this->sSpeed.f32SpeedCalConst);
this->sSpeed.f32Speed = (i64Numerator / (uint32_t)(this->sSpeed.ui16Period))<<4;
}
else
{
i64Numerator = ((int64_t)(-1.0) * this->sSpeed.f32SpeedCalConst);
this->sSpeed.f32Speed = (i64Numerator / (uint32_t)(this->sSpeed.ui16Period))<<4;
}
}
}
}
this->sSpeed.f16SpeedFilt = GDFLIB_FilterIIR1_F16(MLIB_Conv_F16l(this->sSpeed.f32Speed), &this->sSpeed.sENCSpeedFilter);
this->sSpeed.fltSpeed = MLIB_ConvSc_FLTsf(this->sSpeed.f16SpeedFilt, this->sSpeed.fltSpeedFrac16ToAngularCoeff);
return s_statusPass;
}
6.測試方法
使用其他電機(jī)拖動帶增量編碼器的伺服電機(jī)穩(wěn)定轉(zhuǎn)至 1500 RPM,使用激光測速儀進(jìn)行測速,伺服電機(jī)的增量編碼器信號是差分信號,經(jīng)過功率板將差分信號轉(zhuǎn)換到單端信號,最后連接到 RT1170 開發(fā)板 ENC1 對應(yīng)的 GPIO 口中,如果電機(jī)增量編碼器 AB 輸出信號單端信號可直接連接至 RT1170 開發(fā)板。
最后可以在 IAR 中通過 LiveWatch 窗口查看速度變量,檢查與用激光測速器測的速度是否一致。
拖動伺服電機(jī)轉(zhuǎn)至 1500RPM
信號連接實物圖
AB 信號連接原理圖
7. 測試結(jié)果
IAR DEBUG 后,在 IAR 的 live Watch 窗口中查看 Encoder_Measure_SpeedRPM 變量,其值為 1500RPM 左右,說明測速還是比較準(zhǔn)確的。
參考資料
參考手冊:
IMXRT1170RM.pdf
i.MX RT1170 Processor Reference Manual
-
電機(jī)
+關(guān)注
關(guān)注
143文章
9275瀏覽量
148903
發(fā)布評論請先 登錄
如何實現(xiàn)安卓與恩智浦i.MX RT1170的無線投屏與控制

如何禁用i.MX RT1170 MCU中的M4內(nèi)核?
在IMX RT1170的POR期間,PWM引腳變?yōu)楦唠娖绞窃趺椿厥拢?/a>
RT1170EVKB如何設(shè)置CM7和CM4內(nèi)核來實現(xiàn)它們自己的看門狗外設(shè)?
伺服電機(jī)編碼器怎么選型

增量式編碼器單圈和多圈怎么知道,如何分辯?
增量式拉線編碼器:精準(zhǔn)測量與位移控制的優(yōu)選解決方案

增量式編碼器單圈和多圈怎么知道,如何分辯?

光學(xué)和磁性增量編碼器之間的差異應(yīng)用說明

恩智浦i.MX RT1170 uSDHC eMMC啟動時間

評論