衡阳派盒市场营销有限公司

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

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

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

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

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

?

?

? ?概述

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

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

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

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

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

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

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)動性能

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

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

通信速度

SPI:10Mbps

?

?

?

引腳排列

?

引腳號

引腳名稱

引腳功能說明

1

VDD

電源正極+3.3V

2

Y4

4號輸出口

3

Y5

5號輸出口

4

Y6

6號輸出口

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號輸出口

22

Y1

1號輸出口

23

VSS

電源負(fù)極

24

VDD

電源正極+3.3V

25

CS

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

26

SCK

SPI通信時鐘腳

27

SO

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

28

SI

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

29

P1

第1軸脈沖信號

30

TXD

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

31

RXD

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

32

D1

第1軸方向信號

33

Y2

2號輸出口

34

Y3

3號輸出口

35

VSS

電源負(fù)極

36

VDD

電源正極+3.3V

37

SIGN

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

38

P2

第2軸脈沖信號

39

D2

第2軸方向信號

40

P3

第3軸脈沖信號

41

D3

第3軸方向信號

42

NC

空引腳

43

NC

空引腳

44

VSS

電源負(fù)極

45

P4

第4軸脈沖信號

46

D4

第4軸方向信號

47

VSS

電源負(fù)極

48

VDD

電源正極+3.3V

?

SPI通訊協(xié)議

?

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

每條指令間隔1MS以上

?

SPI時序圖如下:

?

SPI通訊指令

?

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

?

發(fā)送:

功能碼

補(bǔ)充0

軸號

加速度

運(yùn)行速度

0x01

0x00

1字節(jié)

4字節(jié)

4字節(jié)

?

部分參數(shù)解釋:

軸號(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版本軸號有效,速度為對應(yīng)軸的速度。f版本由于共用一個插補(bǔ)核心,軸號設(shè)為任意值都為所有軸速度,如需改變當(dāng)前運(yùn)動指令里的速度需在當(dāng)前指令前重設(shè)速度。加速度最大可設(shè)為運(yùn)行速度4倍。

?

?

?

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

?

發(fā)送:

?

功能碼

補(bǔ)充0

軸號

位置

0x12

0x00

1字節(jié)

4字節(jié)

?

部分參數(shù)解釋:

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

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

?

?

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

發(fā)送:

?

功能碼

軸號

模式

0x17

1字節(jié)

1字節(jié)

??? ??

部分參數(shù)解釋:

?

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

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

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

?

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

發(fā)送:

?

功能碼

數(shù)據(jù)0

0x04

最多19個字節(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é)省通訊時間,可只發(fā)送對應(yīng)字節(jié)的數(shù)據(jù)0。例如只需獲取各軸運(yùn)行狀態(tài),發(fā)送2個字節(jié)0便可。軸運(yùn)行狀態(tài)只是軸的瞬時狀態(tài),不能用來指示圓弧指令是否完成。可通過讀取緩存數(shù)量來判斷緩存區(qū)指令是否完成。一條圓弧指令會動態(tài)占用最多120條緩存空間。

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

?

發(fā)送:

?

功能碼

補(bǔ)充0

功能

0xfa

0x00

1字節(jié)

?

?

?

部分參數(shù)解釋:

?

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

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

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

?

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

發(fā)送:

?

功能碼

補(bǔ)充0

軸號

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

離開原點(diǎn)速度

0x1a

0x00

1字節(jié)

4字節(jié)

4字節(jié)

?

?

?

?

?

部分參數(shù)解釋:

?

軸號(1,2,3,4)

?

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

?

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

?

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

?

?

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

發(fā)送:

?

?

功能碼

X軸號

Y軸號

Z軸號

E軸號

X脈沖數(shù)

Y脈沖數(shù)

Z脈沖數(shù)

E脈沖數(shù)

補(bǔ)充0

運(yùn)動方式

0x0a

1字節(jié)

1字節(jié)

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

0x00

1字節(jié)

?

?

部分參數(shù)解釋:

X軸號(1,2,3,4)

Y軸號(1,2,3,4)

Z軸號(1,2,3,4)

E軸號(1,2,3,4)

?

X脈沖(-268435455~+268435455

Y脈沖(-268435455~+268435455

Z脈沖(-268435455~+268435455

E脈沖(-268435455~+268435455

?

運(yùn)動方式(0,1)?? 0:絕對位移? 1:相對位移?

?

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

?

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

發(fā)送:

?

功能碼

X軸號

Y軸號

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

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

圓心坐標(biāo)X

圓心坐標(biāo)Y

運(yùn)動方式1

運(yùn)動方式2

0x0c

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

4字節(jié)

1字節(jié)

1字節(jié)

?

?

?

?

部分參數(shù)解釋:

X軸號(1,2,3)

Y軸號(1,2,3)

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

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

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

運(yùn)動方式2?? ?????0:絕對位移? 1:相對位移?

?

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

?

?

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

發(fā)送:

?

功能碼

X軸號

Y軸號

Z軸號

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

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

脈沖數(shù)

圓心坐標(biāo)X

圓心坐標(biāo)Y

運(yùn)動方式1

運(yùn)動方式2

0x0d

1字節(jié)

1字節(jié)

1字節(jié)

4字節(jié)

4字節(jié)

字節(jié)

4字節(jié)

4字節(jié)

1字節(jié)

1字節(jié)

?

?

部分參數(shù)解釋:

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

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

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

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

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

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

運(yùn)動方式2? ???0:絕對位移? 1:相對位移?

?

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

?

發(fā)送:

?

功能碼

延時量

0x0e

2字節(jié)

?

?

部分參數(shù)解釋:

?

延時量(1-10000)MS

?

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

?

?

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

發(fā)送:

?

功能碼

輸出端口

輸出狀態(tài)

0x03

1字節(jié)

1字節(jié)

?

?

部分參數(shù)解釋:

?

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

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

?

?

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

?

發(fā)送:

功能碼

軸號

運(yùn)動方式

脈沖數(shù)量

0x02

1字節(jié)

1字節(jié)

4字節(jié)

?

?

部分參數(shù)解釋:

?

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

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

運(yùn)動方式(0,1)?? 0:絕對位移? 1:相對位移??

?

?

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

發(fā)送:

?

功能碼

軸號

0x0f

1字節(jié)

?

?

部分參數(shù)解釋:

?

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

?

要點(diǎn):等待軸停止是指在對應(yīng)軸停止之前一直等待,直到軸停止后才執(zhí)行后面的指令。獨(dú)立軸不會自動等待軸運(yùn)行完成后才執(zhí)行下一條指令。插補(bǔ)軸會自動等待軸運(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)動控制編程參考

通過51單片機(jī)控制運(yùn)動控制芯片的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;? ? ? ??// 引腳模擬通信時,MOSI,SCK, CS??? 設(shè)為推挽輸出

?

?SPI1_CSHIGH;???? ?//CS不使用時設(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ā)送一個字節(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--);

?????? }

}

?

//延時n ms

?

void delay_nms(unsigned long n)

?

{

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

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

?

}

?

?

?

/*

函數(shù)名:?? SPI_SendData

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

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

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

每條指令間需有時間間隔,推薦延時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)動控制模塊使能對應(yīng)芯片模塊的CS腳

參數(shù):

cardno 卡號

用單片機(jī)不同引腳去控制不同芯片的CS腳,以便多個芯片模塊關(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)動控制模塊禁止對應(yīng)芯片模塊的CS腳

參數(shù):

cardno 卡號

用單片機(jī)不同引腳去控制不同芯片的CS腳,以便多個芯片關(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 卡號

?axis? 軸號(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 卡號

axis?? 軸號(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 卡號

axis?? 停止的軸號(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 卡號

value?

??????

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

?????? 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 卡號

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)會自動減速停止,隨后離開原點(diǎn)開關(guān)自動急停

參數(shù):

cardno ??? 卡號

no?? 軸號

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 ??? 卡號

no1?? X軸軸號

no2?? Y軸軸號

no3?? Z軸軸號

no4?? E軸軸號

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

mode? 0:絕對位移? 1:相對位移?

*/

?

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 卡號

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

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

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

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

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

mode2? 0:絕對位移? 1:相對位移

*/

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 卡號

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

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

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

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

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

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

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

mode2???? 0:絕對位移? 1:相對位移??

*/

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 卡號

number? 端口號(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ù):

cardno 卡號

value? ??? 延時量(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 ??? 卡號

axis?? 軸號

mode? 0:絕對位移? 1:相對位移

pulse1??????????? X軸移動的距離,范圍(-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 卡號

axis?? 停止的軸號(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;????????????????????????????? //啟動外部晶振

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

?? // CKDIV = 0x00;?????????????????????????????? //時鐘不分頻

?? // 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個字節(jié)來判斷軸狀態(tài)

??? ?}

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

??? ?//while(inbuf[1]);? ?? // 等待軸停止 ,如果只有一條除圓弧外的運(yùn)動指令,可以讀取軸狀態(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型測試指令*/

??? ???? // 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軸相對運(yùn)行速1000個脈沖

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

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

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

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

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

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

?

?

??? ?? /*f型測試指令*/

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

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

?????? //? ?wait_delay(1 ,500);???? ? // 延時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);

??????????

??? /*下面的指令會直接發(fā)到緩存區(qū)自動排隊(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)部指令間延時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)相對起點(diǎn)坐標(biāo)(-20000,20000),圓心相對起點(diǎn)坐標(biāo)(-20000,0),逆時針方向,畫出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個字節(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%

不好我反對

(0) 0%

( 發(fā)表人:steve )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

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

      ?
      庄河市| 百家乐官网的路图片| 网上合法赌博网站| 网上棋牌游戏赚钱| 大发888娱乐城下载新澳博| 月华百家乐官网的玩法技巧和规则 | 广东百家乐扫描分析仪| 百家乐能赚大钱吗| 乐九百家乐现金网| 百家乐怎么才赢| 百家乐破解视频| 网上百家乐公式| 做生意的门的方向| 五莲县| 永嘉县| 邯郸县| 喜达百家乐官网现金网| 百家乐官网的赚钱原理| 百家乐官网为什么庄5| 澳门百家乐官网上下限| 百家乐官网长路投注法| 立即博百家乐官网现金网| 百家乐官网编单短信接收| 百家乐官网视频游戏视频| 娱乐城百家乐官网规则| 百家乐官网视频游戏注册| 网上百家乐官网赌场| 太阳城百家乐官网祖玛| 赌博百家乐官网的乐趣| 个人百家乐官网策略| 娱乐网百家乐官网补丁| 百家乐官网一般多大码| 百家乐官网赌场娱乐网规则 | 乐九国际| 丰城市| 聚宝盆百家乐官网游戏| 百家乐官网翻天粤qvod| 网上百家乐官网信誉| 百家乐官网路单| 大哥大百家乐官网的玩法技巧和规则 | 太阳城百家乐的分数|