• 產業機械設備用微電腦單晶片馬達控制器

產品總覽

微電腦 單晶片 二軸控制器
描述: 微電腦二軸馬逹控制器, 附有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

        }

}