編碼器z相信號,又稱零位訊號,編碼器軸每旋轉一圈,a相和b相都發出相同的脈衝個數,但是a相和b相之間 存在乙個90°(電氣角的一週期為360°)的電氣角相位差,可以根據這個相位 差來判斷編碼器旋轉的方向是正轉還是反轉,正轉時,a相超前b相90°先進行 相位輸出,反轉時,b相超前a相90°先進行相位輸出。編碼器 每旋轉一圈,z相只在乙個固定的位置發乙個脈衝,所以可以作為復位相或零位 相來使用。
關於beaglebone如何使用a b相,請參考
當需要使用編碼器z相信號做精度控制時,如需要在特定位置停止,僅僅使用限位開關,精度是比較差的,這時候就需要限位開關配合z相零點來精確控制了。
1.首先在機械安裝的時候把 z 相信號的 零點位置(編碼器 每旋轉一圈,z相只在乙個固定的位置發乙個脈衝,該位置就是零點位置)對準了。
2.然後你把限位開關安裝到零點位置,當檢測到限位開關從off->on 跳變時,私服電機需要減速慢行(非常慢的狀態),直到再次檢測到限位開關從on->off 跳變的過程中,一直迴圈判斷是否接收到編碼器z相脈衝訊號 ,一旦檢測到z 相信號,則立即停機。
也就是說:慢速找到乙個近點行程開關。行程開關在on的過程包含了乙個z相的脈衝。這個條件只能由安裝保證。行程開關的on過程開放允許乙個輸入中斷。當z脈衝發生的時候,連線乙個輸入中斷,使得電機立即停止。
另外,用z相脈衝找原點,並非是在z相脈衝出現時將機器立即停下來並且以此為參考點,而是在z相脈衝到來時將計數器清零。如果機器停下來的時候衝過頭,首先零位的精度是不會收到影響的,因為在零位脈衝到來時將a,b相position清零並開始重新計數,過衝的距離可以通過a,b相的position獲取到。
以下程式沒有使用光電開關,僅僅使用了編碼器的z相信號,當系統啟動的時候,首先讓電機以比較快的速度運動,當檢測到z相脈衝的時候,立刻停止電機,這時候由於電機慣性過衝,在讓電機以非常慢的速度反相運動並檢測z相脈衝,一旦檢測到上公升沿,再次立刻停機即可。
#include#include"gpio.h"
#include"sys/poll.h"
#include"pwm.h"
using namespace exploringbb;
using namespace std;
int main()
gpio ingpio_z(49);
ingpio_z.setdirection(input); //設定gpio為輸入
ingpio_z.setedgetype(rising); //設定檢測上公升沿
cout << "即將啟動電機,尋找零點" << endl;
/*pwm pwm("pwm_test_p9_16.13");
pwm.setperiod(500000);
pwm.setdutycycle(75.0f); // 設定週期迴圈的百分比
pwm.setpolarity(pwm::active_low); //正轉
pwm.run();
*/cout << "電機以較快的速度運動尋找零點" << endl;
ingpio_z.waitforedge(); // 輪詢檢測上公升沿
/*pwm pwm("pwm_test_p9_16.13");
pwm.setperiod(500000);
pwm.setdutycycle(100.0f); // 電機停機
pwm.setpolarity(pwm::active_low);
pwm.run();
*/cout << "電機以非常慢的速度反向運動,尋找z相零點精確位置" << endl;
/* pwm pwm("pwm_test_p9_16.13");
pwm.setperiod(500000);
pwm.setdutycycle(90.0f); // 電機慢速
pwm.setpolarity(pwm::active_high); //反轉
pwm.run();
*/ingpio_z.waitforedge(); // 繼續檢測上公升沿,判斷是否到達零點
/* pwm pwm("pwm_test_p9_16.13");
pwm.setperiod(500000);
pwm.setdutycycle(100.0f); // 電機停止
pwm.setpolarity(pwm::active_high);
pwm.run();
*/cout << "找到零點了 " << endl;
cout << "電機停止" << endl;
return 0;
}
配合光電開關的話,將光電開關接上板子即可,接線如下:
棕色:電源正極(+24v,或+5v);
藍色:電源負極(0v或gnd);
黑色:開關訊號輸出(接plc或其它裝置的輸入端);
白色(有的是灰色或其它的淺色),這個的接法多種多樣,
最好是參照光電開關說明書接線,歸納起來大概有如下三種型別:
1 白色為公共端,開關動作時(感應到有物體)需要輸出低電平時白色與藍色短接,
需要輸出高電平時白色與棕色短接.(此種用法較多).
2 白色為反相輸出端,即黑色是常開(no)輸出的話,白色為常閉輸出(nc),
此時只需接其中之一,另一線懸空..(此種用法較少).
3 白色為反相控制端,白色為高電平時黑色為常開(no)輸出,
白色為低電平時黑色為常閉輸出(nc)...(此種用法很少).
使用phpExcelReader讀取excel檔案
避免將excel檔案轉化成csv格式,在進行資料讀取,而且支援多sheet檔案。在這個需求前提下,我選擇了2款php開源類 phpexcelreader phpexcel。其中後者支援讀寫,但是需要php5.2以上版本,並且需要開啟zip支援 重點說一下 phpexcelreader,因為 phpe...
C 讀取PDF PDFBox使用
這個絕對是個好 將以上4個檔案引用到專案中,在檔案中需要引入以下2個命名空間 using org.pdfbox.pdmodel using org.pdfbox.util 三 api的使用方法 using system.io using system.text using org.pdfbox.pd...
使用GDAL讀取影像
最近在學習gdal和opencv,gdal的強大功能我就不用說了,大家上網可以查到很多關於它的資料。opencv是乙個開源的計算機視覺庫,可以去opencv中文論壇具體了解它,說下我的構思吧,opencv庫里有很多關於數字影象處理的函式,但是它卻侷限於遙感影象的讀取,而gdal卻對遙感影像的讀取支援...