描述: | 微電腦二軸馬逹控制器, 附有16個輸入點及16個輸出點, 可搭配顯示器/按鍵板等等元件, 降低電控元件成本及配線工時, 提高機器功能與質感, 大幅提高市場競爭力, 將機台銷售至全世界 !! |
微電腦二軸馬逹控制器, 附有16個輸入點及16個輸出點, 可搭配顯示器/按鍵板等等元件, 降低電控元件成本及配線工時, 提高機器功能與質感, 大幅提高市場競爭力, 將機台銷售至全世界 !!
如何設計專屬客製化控制器:
操作面板 | □機械式 Tact Switch | □薄膜式Keypad | □觸控螢幕 | |
顯示器 | □液晶 LCD | □文字型 LCM | □ 七段顯示器 | □人機界面 |
螢幕尺寸 | □4.3” | □7” | □8” | □10.2” |
通訊介面 | □RS232 | □RS485 | ||
輸入訊號數量 | □8個 以下 | □9~16個 | □16個 以上 | |
輸出訊號數量 | □8個 以下 | □9~16個 | □16個 以上 | |
馬達型式 | □ 伺服馬達 | □直流無刷馬達 | □步進馬達 | □感應馬達 |
增加功能項目 : | ||||
Analogy to Digital (A/D) | □1個 | □2 個 | □2個 以上 | |
Digital to Analogy (D/A) | □1個 | □2 個 | □2個 以上 | |
是否將自行開發應用軟體 ( C語言 ) | □是 | □否 |
函式庫內容:
函式庫的成立, 將使用戶更加方便於軟體開發, 我們將致力於開發更多更好用的函式指令來提供用戶更新更快的軟體開發工作.
一、單軸軟體功能
(一)X軸 / Y軸相對位移加速動作
(二)X軸 / Y軸絕對位置加速動作
(三)X軸 / Y軸相對位移定速動作
二、雙軸軟體功能
(一)XY軸相對位移加速動作
(二)XY軸絕對位置加速動作
(三)XY軸相對位移定速動作
(四)XY軸絕對位置定速動作
三、I/O 軟體功能
(一)讀取X軸位置值 (X_Encoder 值)
(二)讀取Y軸位置值 (Y_Encoder 值)
(三)讀取 Limit 狀態值
(四)讀取 Home Sensor 狀態值
(五)讀取 Input 狀態值
(六)緊急停止
(七)輸出 Servo ON 控制訊號
(八)輸出 Output 控制訊號
*******************************************************************
功能持續增加中, 敬請洽詢 !
規格僅供參考. 最新詳細規格,敬請聯絡我們!
懋騏工業股份有限公司保留修改規格之權利.
範例程式:
/******************************************************************/
說明::以GPIO 模擬I2C通訊
void I2C_init(void) :初始化 I2C IO
void I2C_start(void) :I2C通訊開始
void I2C_stop(void) :I2C通訊結束
void I2C_send_8bit(char data) :I2C傳送8位元資料
char I2C_receive_8bit(void) :I2C接收8位元資料
/******************************************************************/
void I2C_init(void)
{
gpio_init_io(I2C_SCL, GPIO_OUTPUT); //Set GPIO Dir
gpio_init_io(I2C_SDA, GPIO_OUTPUT); //Set GPIO Dir
//stop
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA=H
}
void I2C_start(void)
{
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
nop();
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA=H
nop();
gpio_write_io(I2C_SDA, DATA_LOW); /SDA=L
}
void I2C_stop(void)
{
nop();
gpio_write_io(I2C_SDA, DATA_LOW); //SDA=L
nop();
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
nop();
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA=H
}
void I2C_send_8bit(char data)
{
char i;
for (i=0;i<8;i++)
{
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
nop();
if (data & 0x80)
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA=H
else
gpio_write_io(I2C_SDA, DATA_LOW); //SDA=L
nop();
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
nop();
data <<= 1;
}
// The 9th bit transmission ACK
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
gpio_write_io(I2C_SDA, DATA_HIGH); //SDA=H
gpio_init_io(I2C_SDA, GPIO_INPUT);
while(gpio_read_io(I2C_SDA)!=0); //wait ACK
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
nop();
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
gpio_init_io(I2C_SDA, GPIO_OUTPUT);
}
char I2C_receive_8bit(void)
{
char data=0,i=0;
gpio_init_io(I2C_SDA, GPIO_INPUT);
for (i=0;i<8;i++)
{
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
nop();
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
data <<=1;
data |=( gpio_read_io(I2C_SDA)); //receive bit data
nop();
}
// The 9th bit transmission
gpio_write_io(I2C_SDA, DATA_LOW);
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
gpio_init_io(I2C_SDA, GPIO_OUTPUT);
nop();
nop();
gpio_write_io(I2C_SCL, DATA_HIGH); //SCL=H
nop();
nop();
gpio_write_io(I2C_SCL, DATA_LOW); //SCL=L
return data;
}
/******************************************************************/
說明:: CRC Check
INT32U crctab[] :CRC check table 256筆 32 bit 資料
int calculate_crc32(char* buf, int size)
char* buf :需運算之資料位址
int size : 需運算之資料大小
resurn:crc valus
/******************************************************************/
INT32U crctab[256]={ 0x00000000,0x77073096,0xee0e612c,
︴︴
, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
int calculate_crc32(char* buf, int size)
{
int i=0,crc = 0xffffffff;
for (i=0;i
crc = ((crc >> 8)&0xffffffff) ^ crctab[(crc & 0xff )^ *buf++];
crc ^= 0xffffffff ;
return crc; //回傳CRC值
}
/******************************************************************/
說明:以GPIO 模擬ISA通訊
void send_cmd(INT16U addr, INT16U data):Used ISA bus send data
INT16U read_cmd(INT16U addr):Used ISA bus read data
/******************************************************************/
void send_cmd(INT16U addr, INT16U data)
{
R_IOD_DIR=0xFFFF; //set IO output enable
R_IOD_O_DATA=data; //Put data before setting address
nop();
R_IOC_O_DATA=IO_READ_H|IO_WRITE_H|addr; //setting address & write
nop();
}
INT16U read_cmd(INT16U addr)
{
INT16U data=0;
R_IOD_DIR=0x0000; //set IO input enable
R_IOC_O_DATA=IO_READ_L|IO_WRITE_H|addr;
nop();
data=R_IOD_I_DATA;
nop();
return data; //return read from ISA bus data
}
/******************************************************************/
說明:以GPIO 模擬8080通訊
void lcm_write (INT8U data, INT8U type)
INT8U data: write data
INT8U type: data type 0:command 1 : display data
INT8U lcm_read_cmd(void):read data from LCM
void wait_lcm_busy(void):wait LCM busy
/******************************************************************/
void lcm_write (INT8U data, INT8U type)
{
R_IOE_O_DATA&=0x0007;
nop();
if(type==0)
R_IOE_O_DATA|=LCM_W|LCM_DIR_O|LCM_ENABLE|LCM_CMD|data;
else
R_IOE_O_DATA|=LCM_W|LCM_DIR_O|LCM_ENABLE|data;
nop();
R_IOE_O_DATA&=~LCM_ENABLE;
}
INT8U lcm_read_cmd(void)
{
INT16U buf=0;
INT8U data=0;
R_IOE_O_DATA|=LCM_R|LCM_DIR_I|LCM_ENABLE|LCM_CMD;
nop();
R_IOE_O_DATA&=~LCM_ENABLE;
buf=R_IOE_I_DATA;
data=buf>>8;
return data;
}
void wait_lcm_busy(void) //wait LCM busy
{
INT8U flag=0;
while(1){
flag=lcm_read_cmd();
if((flag&0x80)==0)
break;
}
}
/*******************************************************************/
實際應用範例:寫入 8 bit 資料於 AT24C04
char id :設備ID ( 本範例程式為0xA0 )
INT16U addr:寫入位址 (2 BYTES 位址)
char data:寫入資料
/*******************************************************************/
void I2C_write_1byte(char id, INT16U addr, char data)
{
I2C_init(); //I/O set
I2C_start(); //star
I2C_send_8bit(id); //send id
I2C_send_8bit(addr>>8); //send address high byte
I2C_send_8bit(addr); //send address low byte
I2C_send_8bit(data); // send data
I2C_stop(); //finish
delav_msec_wait(5); // write cycle 5ms
}
/*******************************************************************/
實際應用範例:於LCM上顯示”Hello word!!” (WH1602C)
/*******************************************************************/
void lcm_display(void){
INT8U string_arry[12]={“Hello word!!” };
INT8U flag=0;
// LCM init
lcm_write_cmd(0x38);//0x3c//LCM init
drv_msec_wait(1);
lcm_write_cmd(0x0F);//set display
drv_msec_wait(1);
lcm_write_cmd(0x01);//display clear
drv_msec_wait(2);
lcm_write_cmd(0x06);//show word mode setting
//display string ” Hello word!! ”
lcm_write_cmd(0x80) //display line 1;
wait_lcm_busy(); // wait LCM busy
for(i=0,j=0;i<12;i++) //write string
{
lcm_write_data( string_arry[i] );
wait_lcm_busy(); // wait LCM busy
}
}