單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)_第1頁
單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)_第2頁
單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)_第3頁
單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)_第4頁
單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 MPC微型運動控制模塊 單片機與mpc運動控制模塊組成的三軸運動控制系統(tǒng)摘要:采用單片機stc89C2051和mpc微型運動控制模塊作為控制系統(tǒng)的核心,控制三路步進電機做運動實驗。單片機發(fā)送指令給mpc微型運動控制模塊,模塊信號輸出給步進驅(qū)動器作高速度運動。可以定點運動,直線插補和圓弧插補。 1引言運動控制的應(yīng)用在國內(nèi)已有十幾年的歷史,技術(shù)也相當成熟。通常運動控制都需要用到運動控制卡,運動控制器等產(chǎn)品,但這些產(chǎn)品價格高昂,使用復(fù)雜,也不適合由單片機構(gòu)成的控制系統(tǒng)。而如果直接采用單片機來做運動控制,由于運動控制對系統(tǒng)性能要求非常高,單片機速度資源有限,難以設(shè)計出性能優(yōu)良的運動控制模型。因此,本

2、文采用單片機和專業(yè)的mpc微型運動控制模塊構(gòu)成運動控制系統(tǒng)。MPC微型運動控制模塊采用新型FPGA設(shè)計,集成實用運動控制功能,可與普通單片機通過串口通訊對步進電機和伺服電機控制。具有如下特點: 串口通訊,僅需使用幾條指令,簡單可靠。 單模塊最高六軸輸出,多個模塊組網(wǎng)工作可達120軸。 最大脈沖輸出頻率為2MHz,脈沖輸出使用脈沖+方向方式。 最高六軸獨立運動控制,任意兩軸直線插補,任意兩軸圓弧插補。 每軸一路硬件回原點。 模塊帶1000級指令緩存深度,指令先進先出。 模塊體積小巧,僅3.5*2.5*1.5cm,雙排直插30腳。2,系統(tǒng)硬件設(shè)計硬件系統(tǒng)由四部分構(gòu)成:(1) 單片機部分單片機與模塊

3、只需三根線連接,用作串口通訊的RXD和TXD,用作模塊緩存滿輸出的BUSY信號。P3.7引出一按鍵作為測試使用。(2) mpc微型運動控制模塊部分mpc微型運動控制模塊采用5V電源供電,TXD,BUSY與單片機連接。X0,X1,X2可作為三路電機的原點信號,P1,D1為1軸的脈沖和方向信號。P2,D2為2軸的脈沖和方向信號。P3,D3為3軸的脈沖和方向信號。(3)原點信號輸入部分原點采用光藕隔離輸入,輸入端可接NPN型光電開關(guān)來作為原點信號。(4) 信號輸出部分輸出采用NPN晶體管極電極開路輸出,分別接到電機驅(qū)動器脈沖和方向信號輸入端。3,系統(tǒng)軟件設(shè)計MPC微型運動控制模塊與單片機串口通訊速率

4、為115200bps,數(shù)據(jù)位為8位,停止位0位,無校驗。使用函數(shù)前先設(shè)置好單片機的串口功能,并將需要用到的函數(shù)的原型拷貝到當前程序內(nèi)。試驗程序如下:#include <reg52.h>/-STC89C2051-sfr IPH=0XB7;sfrCCON=0XD8;sfrCMOD=0XD9;sfrCL=0XE9;sfrCH=0XF9;sfrCCAP0L=0XEA;sfrCCAP0H=0XFA;sfrCCAPM0=0XDA;sfrCCAPM1=0XDB;sfr P3M1= 0XB1;sfr P3M0= 0XB2;sfr P1M1= 0X91;sfr P1M0= 0X92;sfr WAKE

5、_CLKO= 0X8f;sfr BRT =0x9c;sfr AUXR =0x8E;sfr AUXR1 = 0xA2; sfr WDT_CONTR = 0xc1;sfr T2MOD = 0xC9; /sbit busy = P32;sbit s1=P37; void initial()P3M1 = 0x00; P3M0 = 0x80;P1M1 = 0x00; P1M0 = 0xf9; void init_uart() PCON &= 0x7f; /波特率不倍速 SCON = 0x50; /8位數(shù)據(jù),可變波特率 BRT = 0xFD; /設(shè)定獨立波特率發(fā)生器重裝值 波特率115200bps

6、 AUXR |= 0x04; /獨立波特率發(fā)生器時鐘為Fosc,即1T AUXR |= 0x01; /串口1選擇獨立波特率發(fā)生器為波特率發(fā)生器 AUXR |= 0x10; /啟動獨立波特率發(fā)生器/*串口發(fā)送一個字節(jié),需根據(jù)所使用的單片機作適當更改。*/ void USART_Txbyte(unsigned char i) SBUF = i; while(TI =0); /等待發(fā)送完成 TI = 0; /清零串口發(fā)送完成中斷請求標志/*串口接收模塊返回的10個字節(jié)數(shù)據(jù),需根據(jù)所使用的單片機作適當更改。*/ void receive(unsigned char *buf)unsigned char

7、 i;for(i=0;i<10;i+) while(RI=0); RI=0; bufi=SBUF; /*串口發(fā)送一串數(shù)據(jù)。*/void USRAT_transmit(unsigned char *fdata,unsigned char len) unsigned char i; for(i=0;i<len;i+) USART_Txbyte(fdatai); /*函數(shù)名: inp_move功能:二軸直線插補參數(shù):cardno 卡號no1 X軸軸號no2 Y軸軸號pulse1,pulse2X-Y軸移動的距離,范圍(-8388608+8388607)mode 0:相對坐標 1:絕對坐標返

8、回值:0 失敗1 成功*/unsigned char inp_move(unsigned char cardno,unsigned char no1 ,unsigned char no2 , long pulse1 ,long pulse2 ,unsigned char mode ) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0x0F;OutByte2 = cardno;OutByte3 = 0x7;OutByte4 = no1;OutByte5 = no2;OutByte6 = pulse

9、1>>24;OutByte7 = pulse1 >>16;OutByte8 = pulse1>> 8;OutByte9 = pulse1;OutByte10 = pulse2 >>24;OutByte11 = pulse2 >>16;OutByte12 = pulse2 >>8;OutByte13 = pulse2 ;OutByte14 = mode;OutByte15 =OutByte1 +OutByte2 +OutByte3 +OutByte4+OutByte5 +OutByte6 +OutByte7 +OutByte

10、8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 +OutByte13 +OutByte14;USRAT_transmit(OutByte,16);receive(inbuf);return 1;/*函數(shù)名: inp_arc功能:二軸圓弧插補參數(shù):cardno卡號no1參與插補X軸的軸號no2參與插補Y軸的軸號x,y圓弧插補的終點位置(相對于起點),范圍(-8388608+8388607)i,j圓弧插補的圓心點位置(相對于起點),范圍(-8388608+8388607)mode 0:順時針插補 1:逆時針插補返回值:0 失敗1 成功*/unsigned

11、 char inp_arc(unsigned char cardno ,unsigned char no1,unsigned char no2, long X , long y, long i, long j,unsigned char mode ) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0x17;OutByte2 = cardno;OutByte3 = 0x7;OutByte4 = no1;OutByte5 = no2;OutByte6 = X >>24;OutByte7

12、= X >>16;OutByte8 = X >>8;OutByte9 = X ;OutByte10 = y >>24;OutByte11 = y >>16;OutByte12 = y >>8;OutByte13 = y ;OutByte14 = i >>24;OutByte15 = i >>16;OutByte16 = i >>8;OutByte17 = i ;OutByte18 = j >>24;OutByte19 = j >>16;OutByte20 = j >&g

13、t;8;OutByte21 = j ;OutByte22 = mode;OutByte23 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 +OutByte13 +OutByte14 +OutByte15 +OutByte16 +OutByte17 +OutByte18 +OutByte19 +OutByte20 +OutByte21 +OutByte22 ;USRAT_transmit(OutB

14、yte,24); receive(inbuf);return 1;/*函數(shù)名: set_speed功能:設(shè)置軸速度參數(shù):cardno卡號axis軸號(1-6)acc 加速時間(ms)dec 減速時間(ms)startv 啟動頻率(*100Hz)speed 運行頻率(*100Hz)返回值:0 失敗1 成功*/unsigned char set_speed(unsigned char cardno ,unsigned char axis ,unsigned int acc ,unsigned int dec ,unsigned int startv ,unsigned int speed ) un

15、signed char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0xD;OutByte2 = cardno;OutByte3 = 1;OutByte4 = axis;OutByte5 = acc >>8;OutByte6 = acc ;OutByte7 = dec >>8;OutByte8 = dec ;OutByte9 = startv >>8;OutByte10 = startv ;OutByte11 = speed >>8;OutByte12 = speed ;O

16、utByte13 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 ;USRAT_transmit(OutByte,14);receive(inbuf);return 1;/*函數(shù)名: set_soft_limit功能:設(shè)置軸軟件限位參數(shù):cardno卡號axis軸號(1-6)pulse1負方向限位脈沖值,范圍(-83886080)pulse2正方向限位脈沖值,范圍(0+8388607)返回值:0

17、失敗1 成功*/unsigned char set_soft_limit(unsigned char cardno ,unsigned char axis ,unsigned char mode, long pulse1 , long pulse2 ) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0xE;OutByte2 = cardno ;OutByte3 = 0x13;OutByte4 = axis;OutByte5 = mode;OutByte6 = pulse1 >>24;

18、OutByte7 = pulse1 >>16;OutByte8 = pulse1 >>8;OutByte9 = pulse1 ;OutByte10 = pulse2 >>24;OutByte11 = pulse2 >>16;OutByte12 = pulse2 >>8;OutByte13 = pulse2 ;OutByte14 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +Out

19、Byte11 + OutByte12 +OutByte13 ;USRAT_transmit(OutByte,15);receive(inbuf);return 1;/*函數(shù)名: pmove功能:單軸運行參數(shù):cardno卡號axis軸號(1-6)pulse 輸出的脈沖數(shù) >0:正方向移動 <0:負方向移動范圍(-268435455+268435455)mode 0:相對位置 1:絕對位置返回值:0 失敗1 成功*/unsigned char pmove(unsigned char cardno ,unsigned char axis,long pulse , unsigned ch

20、ar mode) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68;OutByte1 = 0xA ;OutByte2 = cardno;OutByte3 = 2;OutByte4 = axis;OutByte5 = pulse >>24;OutByte6 = pulse >>16;OutByte7 = pulse >>8;OutByte8 = pulse ;OutByte9 = mode ;OutByte10 =OutByte1 +OutByte2 +OutByte3 +OutByt

21、e4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 ;USRAT_transmit(OutByte,11);receive(inbuf);return 1;/*函數(shù)名: wait_delay功能:等待延時數(shù)參數(shù):cardno卡號value 延時量(1-10000)MS返回值:0 失敗1 成功*/unsigned char wait_delay(unsigned char cardno ,unsigned int value) unsigned char OutByte25;unsigned char inbuf12; OutByte0 =

22、0x68 ;OutByte1 = 0x6 ;OutByte2 = cardno ;OutByte3 = 0xE ;OutByte4 = value >>8;OutByte5 = value ;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函數(shù)名:set_command_pos功能: 設(shè)置軸邏輯位置參數(shù):cardno卡號axis軸號(1-6)pulse 位置脈沖數(shù),范圍(-268435455+268435455

23、)返回值:0 失敗1 成功*/unsigned char set_command_pos(unsigned char cardno ,unsigned char axis, long value ) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x9 ;OutByte2 = cardno ;OutByte3 = 0x12 ;OutByte4 = axis ;OutByte5 = value >>24;OutByte6 = value >>16;OutByte7 =

24、value >>8;OutByte8 = value ;OutByte9 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);receive(inbuf);return 1; /*函數(shù)名: wait_pulse功能:等待軸脈沖數(shù)參數(shù):cardno卡號axis軸號(1-6)pulse 位置脈沖數(shù),范圍(-268435455+268435455)返回值:0 失敗1 成功*/unsigned char wait_pulse(u

25、nsigned char cardno ,unsigned char axis, long value ) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0x9 ;OutByte2 = cardno ;OutByte3 = 0x19;OutByte4 = axis ;OutByte5 = value >>24;OutByte6 = value >>16;OutByte7 = value >>8;OutByte8 = value ;OutByte9 =OutBy

26、te1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);receive(inbuf);return 1;/*函數(shù)名: write_bit功能:寫輸出口狀態(tài)參數(shù):cardno卡號number 端口號(0-8) Y0-Y8value 狀態(tài)(0,1) 0 輸出低電平 1 輸出高電平返回值:0 失敗1 成功*/unsigned char write_bit(unsigned char cardno , unsigned char number, unsig

27、ned char value) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x6 ;OutByte2 = cardno ;OutByte3 = 3;OutByte4 = number;OutByte5 = value;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 ;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函數(shù)名: sudden_stop功能: 軸停止參數(shù)

28、:cardno卡號axis停止的軸號(1-6)返回值:0 失敗1 成功*/unsigned char sudden_stop(unsigned char cardno ,unsigned char axis) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68;OutByte1 = 0x5;OutByte2 = cardno ;OutByte3 = 0x17 ;OutByte4 = axis ;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4 ;USRAT_transmit

29、(OutByte,6);receive(inbuf);return 1;/*函數(shù)名: wait_in功能: 等待輸入口狀態(tài)參數(shù):cardno卡號number 端口號(0-6) X0-X6value 狀態(tài)(0,1) 0 輸入低電平 1 輸入高電平返回值:0 失敗1 成功*/unsigned char wait_in( unsigned char cardno, unsigned char number, unsigned char value) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68 ;OutByte1 = 0x

30、6 ;OutByte2 = cardno;OutByte3 = 0xF ;OutByte4 = number ;OutByte5 = value;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函數(shù)名: wait_stop功能:等待軸停止參數(shù):cardno 卡號axis 需要停止的軸號返回值:0 失敗1 成功*/unsigned char wait_stop(unsigned char cardno ,unsigned c

31、har axis) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x5 ;OutByte2 = cardno ;OutByte3 = 9;OutByte4 = axis ;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4;USRAT_transmit(OutByte,6);receive(inbuf);return 1;/*函數(shù)名: get_number功能:獲取唯一序列號參數(shù):cardno卡號返回值: 32位序列號*/unsigned lo

32、ng get_number(unsigned char cardno ) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x4 ;OutByte2 = cardno;OutByte3 = 0xC ;OutByte4 =OutByte1 +OutByte2 +OutByte3 ;USRAT_transmit(OutByte,5);receive(inbuf);return (unsigned long)inbuf4<<24+(unsigned long)inbuf5<<

33、16+(unsigned long)inbuf6<<8+(unsigned long)inbuf7;/*函數(shù)名: get_status功能:獲取各軸工作狀態(tài)參數(shù):cardno卡號返回值: 8位二進制,1-6位分別代表1-6軸狀態(tài),0表示停止中,1表示運行中。*/unsigned char get_status( unsigned char cardno) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68 ;OutByte1 = 0x4 ;OutByte2 = cardno ;OutByte3 = 5 ;Out

34、Byte4 =OutByte1 +OutByte2 +OutByte3 ;USRAT_transmit(OutByte,5);receive(inbuf);return inbuf4;/*函數(shù)名: get_command_pos功能: 獲取軸邏輯位置參數(shù):cardno卡號axis 軸號返回值: 位置脈沖數(shù),范圍(-268435455+268435455)*/unsigned long get_command_pos( unsigned char cardno, unsigned char axis) unsigned char OutByte25;unsigned char inbuf12; OutByte0 =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論