一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>芯片引腳圖>

xc1004運(yùn)動(dòng)芯片怎么樣?xc1004四軸SPI運(yùn)動(dòng)控制芯片詳解(含例程)

2020年10月22日 10:32 蘭峰控制技術(shù)w75815895 作者:蘭峰控制技術(shù)w75 用戶評(píng)論(0

Xc1004四軸SPI運(yùn)動(dòng)控制芯片?

?

冊(cè)

?

? ?概述

?? SPI通訊,僅需使用10條指令便可完成復(fù)雜工作。

芯片四軸輸出,多個(gè)芯片通過不同片選腳可控制達(dá)120軸。

獨(dú)立軸e版本支持最大脈沖輸出頻率1.2MHz獨(dú)立輸出。

插補(bǔ)軸f版本支持四軸,三軸,二軸,一軸直線插補(bǔ),二軸圓弧插補(bǔ),螺旋插補(bǔ),支持連續(xù)插補(bǔ),支持速度前瞻。

脈沖輸出使用脈沖+方向方式。

各版本擁有128條運(yùn)動(dòng)指令緩存空間。

LQFP48封裝,引腳輸入輸出3.3V,可兼容5V。

?

性能參數(shù)

?

供電電源

3.3VDC?? 電流100MA

溫度范圍

-40 ~ +105

封裝

LQFP48

IO輸入

3.3v ,兼容5v

IO輸出

3.3v ? TTL輸出

控制軸數(shù)

? 4

脈沖頻率

??e版:1.2MHZ?? ??f版:400kHZ??

運(yùn)動(dòng)性能

e版:單軸運(yùn)行,指令緩存

f版:1-4軸直線插補(bǔ) ,圓弧插補(bǔ),螺旋插補(bǔ),支持指令緩存,支持連續(xù)插補(bǔ)

通信速度

SPI:10Mbps

?

?

?

引腳排列

?

引腳號(hào)

引腳名稱

引腳功能說明

1

VDD

電源正極+3.3V

2

Y4

4號(hào)輸出口

3

Y5

5號(hào)輸出口

4

Y6

6號(hào)輸出口

5

A

空引腳

6

B

空引腳

7

RST

復(fù)位引腳,低電平有效

8

VSS

電源負(fù)極

9

VDD

電源正極+3.3V

10

LMT1-

1軸負(fù)限位或原點(diǎn),低電平有效

11

LMT2-

2軸負(fù)限位或原點(diǎn),低電平有效

12

LMT3-

3軸負(fù)限位或原點(diǎn),低電平有效

13

LMT4-

4軸負(fù)限位或原點(diǎn),低電平有效

14

LMT1+

1軸正限位,低電平有效

15

LMT2+

2軸正限位,低電平有效

16

LMT3+

3軸正限位,低電平有效

17

LMT4+

4軸正限位,低電平有效

18

STOP

急停引腳,低電平有效

19

NC

空引腳

20

VSS

電源負(fù)極

21

Y0

0號(hào)輸出口

22

Y1

1號(hào)輸出口

23

VSS

電源負(fù)極

24

VDD

電源正極+3.3V

25

CS

SPI通信使能腳,低電平有效

26

SCK

SPI通信時(shí)鐘腳

27

SO

SPI通信數(shù)據(jù)輸出腳,接單片機(jī)數(shù)據(jù)輸入腳

28

SI

SPI通信數(shù)據(jù)輸入腳,接單片機(jī)數(shù)據(jù)輸出腳

29

P1

第1軸脈沖信號(hào)

30

TXD

串口數(shù)據(jù)發(fā)送

31

RXD

串口數(shù)據(jù)接收

32

D1

第1軸方向信號(hào)

33

Y2

2號(hào)輸出口

34

Y3

3號(hào)輸出口

35

VSS

電源負(fù)極

36

VDD

電源正極+3.3V

37

SIGN

工作狀態(tài)指示,閑時(shí)慢速交替變化,軸運(yùn)行時(shí)快速交替變化

38

P2

第2軸脈沖信號(hào)

39

D2

第2軸方向信號(hào)

40

P3

第3軸脈沖信號(hào)

41

D3

第3軸方向信號(hào)

42

NC

空引腳

43

NC

空引腳

44

VSS

電源負(fù)極

45

P4

第4軸脈沖信號(hào)

46

D4

第4軸方向信號(hào)

47

VSS

電源負(fù)極

48

VDD

電源正極+3.3V

?

SPI通訊協(xié)議

?

芯片與單片機(jī)使用SPI通訊,單片機(jī)作為主機(jī),芯片為從機(jī)。CPHA=0,CPOL=0,高位在前,SPI數(shù)據(jù)寬度為8位??臻e狀態(tài)下單片機(jī)SCK引腳必須為低電平。每一條指令開始發(fā)送前將CS引腳置低,整條指令發(fā)送完成后必須將CS置高。

每條指令間隔1MS以上。

?

SPI時(shí)序圖如下:

?

SPI通訊指令

?

設(shè)置軸速度(e版本f版本共用指令)

?

發(fā)送:

功能碼

補(bǔ)充0

軸號(hào)

加速度

運(yùn)行速度

0x01

0x00

1字節(jié)

4字節(jié)

4字節(jié)

?

部分參數(shù)解釋:

軸號(hào)(1,2,3,4)?

加減速??? 加減速為:? e版(1-480000)(Hz/s2)? f版(1-1600000)(Hz/s2)

運(yùn)行速度? 運(yùn)行頻率為:e版(1-1200000)(Hz)???? f版(1-400000)(Hz)

?

要點(diǎn):e版本軸號(hào)有效,速度為對(duì)應(yīng)軸的速度。f版本由于共用一個(gè)插補(bǔ)核心,軸號(hào)設(shè)為任意值都為所有軸速度,如需改變當(dāng)前運(yùn)動(dòng)指令里的速度需在當(dāng)前指令前重設(shè)速度。加速度最大可設(shè)為運(yùn)行速度4倍。

?

?

?

設(shè)置軸邏輯位置(e版本f版本共用指令)

?

發(fā)送:

?

功能碼

補(bǔ)充0

軸號(hào)

位置

0x12

0x00

1字節(jié)

4字節(jié)

?

部分參數(shù)解釋:

軸號(hào)(1,2,3,4)?? 1-4:1-4軸

位置????? 軸邏輯位置,范圍(-268435455~+268435455

?

?

軸停止(e版本f版本共用指令)

發(fā)送:

?

功能碼

軸號(hào)

模式

0x17

1字節(jié)

1字節(jié)

??? ??

部分參數(shù)解釋:

?

軸號(hào)(1,2,3,4)?? ??? 1-4: 1-4軸?

模式(0,1,2) ???????0:急停并清空后面緩存的指令? ?1:減速停不清空后面緩存的指令 ???2:急停不清空后面緩存的指令

要點(diǎn):f版本由于共用一個(gè)插補(bǔ)核心,軸號(hào)設(shè)為任意值都會(huì)讓所用軸停止。

?

各軸邏輯位置和狀態(tài)(e版本f版本共用指令)

發(fā)送:

?

功能碼

數(shù)據(jù)0

0x04

最多19個(gè)字節(jié)

????????

返回:

起始碼

各軸運(yùn)行狀態(tài)

緩存數(shù)量

1軸坐標(biāo)

2軸坐標(biāo)

3軸坐標(biāo)

4軸坐標(biāo)

0x00

1字節(jié)

2字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)


?

部分參數(shù)解釋:

?

?

各軸運(yùn)行狀態(tài)(轉(zhuǎn)為8位二進(jìn)制數(shù))

?

第0位為e版1軸狀態(tài)??? ?0:停止中? 1:運(yùn)行中

第1位為e版2軸狀態(tài)??? ?0:停止中? 1:運(yùn)行中

第2位為e版3軸狀態(tài)??? ?0:停止中? 1:運(yùn)行中

第3位為e版4軸狀態(tài)??? ?0:停止中? 1:運(yùn)行中

?

第5位為f版插補(bǔ)核各軸狀態(tài)??? 0:停止中? 1:運(yùn)行中

?

緩存數(shù)量(0-128)?? 還未運(yùn)行的緩存指令數(shù)

?

各軸坐標(biāo)??? ????范圍(-268435455~+268435455

?

?

要點(diǎn):返回字節(jié)按功能順序排列,由于SPI工作模式是一邊發(fā)送一邊接收,如只需取前面字節(jié)的數(shù)據(jù),為節(jié)省通訊時(shí)間,可只發(fā)送對(duì)應(yīng)字節(jié)的數(shù)據(jù)0。例如只需獲取各軸運(yùn)行狀態(tài),發(fā)送2個(gè)字節(jié)0便可。軸運(yùn)行狀態(tài)只是軸的瞬時(shí)狀態(tài),不能用來指示圓弧指令是否完成。可通過讀取緩存數(shù)量來判斷緩存區(qū)指令是否完成。一條圓弧指令會(huì)動(dòng)態(tài)占用最多120條緩存空間。

設(shè)置特殊功能(f版本專用指令)

?

發(fā)送:

?

功能碼

補(bǔ)充0

功能

0xfa

0x00

1字節(jié)

?

?

?

部分參數(shù)解釋:

?

當(dāng)功能寫入0xfc,緩存內(nèi)運(yùn)動(dòng)指令暫停。

當(dāng)功能寫入0xfd,取消緩存內(nèi)運(yùn)動(dòng)指令暫停。

以下指令會(huì)自動(dòng)進(jìn)入緩存區(qū)并排隊(duì)執(zhí)行:

?

回原點(diǎn)(e版本f版本共用指令)

發(fā)送:

?

功能碼

補(bǔ)充0

軸號(hào)

進(jìn)入原點(diǎn)速度

離開原點(diǎn)速度

0x1a

0x00

1字節(jié)

4字節(jié)

4字節(jié)

?

?

?

?

?

部分參數(shù)解釋:

?

軸號(hào)(1,2,3,4)

?

進(jìn)入原點(diǎn)速度? 運(yùn)行頻率為:值(1-400000)(Hz)

?

離開原點(diǎn)速度? 運(yùn)行頻率為:值(1-400000)(Hz)

?

要點(diǎn):回原點(diǎn)指令會(huì)自動(dòng)生成一段負(fù)脈沖和一段正脈沖。以進(jìn)入原點(diǎn)速度輸出負(fù)脈沖時(shí),左限位原點(diǎn)開關(guān)生效時(shí)自動(dòng)減速停;隨后以離開原點(diǎn)速度輸出正脈沖,離開原點(diǎn)限位開關(guān)時(shí)自動(dòng)急速停止,急停后可作為原點(diǎn)?;卦c(diǎn)指令不宜和其它運(yùn)動(dòng)指令混合在一起放入緩存里,回原點(diǎn)過程應(yīng)單獨(dú)存在。

?

?

四軸直線插補(bǔ)(f版本專用指令)

發(fā)送:

?

?

功能碼

X軸號(hào)

Y軸號(hào)

Z軸號(hào)

E軸號(hào)

X脈沖數(shù)

Y脈沖數(shù)

Z脈沖數(shù)

E脈沖數(shù)

補(bǔ)充0

運(yùn)動(dòng)方式

0x0a

1字節(jié)

1字節(jié)

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

0x00

1字節(jié)

?

?

部分參數(shù)解釋:

X軸號(hào)(1,2,3,4)

Y軸號(hào)(1,2,3,4)

Z軸號(hào)(1,2,3,4)

E軸號(hào)(1,2,3,4)

?

X脈沖(-268435455~+268435455

Y脈沖(-268435455~+268435455

Z脈沖(-268435455~+268435455

E脈沖(-268435455~+268435455

?

運(yùn)動(dòng)方式(0,1)?? 0:絕對(duì)位移? 1:相對(duì)位移?

?

要點(diǎn):當(dāng)只需要少于四軸做插補(bǔ)時(shí),不用的軸號(hào)和脈沖數(shù)寫0。

?

二軸圓弧插補(bǔ)(f版本專用指令)

發(fā)送:

?

功能碼

X軸號(hào)

Y軸號(hào)

終點(diǎn)坐標(biāo)X

終點(diǎn)坐標(biāo)Y

圓心坐標(biāo)X

圓心坐標(biāo)Y

運(yùn)動(dòng)方式1

運(yùn)動(dòng)方式2

0x0c

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

1字節(jié)

1字節(jié)

?

?

?

?

部分參數(shù)解釋:

X軸號(hào)(1,2,3)

Y軸號(hào)(1,2,3)

終點(diǎn)坐標(biāo)? ???????圓弧插補(bǔ)的終點(diǎn)位置,范圍-268435455~+268435455

圓心坐標(biāo) ????????圓弧插補(bǔ)的圓心點(diǎn)位置,范圍-268435455~+268435455

運(yùn)動(dòng)方式1 ???????0:逆時(shí)針插補(bǔ)?? 1:順時(shí)針插補(bǔ)?? 2:三點(diǎn)定圓弧

運(yùn)動(dòng)方式2?? ?????0:絕對(duì)位移? 1:相對(duì)位移?

?

要點(diǎn):圓弧各坐標(biāo)必須能構(gòu)成正常的圓弧。圓弧插補(bǔ)指令會(huì)根據(jù)圓弧參數(shù)動(dòng)態(tài)占用緩存空間。當(dāng)運(yùn)動(dòng)方式1設(shè)為2時(shí),為三點(diǎn)定圓弧模式,圓心坐標(biāo)參數(shù)設(shè)為圓弧的中間點(diǎn)坐標(biāo)。

?

?

三軸螺旋插補(bǔ)(f版本專用指令)

發(fā)送:

?

功能碼

X軸號(hào)

Y軸號(hào)

Z軸號(hào)

終點(diǎn)坐標(biāo)X

終點(diǎn)坐標(biāo)Y

脈沖數(shù)

圓心坐標(biāo)X

圓心坐標(biāo)Y

運(yùn)動(dòng)方式1

運(yùn)動(dòng)方式2

0x0d

1字節(jié)

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

字節(jié)

4字節(jié)

4字節(jié)

1字節(jié)

1字節(jié)

?

?

部分參數(shù)解釋:

X軸號(hào)??? (1,2,3)?? 圓弧X軸

Y軸號(hào)??? (1,2,3)?? 圓弧Y軸

Z軸號(hào)? ??(1,2,3)?? 螺旋軸

終點(diǎn)坐標(biāo)? ???圓弧插補(bǔ)的終點(diǎn)位置,范圍-268435455~+268435455

圓心坐標(biāo)???? 圓弧插補(bǔ)的圓心點(diǎn)位置,范圍-268435455~+268435455

運(yùn)動(dòng)方式1 ????0:逆時(shí)針插補(bǔ)?? 1:順時(shí)針插補(bǔ)?

運(yùn)動(dòng)方式2? ???0:絕對(duì)位移? 1:相對(duì)位移?

?

等待延時(shí)(e版本f版本共用指令)

?

發(fā)送:

?

功能碼

延時(shí)量

0x0e

2字節(jié)

?

?

部分參數(shù)解釋:

?

延時(shí)量(1-10000)MS

?

要點(diǎn):等待延時(shí)是指等待所設(shè)延時(shí)量后才執(zhí)行后面的指令。

?

?

寫輸出口狀態(tài)(e版本f版本共用指令)

發(fā)送:

?

功能碼

輸出端口號(hào)

輸出狀態(tài)

0x03

1字節(jié)

1字節(jié)

?

?

部分參數(shù)解釋:

?

輸出端口號(hào)?? (0-6)??? Y0-Y6

輸出狀態(tài)???? (0,1)?? ?0:輸出低電平?? 1:輸出高電平

?

?

單軸運(yùn)行(e版本專用指令)

?

發(fā)送:

功能碼

軸號(hào)

運(yùn)動(dòng)方式

脈沖數(shù)量

0x02

1字節(jié)

1字節(jié)

4字節(jié)

?

?

部分參數(shù)解釋:

?

軸號(hào)(1,2,3,4)??? 獨(dú)立軸運(yùn)動(dòng)的軸號(hào)

脈沖數(shù)量 (-268435455~+268435455)輸出的脈沖數(shù) >0:正方向移動(dòng)? ?<0:負(fù)方向移動(dòng)

運(yùn)動(dòng)方式(0,1)?? 0:絕對(duì)位移? 1:相對(duì)位移??

?

?

等待軸停止(e版本專用指令)

發(fā)送:

?

功能碼

軸號(hào)

0x0f

1字節(jié)

?

?

部分參數(shù)解釋:

?

軸號(hào)(1,2,3,4)?? 1,2,3,4:獨(dú)立軸1-4軸? ??

?

要點(diǎn):等待軸停止是指在對(duì)應(yīng)軸停止之前一直等待,直到軸停止后才執(zhí)行后面的指令。獨(dú)立軸不會(huì)自動(dòng)等待軸運(yùn)行完成后才執(zhí)行下一條指令。插補(bǔ)軸會(huì)自動(dòng)等待軸運(yùn)行完成后才執(zhí)行下一條指令。

電路連接

?

芯片引腳輸出最大電流15Ma,輸入灌電流最大25Ma。如多芯片組網(wǎng),各芯片的SCK,SO,SI引腳并聯(lián),CS腳獨(dú)立受單片機(jī)控制。單片機(jī)SPI數(shù)據(jù)輸入腳接芯片SO腳,需內(nèi)部或外部上拉。單片機(jī)SPI數(shù)據(jù)輸出腳接芯片SI腳。芯片,單片機(jī),差分輸出連接參考圖:

?

運(yùn)動(dòng)控制編程參考

通過51單片機(jī)控制運(yùn)動(dòng)控制芯片的SPI通信程序示例。

(來自產(chǎn)品官網(wǎng):http://www.lf-control.com

?

#include

#include

//MCU: stc8f2k08s2??????

sfr P0M1 = 0x93;

sfr P0M0 = 0x94;

sfr P1M1 = 0x91;

sfr P1M0 = 0x92;

sfr P2M1 = 0x95;

sfr P2M0 = 0x96;

sfr P3M1 = 0xb1;

sfr P3M0 = 0xb2;

sfr P4M1 = 0xb3;

sfr P4M0 = 0xb4;

sfr P5M1 = 0xC9;

sfr P5M0 = 0xCA;

sfr P6M1 = 0xCB;

sfr P6M0 = 0xCC;

sfr P7M1 = 0xE1;

sfr P7M0 = 0xE2;

sfr P5 = 0xC8;

sfr???? SPSTAT????? =?? 0xcd;

sfr???? SPCTL?????? =?? 0xce;

sfr???? SPDAT?????? =?? 0xcf;

sfr???? IE2???????? =?? 0xaf;

sfr???? AUXR??????? =?? 0x8e;

sfr???? T2H???????? =?? 0xd6;

sfr???? T2L???????? =?? 0xd7;

sfr???? P_SW2?????? =?? 0xba;

?

?

?

?

#define CKSEL?????????? (*(unsigned char volatile xdata *)0xfe00)

#define CKDIV?????????? (*(unsigned char volatile xdata *)0xfe01)

#define IRC24MCR??????? (*(unsigned char volatile xdata *)0xfe02)

#define XOSCCR????????? (*(unsigned char volatile xdata *)0xfe03)

#define IRC32KCR??????? (*(unsigned char volatile xdata *)0xfe04)

?

?

//#define FOSC??????????? 16000000UL????????? //使用外部16M晶振

?#define FOSC??????????? 24000000UL?????????? //使用內(nèi)部24M晶振

#define BRT???????????? (65536 - FOSC / 115200 / 4)???? ?? //定義115200波特率

?

sbit b2??? =?? P1^1;

sbit b1??? =?? P5^5;

sbit led?? =?? P3^5;

?

sbit cs3?? ?= P3^3;

sbit cs2?? ?= P3^2;

sbit cs1?? ?= P1^2;

sbit sck = P1^5;

sbit in??? ?= P1^4;

sbit out = P1^3;

?#define SPI3_CSHIGH cs3=1 // CS3

#define SPI3_CSLOW ? cs3=0

?

?#define SPI2_CSHIGH cs2=1 // CS2

#define SPI2_CSLOW ? cs2=0

?

?#define SPI1_CSHIGH cs1=1 // CS1

#define SPI1_CSLOW ? cs1=0

?

#define SPI_SCKHIGH sck=1 //SCK

#define SPI_SCKLOW sck=0

#define SPI_OUTHIGH out=1

#define SPI_OUTLOW? out=0//MOSI

#define SPI_IN in//MISO

?

unsigned char inbuf[50];??????

unsigned char b1_state=0;

?

?void initial()

{

?P1M1 =??? ? 0;

?P1M0 =??? 0x2c;? ? ? ??// 引腳模擬通信時(shí),MOSI,SCK, CS??? 設(shè)為推挽輸出

?

?SPI1_CSHIGH;???? ?//CS不使用時(shí)設(shè)為高

?SPI2_CSHIGH;

?SPI3_CSHIGH;

?SPI_SCKLOW;//SCK空閑狀態(tài)一定要為低電平。

?

?

?//SPCTL = 0xd0;?????????????????????????????? //使能SPI主機(jī)模式

?//SPSTAT = 0xc0;????????????????????????????? //清中斷標(biāo)志

??? ?????????????????

}

?

void init_uart()

{

? ????

?? SCON = 0x50;

??? T2L = BRT;

??? T2H = BRT >> 8;

??? AUXR = 0x15;

??

}

?

?

?

/*

串口發(fā)送一個(gè)字節(jié)。

*/

?void USART_Txbyte(unsigned char i)

{

??? SBUF?? =?? i;

??? while(TI ==0);

??? TI???? =?? 0;?

}

?

?

/*

串口發(fā)送一串?dāng)?shù)據(jù)。

*/

void USRAT_transmit(unsigned char *fdata,unsigned char len)

{

?? unsigned char i;????????????????????????????????????

?????? ?

?? for(i=0;i

?? {

????? USART_Txbyte(fdata[i]);?????

?? }

??

}??

?

?

?

?void delay_nus(unsigned long n)

{

?????? unsigned long j;

?????? while(n--)

?

?????? {

????????? ????j=1;?? ?

??????????? while(j--);

?????? }

}

?

//延時(shí)n ms

?

void delay_nms(unsigned long n)

?

{

?????? while(n--)

????????? delay_nus(1000);????? ?

?

}

?

?

?

/*

函數(shù)名:?? SPI_SendData

功能:軟件模擬SPI通訊發(fā)送并接收一個(gè)8位字節(jié)數(shù)據(jù)。

如需使用硬件SPI,單片機(jī)作為主機(jī),運(yùn)動(dòng)控制芯片為從機(jī)。CPHA=0,CPOL=0,高位在前,SPI數(shù)據(jù)寬度為8位。

空閑狀態(tài)下單片機(jī)SCK引腳必須為低電平。每一條指令開始發(fā)送前將CS引腳置低,整條指令發(fā)送完成后必須將CS置高。

每條指令間需有時(shí)間間隔,推薦延時(shí)1MS以上。

?

*/

?

unsigned char SPI_SendData(unsigned char outdata)

{

?

unsigned char RecevieData=0,i;

SPI_SCKLOW;

//? _nop_(); _nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

??????

for(i=0;i<8;i++)

{

SPI_SCKLOW;

_nop_(); _nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();???

if(outdata&0x80)

?? {

?? SPI_OUTHIGH;

??? }

else

?? {

? SPI_OUTLOW;

?? }

?outdata<<=1;

??? ?

?_nop_(); _nop_(); _nop_();_nop_();??? _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

?SPI_SCKHIGH; //

?

? RecevieData <<= 1;

?

?if(SPI_IN)

?? {

??? RecevieData |= 1;

?? }

???

?_nop_(); _nop_(); _nop_();_nop_();??? _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

? SPI_SCKLOW;

}

?

return RecevieData;

?

}

?

?

/*

unsigned char SPI_SendData(unsigned char outdata)

{

?

unsigned char RecevieData=0,i;

?

SPDAT =? outdata;????????? ?????????????????//發(fā)送數(shù)據(jù)

? while (!(SPSTAT & 0x80));?????????????? //查詢完成標(biāo)志

??? SPSTAT = 0xc0;????????????????????????? //清中斷標(biāo)志

return SPDAT;

?

}

?*/

?

?

?

/*

函數(shù)名:? enabled_cs

功能:SPI運(yùn)動(dòng)控制模塊使能對(duì)應(yīng)芯片模塊的CS腳

參數(shù):

cardno 卡號(hào)

用單片機(jī)不同引腳去控制不同芯片的CS腳,以便多個(gè)芯片模塊關(guān)聯(lián)使用。

*/

void enabled_cs(unsigned char cardno)

{

if(cardno==1)

{

SPI1_CSLOW;

}

?if(cardno==2)

{

SPI2_CSLOW;

}

?

if(cardno==3)

{

SPI3_CSLOW;

}

?

}

?

/*

函數(shù)名:? disabled_cs

功能:SPI運(yùn)動(dòng)控制模塊禁止對(duì)應(yīng)芯片模塊的CS腳

參數(shù):

cardno 卡號(hào)

用單片機(jī)不同引腳去控制不同芯片的CS腳,以便多個(gè)芯片關(guān)聯(lián)使用。

*/

void disabled_cs(unsigned char cardno)

{

?

if(cardno==1)

{

SPI1_CSHIGH;

}

?if(cardno==2)

{

SPI2_CSHIGH;

}

?

if(cardno==3)

{

SPI3_CSHIGH;

}

???

}

?

?

?

?

/*

函數(shù)名:? set_speed

功能:設(shè)置軸速度

參數(shù):

cardno 卡號(hào)

?axis? 軸號(hào)(1,2,3,4)

acc??????? 加減速: 值(Hz/s2)

speed????? 運(yùn)行頻率為:值(Hz)

?

?

*/

?

void set_speed(unsigned char cardno ,unsigned char axis ,unsigned long acc ,unsigned long speed )

{

unsigned char OutByte[25];

?

OutByte[0] = 1;

OutByte[1] = 0;

OutByte[2] = axis;

OutByte[3] = acc >>24;

OutByte[4] = acc >>16;

OutByte[5] = acc >>8;

OutByte[6] = acc ;

OutByte[7] = speed >>24;

OutByte[8] = speed >>16;

OutByte[9] = speed >>8;

OutByte[10] = speed ;

???

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);

SPI_SendData(OutByte[7]);

SPI_SendData(OutByte[8]);

SPI_SendData(OutByte[9]);

SPI_SendData(OutByte[10]);?

disabled_cs(cardno);????

???

delay_nms(1);

}

?

?

?

?

?

/*

函數(shù)名:??? set_command_pos

功能: 設(shè)置軸邏輯位置

?

參數(shù):

cardno 卡號(hào)

axis?? 軸號(hào)(1,2,3,4)

pulse ?位置脈沖數(shù),范圍(-268435455~+268435455)

?

*/

void set_command_pos(unsigned char cardno ,unsigned char axis, long value )

{

unsigned char OutByte[25];

?

OutByte[0] = 0x12 ;

OutByte[1] = 0 ;

OutByte[2] = axis ;

OutByte[3] = value >>24;

OutByte[4] = value >>16;

OutByte[5] = value >>8;

OutByte[6] = value ;

???

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);??

disabled_cs(cardno);????

??????

???

?delay_nms(1);

}

?

?

?

/*

函數(shù)名: sudden_stop

功能: 軸立即停止

參數(shù):

cardno 卡號(hào)

axis?? 停止的軸號(hào)(1,2,3,4)? ? ?

mode? 0:急停并清空后面緩存的指令? 2:急停不清后面緩存的指令

*/

void sudden_stop(unsigned char cardno ,unsigned char axis ,unsigned char mode)

{

unsigned char OutByte[25];

?

OutByte[0] = 0x17 ;

OutByte[1] = axis ;

OutByte[2] = mode;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

disabled_cs(cardno);

?

delay_nms(1);????

}

?

?

?

?

?/*

函數(shù)名: set_special

功能:設(shè)置特別功能

參數(shù):

cardno 卡號(hào)

value?

??????

?????? 0xfc?? ? 緩存插補(bǔ)運(yùn)動(dòng)暫停

?????? 0xfd?? 取消緩存插補(bǔ)暫停

??? ?????

*/

void set_special(unsigned char cardno,unsigned char value)

{

unsigned char OutByte[25];

?

OutByte[0] = 0xFA ;

OutByte[1] = 0;

OutByte[2] = value;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

disabled_cs(cardno);

delay_nms(1);????

???

}

?

?

?/*

函數(shù)名: get_inp_state

功能: 獲取軸狀態(tài),緩存剩余量,各軸邏輯位置。

?

參數(shù):

cardno 卡號(hào)

amount ?獲取字節(jié)數(shù)量。?? 設(shè)為20將取全部數(shù)據(jù)。

inbuf[]?? 讀取的數(shù)據(jù)存放的數(shù)組

*/

void? get_inp_state( unsigned char cardno, unsigned char amount,unsigned char inbuf[])

{??

unsigned char OutByte[25];

?

char i; ??

enabled_cs(cardno);

inbuf[0]=SPI_SendData(0x04);

for(i=1;i

{??

inbuf[i]=SPI_SendData(0);

?

}

disabled_cs(cardno);

delay_nms(1);

???

?

}

?

?

/*

函數(shù)名:??? ?go_home

功能:回原點(diǎn),回到原點(diǎn)開關(guān)會(huì)自動(dòng)減速停止,隨后離開原點(diǎn)開關(guān)自動(dòng)急停

參數(shù):

cardno ??? 卡號(hào)

no?? 軸號(hào)

speed1????? 進(jìn)入原點(diǎn)速度,運(yùn)行頻率為:值(Hz)

speed2????? 離開原點(diǎn)速度,運(yùn)行頻率為:值(Hz)

*/

?

void go_home(unsigned char cardno,unsigned char no , long speed1 ,long speed2 )

{

unsigned char OutByte[25];

OutByte[0] = 0x1a;

OutByte[1] = 0;

OutByte[2] = no;

OutByte[3] = speed1>>24;

OutByte[4] = speed1 >>16;

OutByte[5] = speed1>> 8;

OutByte[6] = speed1;

OutByte[7] = speed2 >>24;

OutByte[8] = speed2 >>16;

OutByte[9] = speed2 >>8;

OutByte[10] = speed2 ;

?

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);

SPI_SendData(OutByte[7]);

SPI_SendData(OutByte[8]);

SPI_SendData(OutByte[9]);

SPI_SendData(OutByte[10]);

?

disabled_cs(cardno);

???

delay_nms(1);????

?

?

}

?

?

?

?

/*

函數(shù)名:??? ?inp_move4

功能:四軸直線插補(bǔ)

參數(shù):

cardno ??? 卡號(hào)

no1?? X軸軸號(hào)

no2?? Y軸軸號(hào)

no3?? Z軸軸號(hào)

no4?? E軸軸號(hào)

pulse1,pulse2,pulse3,pulse4??????????? X-Y-Z-E軸移動(dòng)的距離,范圍(-8388608~+8388607)

mode? 0:絕對(duì)位移? 1:相對(duì)位移?

*/

?

void inp_move4(unsigned char cardno,unsigned char no1 ,unsigned char no2 ,unsigned char no3 ,unsigned char no4, long pulse1? ,long pulse2 ,long pulse3 ,long pulse4 ,unsigned char mode )

{

unsigned char OutByte[25];

OutByte[0] = 0xa;

OutByte[1] = no1;

OutByte[2] = no2;

OutByte[3] = no3;

OutByte[4] = no4;

OutByte[5] = pulse1>>24;

OutByte[6] = pulse1 >>16;

OutByte[7] = pulse1>> 8;

OutByte[8] = pulse1;

OutByte[9] = pulse2 >>24;

OutByte[10] = pulse2 >>16;

OutByte[11] = pulse2 >>8;

OutByte[12] = pulse2 ;

? OutByte[13] = pulse3 >>24;

OutByte[14] = pulse3 >>16;

OutByte[15] = pulse3 >>8;

OutByte[16] = pulse3 ;

?? OutByte[17] = pulse4 >>24;

OutByte[18] = pulse4 >>16;

OutByte[19] = pulse4 >>8;

OutByte[20] = pulse4 ;

OutByte[21] = 0 ;

OutByte[22] = mode;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);

SPI_SendData(OutByte[7]);

SPI_SendData(OutByte[8]);

SPI_SendData(OutByte[9]);

SPI_SendData(OutByte[10]);

SPI_SendData(OutByte[11]);

SPI_SendData(OutByte[12]);

SPI_SendData(OutByte[13]);

SPI_SendData(OutByte[14]);

SPI_SendData(OutByte[15]);

SPI_SendData(OutByte[16]);

SPI_SendData(OutByte[17]);

SPI_SendData(OutByte[18]);

SPI_SendData(OutByte[19]);

SPI_SendData(OutByte[20]);

SPI_SendData(OutByte[21]);

SPI_SendData(OutByte[22]);

disabled_cs(cardno);

???

delay_nms(1);????

?

?

}

?

?

?

/*

函數(shù)名: inp_arc

功能:二軸圓弧插補(bǔ)

參數(shù):

cardno 卡號(hào)

no1??? 參與插補(bǔ)X軸的軸號(hào)

no2??? 參與插補(bǔ)Y軸的軸號(hào)

x,y??? 圓弧插補(bǔ)的終點(diǎn)位置(相對(duì)于起點(diǎn)),范圍(-8388608~+8388607)???????????

i,j??? 圓弧插補(bǔ)的圓心點(diǎn)位置(相對(duì)于起點(diǎn)),范圍(-8388608~+8388607)

mode1?????? 0:逆時(shí)針插補(bǔ)?? 1:順時(shí)針插補(bǔ)

mode2? 0:絕對(duì)位移? 1:相對(duì)位移

*/

void inp_arc(unsigned char cardno ,unsigned char no1,unsigned char no2, long x , long y, long i, long j,unsigned char mode1,unsigned char mode2 )

{

unsigned char OutByte[25];

OutByte[0] = 0xc;

OutByte[1] = no1;

OutByte[2] = no2;

OutByte[3] = x >>24;

OutByte[4] = x >>16;

OutByte[5] = x >>8;

OutByte[6] = x ;

OutByte[7] = y >>24;

OutByte[8] = y >>16;

OutByte[9] = y >>8;

OutByte[10] = y ;

OutByte[11] = i >>24;

OutByte[12] = i >>16;

OutByte[13] = i >>8;

OutByte[14] = i ;

OutByte[15] = j >>24;

OutByte[16] = j >>16;

OutByte[17] = j >>8;

OutByte[18] = j ;

OutByte[19] = mode1;

OutByte[20] = mode2;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);

SPI_SendData(OutByte[7]);

SPI_SendData(OutByte[8]);

SPI_SendData(OutByte[9]);

SPI_SendData(OutByte[10]);

SPI_SendData(OutByte[11]);

SPI_SendData(OutByte[12]);

SPI_SendData(OutByte[13]);

SPI_SendData(OutByte[14]);

SPI_SendData(OutByte[15]);

SPI_SendData(OutByte[16]);

SPI_SendData(OutByte[17]);

SPI_SendData(OutByte[18]);

SPI_SendData(OutByte[19]);

SPI_SendData(OutByte[20]);

disabled_cs(cardno);

???

delay_nms(100);?????

}

?

/*

函數(shù)名: inp_helical

功能:圓弧螺旋插補(bǔ)

參數(shù):

cardno 卡號(hào)

no1??? 參與插補(bǔ)X軸的軸號(hào)

no2??? 參與插補(bǔ)Y軸的軸號(hào)

no3??? 參與插補(bǔ)螺旋軸的軸號(hào)

x,y??? 圓弧插補(bǔ)的終點(diǎn)位置(相對(duì)于起點(diǎn)),范圍(-8388608~+8388607)

z?? ?? 參與插補(bǔ)螺旋軸的位置(相對(duì)于起點(diǎn))???????

i,j??? 圓弧插補(bǔ)的圓心點(diǎn)位置(相對(duì)于起點(diǎn)),范圍(-8388608~+8388607)

mode1????? 0:逆時(shí)針插補(bǔ)?? 1:順時(shí)針插補(bǔ)

mode2???? 0:絕對(duì)位移? 1:相對(duì)位移??

*/

void inp_helical(unsigned char cardno ,unsigned char no1,unsigned char no2,unsigned char no3,long x , long y,long z, long i, long j,unsigned char mode1,unsigned char mode2 )

{

unsigned char OutByte[30];

OutByte[0] = 0xd;

OutByte[1] = no1;

OutByte[2] = no2;

OutByte[3] = no3;

OutByte[4] = x >>24;

OutByte[5] = x >>16;

OutByte[6] = x >>8;

OutByte[7] = x ;

OutByte[8] = y >>24;

OutByte[9] = y >>16;

OutByte[10] = y >>8;

OutByte[11] = y ;

OutByte[12] = z >>24;

OutByte[13] = z >>16;

OutByte[14] = z >>8;

OutByte[15] = z ;

OutByte[16] = i >>24;

OutByte[17] = i >>16;

OutByte[18] = i >>8;

OutByte[19] = i ;

OutByte[20] = j >>24;

OutByte[21] = j >>16;

OutByte[22] = j >>8;

OutByte[23] = j ;

OutByte[24] = mode1;

OutByte[25] = mode2;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);

SPI_SendData(OutByte[7]);

SPI_SendData(OutByte[8]);

SPI_SendData(OutByte[9]);

SPI_SendData(OutByte[10]);

SPI_SendData(OutByte[11]);

SPI_SendData(OutByte[12]);

SPI_SendData(OutByte[13]);

SPI_SendData(OutByte[14]);

SPI_SendData(OutByte[15]);

SPI_SendData(OutByte[16]);

SPI_SendData(OutByte[17]);

SPI_SendData(OutByte[18]);

SPI_SendData(OutByte[19]);

?SPI_SendData(OutByte[20]);

SPI_SendData(OutByte[21]);

SPI_SendData(OutByte[22]);

SPI_SendData(OutByte[23]);

SPI_SendData(OutByte[24]);

SPI_SendData(OutByte[25]);

disabled_cs(cardno);

???

delay_nms(1);????

}

?

?

?

?

?

/*

函數(shù)名: write_bit

功能:寫輸出口狀態(tài)

參數(shù):

cardno 卡號(hào)

number? 端口號(hào)(0-6)? Y0-Y6

value?? 狀態(tài)(0,1) 0 輸出低電平?? 1 輸出高電平

?

*/

void write_bit(unsigned char cardno , unsigned char number, unsigned char value)

{

unsigned char OutByte[25];

OutByte[0] = 0x03 ;

OutByte[1] = number;

OutByte[2] = value;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

disabled_cs(cardno);

?

delay_nms(1);

?

}

?

?

/*

函數(shù)名: wait_delay

功能:等待延時(shí)數(shù)

參數(shù):

cardno 卡號(hào)

value? ??? 延時(shí)量(1-10000)MS

?

*/

void wait_delay(unsigned char cardno ,unsigned int value)

{

unsigned char OutByte[25];

?

OutByte[0] = 0x0e ;

OutByte[1] = value>>8;

OutByte[2] = value;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

disabled_cs(cardno);

?

delay_nms(1);

?

}

?

?

?

?

?

?/*

函數(shù)名:??? ?pmove

功能: e版本單軸運(yùn)行

參數(shù):

cardno ??? 卡號(hào)

axis?? 軸號(hào)

mode? 0:絕對(duì)位移? 1:相對(duì)位移

pulse1??????????? X軸移動(dòng)的距離,范圍(-8388608~+8388607)

?

*/

void pmove(unsigned char cardno,unsigned char axis,unsigned char mode, long pulse1 )

{

unsigned char OutByte[25];

OutByte[0] = 0x2;

OutByte[1] = axis ;?

OutByte[2] = mode;

OutByte[3] = pulse1>>24;

OutByte[4] = pulse1 >>16;

OutByte[5] = pulse1>>8;

OutByte[6] = pulse1;

?

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

SPI_SendData(OutByte[2]);

SPI_SendData(OutByte[3]);

SPI_SendData(OutByte[4]);

SPI_SendData(OutByte[5]);

SPI_SendData(OutByte[6]);??

disabled_cs(cardno);

???

delay_nms(1);????

?

?

}

?

?

/*

函數(shù)名: wait_stop

功能: e版本等待軸停止

參數(shù):

cardno 卡號(hào)

axis?? 停止的軸號(hào)(1,2,3,4)? ? ??

mode? 0:急停并清空后面緩存的指令? 2:急停不清后面緩存的指令

*/

void wait_stop(unsigned char cardno ,unsigned char axis)

{

unsigned char OutByte[25];

?

OutByte[0] = 0xf ;

OutByte[1] = axis ;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

disabled_cs(cardno);

?

delay_nms(1);????

}

?

?

?

?

?

void main(void)?

{

?? initial();

?? init_uart();

?? // ES = 1;

?? // EA = 1;

?

?? // P_SW2 = 0x80;

?? // XOSCCR = 0xc0;????????????????????????????? //啟動(dòng)外部晶振

?? // while (!(XOSCCR & 1));????????????????????? //等待時(shí)鐘穩(wěn)定

?? // CKDIV = 0x00;?????????????????????????????? //時(shí)鐘不分頻

?? // CKSEL = 0x01;????????? ?????????????????????//選擇外部晶振

?? // P_SW2 = 0x00;

?

?

??? ?led=0;

?delay_nms(100)?? ;

?

?

? ? ??

???

?

?

? ? ?/*下面的指令為1,2軸回原點(diǎn)

?

?

??? ? go_home(1,1,30000,5000 ) ;??? // ?1軸回原點(diǎn)

??? ? go_home(1,2,30000,5000 ) ;??? //? ?2軸回原點(diǎn)

??? ? do

??? ?{

??? ?get_inp_state( 1, 4,inbuf); ?? ??//只需讀出4個(gè)字節(jié)來判斷軸狀態(tài)

??? ?}

??? ? while(inbuf[3]);?? ?? // 等待緩存數(shù)量為0 ,如果多條運(yùn)動(dòng)指令在緩存里 ,可以讀取緩存數(shù)量來判斷指令有沒執(zhí)行完成。

??? ?//while(inbuf[1]);? ?? // 等待軸停止 ,如果只有一條除圓弧外的運(yùn)動(dòng)指令,可以讀取軸狀態(tài)來判斷有沒執(zhí)行完。

??? set_command_pos(1 ,1,0); ?? //設(shè)1軸坐標(biāo)?? ?

??? set_command_pos(1 ,2,0); ?? //設(shè)2軸坐標(biāo)

?????? ?

??? ? */ ? ?

?

?? while(1)

??? ?{

??? ?

??? ?

??? ?

??? ?

??? ?if(!b1)?? ? //按下按鍵

??? ??? {

?????? ?delay_nms(10);?? ?

?????? if(!b1)

??? ??? {

?????? ??

?

?????? ?? /*e型測(cè)試指令*/

??? ???? // set_speed(1 ,1,200000,50000);???? ?//設(shè)置1軸運(yùn)行速度50K,加速度200k???

?????? ?// set_speed(1 ,2,200000,50000);????? ?//設(shè)置1軸運(yùn)行速度50K,加速度200k

?????? ?// set_speed(1 ,3,40000,10000);?????? ?//設(shè)置1軸運(yùn)行速度10K,加速度40k

?????? ? //write_bit(1 , 6, 0);?????????????? ?// Y6輸出低

?????? ?// pmove(1,1,1, 1000);??????????? ? //1軸相對(duì)運(yùn)行速1000個(gè)脈沖

?????? ?// pmove(1,2,1, 1000);??????????? ? // 2軸相對(duì)運(yùn)行速1000個(gè)脈沖

?????? ? //wait_stop(1 ,1);?????????????? ? //等待1軸停止

?????? ? //wait_stop(1 ,2);?????????????? ? //等待2軸停止

??? ???? // wait_delay(1 ,500);?????????????? ?// 延時(shí)500MS

?????? ?// pmove(1,3,1, 1000);??????????? ? //3軸相對(duì)運(yùn)行速1000個(gè)脈沖

??? ????? //write_bit(1 , 6, 1);?????????? ??? // Y6輸出高

?

?

??? ?? /*f型測(cè)試指令*/

?????? //? write_bit(1 , 6, 0);

?????? //? set_speed(1 ,1,200000,50000);?? //設(shè)置運(yùn)行速度50K,加速度200h????

?????? //? ?wait_delay(1 ,500);???? ? // 延時(shí)500MS

?????? ? //?? write_bit(1 , 2, 0);

??? //? inp_move4(1,1,0,0,0,80000 ,0,0 ,0 ,1);? //? 1,2軸插補(bǔ)

?????????? //? set_speed(1,1 ,800000,25000);?? //設(shè)置運(yùn)行速度25K,加速度800K?

?????? ?? //inp_move4(1,1,2,0,0,20000 ,10000,0 ,0 ,1);? //? 1,2軸插補(bǔ)

??? //? ?inp_arc(1 ,1,2, -20000, 20000, -20000, 0,0,1) ; //? 1,2軸圓弧插補(bǔ)

?????????? //set_speed(1 ,1,800000,25000);?? //設(shè)置運(yùn)行速度250K,加速度800K???

?????? ?// inp_arc(1 ,1,2, -20000, 20000, -20000, 0,0,1) ;

?????? //? ?wait_delay(1 ,500);

??? ? //?????? write_bit(1 , 6, 1);

?????? ? //? wait_delay(1 ,500);

?????? //? write_bit(1 , 6, 0);

??????????

??? /*下面的指令會(huì)直接發(fā)到緩存區(qū)自動(dòng)排隊(duì)運(yùn)行*/

??? //? write_bit(1 , 6, 0);???? ?? // Y6輸出低

??? ? //?? set_speed(1 ,1,40000,25000);

??? // inp_move4(1,1,2,3,4,320000 ,32000,32000 ,32000 ,1);? //? ?4軸直線插補(bǔ)

??? ? //wait_delay(1 ,2000);??????? ? //模塊內(nèi)部指令間延時(shí)3S

??? ? //inp_move4(1,1,2,0,0,32000 ,32000,0 ,0 ,1);? //?? ?1,2軸直線插補(bǔ)? ?

??? ? // wait_delay(1 ,2000);

??? ?// inp_move4(1,2,0,0,0,32000 ,0,0 ,0 ,1);? //?? ?2軸單獨(dú)運(yùn)行?

?? //inp_arc(1 ,1,2, -20000, 20000, -20000, 0,0,1) ;??? ?// ?2軸圓弧插補(bǔ),終點(diǎn)相對(duì)起點(diǎn)坐標(biāo)(-20000,20000),圓心相對(duì)起點(diǎn)坐標(biāo)(-20000,0),逆時(shí)針方向,畫出1/4圓弧。

??? ?// write_bit(1 , 6, 1); ??????????????????? ???// Y6輸出高 ,判斷指令段有沒執(zhí)行完成也可以在指令段后面加一條端口輸出指令,然后用單片機(jī)來讀引腳來判斷。

?

??? ?

?

???

?

?????????? while(!b1);

?????? } ? ?

?????? ??

??? ??? }

??? ?

??? ?

??? ???

?

?

??? ? if(!b2)? ??? //按下按鍵

??? ??? {

?????? ?delay_nms(10)??? ?;

?????? ?if(!b2)

??? ????? {

?

?????? ?sudden_stop(1,1,0); ?????????? ?// ?? f型立即停止所有插補(bǔ)軸 ,并清緩存?? 。 e型立即停止1軸 ,并清緩存 。

???

?

??? ?? ?while(!b2);

?

?

??? ??? ?? }

??? ? }

?

?

??? ?

??? ??? get_inp_state( 1, 20,inbuf); ? ??//讀出20個(gè)字節(jié)數(shù)據(jù)放入數(shù)組?

?????? // USRAT_transmit(inbuf,20);??? ?? //? 串口將數(shù)組數(shù)據(jù)發(fā)送出去查看

??? ??????????? ? //// USART_Txbyte(inbuf[3]);

?

?????? if(inbuf[3]==0)????????? ?//inbuf[1]數(shù)據(jù)為0表示所有軸都停

?????????? ? led=1;?? ???

?????? ? else

?????????? ? led=0; ???? ?// 指示LED點(diǎn)亮

?

?

?

??? ?}? ??

???

}

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

( 發(fā)表人:steve )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?