沖出槍林彈雨
沖出槍林彈雨
級別: 家園常客
![]() |
這個要看看驅(qū)動器的寄存器是哪一種,有的是直接給出脈沖總數(shù),有的是分多圈和單圈;樓上的說了脈沖總數(shù)的,下面是另一種:485實時讀多圈和單圈寄存器數(shù)據(jù);多圈寄存器是電機轉(zhuǎn)一圈 +1;單圈寄存器就是編碼器硬件精度,比如23位編碼器就是8388608個脈沖;實際位置就是 = 多圈寄存器*電機轉(zhuǎn)一圈的位移距離 + { (當(dāng)前單圈寄存器 - 設(shè)定原點時的單圈寄存器) / 8388608 }*電機轉(zhuǎn)一圈的位移距離 程序上注意點一個是要有個設(shè)原點的按鈕,就是獲取當(dāng)前單圈寄存器當(dāng)做原點單圈寄存器數(shù);另一個就是通訊延時的問題,電機速度為0后的100ms以上數(shù)據(jù)再保存,位置會比較準(zhǔn) |
|
---|---|---|
|
沖出槍林彈雨
沖出槍林彈雨
級別: 家園常客
![]() |
當(dāng)然了,也可以直接把總數(shù)設(shè)置為原點位置,以下供參考: PROGRAM Main VAR MultiTurnValue : INT; // 多圈寄存器的值 SingleTurnValue : INT; // 單圈寄存器的值 AbsolutePosition : INT; // 絕對位置值 MaxSingleTurnValue : INT := 8388608; // 23位編碼器單圈最大值為8388608 END_VAR // 計算絕對位置 // 絕對位置是多圈值乘以單圈的最大值加上單圈值 AbsolutePosition := (MultiTurnValue * MaxSingleTurnValue) + SingleTurnValue; END_PROGRAM |
|
---|---|---|
|