Last update 2018.12.27
來分享一下這次的經驗
凌華(ADLINK) 軸卡其實滿多的,會選這張是因為我跟他們提到要旋轉控制,
因此推薦幾張讓我選擇,我選了這張PCIe-8154借測
PCIe-8154 這張軸卡是能控制4軸運動控制
軸卡能從實體的switch去設定ID,軸卡上面有四個指撥開關,因此ID有16種變化
如果電腦能無限擴充pcie的話,能接到16張卡,共64軸的控制,用PCIe-8158應該就128軸的控制了。
另外凌華借了我DIN-814-GP、DIN-68S-01端子台,在透過 ACL-102100-1連接軸卡與端子台,
ACL-102100-1
DIN-68S-01就很單純的把軸卡上那100bit 變成端子台,依自己的運用去接線,
但要自己想辦法做線,去連接伺服驅動器
DIN-814-GP
有現成的線能從DIN-814-GP接到安川伺服(26Pin 轉 50Pin)連接線,
目前我是用現成的線這樣接的,
然後在CN2接24V給板子,EMG沒有接
然後安裝驅動程式PCIe-8154_WDM_x64_R2.1.180419
官網下載驅動程式需要先註冊為會員,
驅動程式我選擇下載64位元的,
看了安川伺服驅動器的手冊K書兩天,設定參數
雖然借了有旋轉控制的功能,
但後來是使用位置控制,因為旋轉控制是給速度的,
我是要角度定位,速度給了就一直轉...我怎麼知道現在幾度,因此選擇位置控制。
再來就是要去搜尋馬達的資訊了,
這顆從倉庫借來的馬達SGM7G-13AFA61,
馬達型號辨別說明
重點再那個F的位置,如果是2、C,表示Encoder 是17bit
如果是3、D,表示Encoder 是20bit
7、F的話,是24bit,因此這顆馬達一圈的解析度是2的24次方,16777216 pulse 為1圈,實際還要看電子齒輪比與回授訊號
接線圖 :
update 2018.12.27
安裝完WDM後,安裝路徑下就有所有需要的資源,驅動程式(雖然安裝X64,但還是有X86在)、Library、範例、測試程式、手冊
雖然我是64位元電腦,但我習慣編譯成Any CPU,所以我選擇使用X86的Library
範例中只有兩種語言,VC與VB
雖然我是一路用BCB走過來的,最近才轉C#,但沒有BCB與C#範例這點問題是難不倒我的。
打開使用手冊,第六章開始就是介紹函式的部分
內文提到,『Delphi 開發,就要轉pci_8154.h這個檔案』,C#當然不例外
但我沒有全轉,我只轉我可能會用到的部分:
public class PCIe_8154
{
//初始化
[DllImport("8154.dll")]
public static extern short _8154_initial(out ushort CardID_InBit, short Manual_ID);
[DllImport("8154.dll")]
public static extern short _8154_close();
//取得命令位置Pulse數
[DllImport("8154.dll")]
public static extern short _8154_get_command(short AxisNo, out int Cmd);
//設定命令位置Pulse數
[DllImport("8154.dll")]
public static extern short _8154_set_command(short AxisNo, int Cmd);
//取得回授位置Pulse數
[DllImport("8154.dll")]
public static extern short _8154_get_position(short AxisNo, out double Pos);
//設定回授位置Pulse數
[DllImport("8154.dll")]
public static extern short _8154_set_position(short AxisNo, double Pos);
//取得錯誤Pulse數
[DllImport("8154.dll")]
public static extern short _8154_get_error_counter(short AxisNo, out short error);
//清除錯誤Pulse數
[DllImport("8154.dll")]
public static extern short _8154_reset_error_counter(short AxisNo);
//取得目標Pulse數
[DllImport("8154.dll")]
public static extern short _8154_get_target_pos(short AxisNo, out double TargetPos);
//清除目標Pulse數
[DllImport("8154.dll")]
public static extern short _8154_reset_target_pos(short AxisNo, double TargetPos);
//絕對位置移動T曲線
[DllImport("8154.dll")]
public static extern short _8154_start_ta_move(short AxisNo, double Pos, double StrVel, double MaxVel, double Tacc, double Tdec);
//絕對位置移動S曲線
[DllImport("8154.dll")]
public static extern short _8154_start_sa_move(short AxisNo, double Pos, double StrVel, double MaxVel, double Tacc, double Tdec, double SVacc, double SVdec);
//相對位置移動T曲線
[DllImport("8154.dll")]
public static extern short _8154_start_tr_move(short AxisNo, double Dist, double StrVel, double MaxVel, double Tacc, double Tdec);
//相對位置移動S曲線
[DllImport("8154.dll")]
public static extern short _8154_start_sr_move(short AxisNo, double Dist, double StrVel, double MaxVel, double Tacc, double Tdec, double SVacc, double SVdec);
//速度運動模式T曲線
[DllImport("8154.dll")]
public static extern short _8154_tv_move(short AxisNo, double StrVel, double MaxVel, double Tacc);
//速度運動模式S曲線
[DllImport("8154.dll")]
public static extern short _8154_sv_move(short AxisNo, double StrVel, double MaxVel, double Tacc, double SVacc);
//Servo ON
[DllImport("8154.dll")]
public static extern short _8154_set_servo(short AxisNo, short on_off);
//停止
[DllImport("8154.dll")]
public static extern short _8154_sd_stop(short AxisNo, double Tdec);
//Alarm Logic
[DllImport("8154.dll")]
public static extern short _8154_set_alm(short AxisNo, short alm_logic, short alm_mode);
public PCIe_8154()
{
}
}
留言列表