?
?
当前位置:
PLC,电脑串口直接来运动控制
回复 | 人气 | 打印
mpc034 个人主页 给TA发消息 加TA为好友 发表于:2015-12-14 15:09:45 楼主

附件为PLC,电脑串口直接发指令多轴运动控制资料。

正在下载,请等待……
分享到: 关注收藏 邀请回答 回复 举报
mpc034 个人主页 给TA发消息 加TA为好友 发表于:2015-12-22 10:45:52 1楼
 

顶顶再看看。。。。。。。。。。。。。。。

  回复 引用 举报
焦老雕 个人主页 给TA发消息 加TA为好友 发表于:2015-12-24 10:57:05 2楼
 

                  学习一下,看看如何控制的

  回复 引用 举报
孤独学人 个人主页 给TA发消息 加TA为好友 发表于:2015-12-24 13:44:30 3楼
 

    引用楼上:  学习一下,看看如何控制的

  回复 引用 举报
argsrtg 个人主页 给TA发消息 加TA为好友 发表于:2015-12-24 16:52:21 4楼
 

PLC,电脑串口直接来运动控制        

  回复 引用 举报
huangerge 个人主页 给TA发消息 加TA为好友 发表于:2015-12-30 08:32:38 5楼
 

引用楼上:  学习一下,看看如何控制的

  回复 引用 举报
yinlijg053 个人主页 给TA发消息 加TA为好友 发表于:2016-01-03 13:29:08 6楼
 

学习学习。。。。。。。。。..

  回复 引用 举报
wx814675205 个人主页 给TA发消息 加TA为好友 发表于:2016-01-03 20:49:50 7楼
 

谢谢。。。。。。。。。。。。。。

  回复 引用 举报
gugu11 个人主页 给TA发消息 加TA为好友 发表于:2016-01-09 22:29:15 8楼
 

1114444444444444444444444444

  回复 引用 举报
残丶风 个人主页 给TA发消息 加TA为好友 发表于:2016-01-11 16:17:48 9楼
 


引用 taohui0828 的回复内容: ding domhdinhhidnkh


  回复 引用 举报
jacktank 个人主页 给TA发消息 加TA为好友 发表于:2016-01-15 17:31:27 10楼
 

学习一下,看看如何控制的

  回复 引用 举报
okingtran 个人主页 给TA发消息 加TA为好友 发表于:2016-01-16 23:06:24 11楼
 

PLC,电脑串口直接来运动控制    

  回复 引用 举报
焦老雕 个人主页 给TA发消息 加TA为好友 发表于:2016-01-16 23:37:28 12楼
 

                       学习一下,看看如何控制的

  回复 引用 举报
Arptor 个人主页 给TA发消息 加TA为好友 发表于:2016-01-19 19:44:25 13楼
 

看看如何控制的                       学习一下,看看如何控制的

  回复 引用 举报
个人主页 给TA发消息 加TA为好友 发表于:2016-01-19 23:24:29 14楼
 

PLC,电脑串口直接来运动控制  ,学习一下,看看如何控制的

  回复 引用 举报
电工好龙 个人主页 给TA发消息 加TA为好友 发表于:2016-01-20 08:46:15 15楼
 

见识一下,谢谢楼主分享

  回复 引用 举报
三佳科技 个人主页 给TA发消息 加TA为好友 发表于:2016-03-03 16:13:02 16楼
 

软硬结?#20064;。?#23545;这个感兴趣,电子专?#26723;?/p>

  回复 引用 举报
nedly 个人主页 给TA发消息 加TA为好友 发表于:2016-03-04 16:33:23 17楼
 

PLC,电脑串口直接来运动控制 回复了解一下

  回复 引用 举报
阿虎520 个人主页 给TA发消息 加TA为好友 发表于:2016-03-05 20:59:03 18楼
 

好好好好1111111111111111111111

  回复 引用 举报
txcc1111 个人主页 给TA发消息 加TA为好友 发表于:2016-03-09 11:24:39 19楼
 

又有意义有意义有意义有意义有意义有意义有意义

  回复 引用 举报
348374334@qq.com 个人主页 给TA发消息 加TA为好友 发表于:2016-03-10 20:00:16 20楼
 

多多谢谢分享分享,不会要积分吧

  回复 引用 举报
mpc034 个人主页 给TA发消息 加TA为好友 发表于:2016-05-06 09:21:24 21楼
 

看看顶下。。。。。。。。

  回复 引用 举报
gzz5132 个人主页 给TA发消息 加TA为好友 发表于:2016-05-06 09:35:55 22楼
 

见识一下,谢谢楼主分享

  回复 引用 举报
liujiseng 个人主页 给TA发消息 加TA为好友 发表于:2016-05-06 12:44:25 23楼
 

学习一下,看看如何控制的..........

  回复 引用 举报
杨小东2 个人主页 给TA发消息 加TA为好友 发表于:2016-05-08 20:39:23 24楼
 

伺服入门?#22363;蹋?#20282;服入门?#22363;蹋?/p>

  回复 引用 举报
电路板维修-德州 个人主页 给TA发消息 加TA为好友 发表于:2016-05-08 20:43:11 25楼
 

看?#35789;?#24590;么控制的,学习一下。

  回复 引用 举报
a641333914 个人主页 给TA发消息 加TA为好友 发表于:2016-05-11 23:12:18 26楼
 

PLC,电脑串口直接来运动控制    

  回复 引用 举报
alhg2012 个人主页 给TA发消息 加TA为好友 发表于:2016-08-12 19:39:50 27楼
 

谢谢楼主,下载学习学习

  回复 引用 举报
robrotbo 个人主页 给TA发消息 加TA为好友 发表于:2016-09-12 08:23:00 28楼
 

这个可下载,需要学习下

  回复 引用 举报
Sammine 个人主页 给TA发消息 加TA为好友 发表于:2016-11-19 14:25:33 29楼
 

学习下,谢谢楼主分享资料


  回复 引用 举报
fangdong305 个人主页 给TA发消息 加TA为好友 发表于:2016-11-23 13:40:37 30楼
 


引用 孤独学人 的回复内容:     引用楼上:  学习一下,看看如何控制的


  回复 引用 举报
991712758 个人主页 给TA发消息 加TA为好友 发表于:2016-11-23 13:55:45 31楼
 

 学习一下,看看如何控制的,多谢分享

  回复 引用 举报
Duke-Le 个人主页 给TA发消息 加TA为好友 发表于:2016-11-24 17:20:13 32楼
 

学习一下,看看如何控制的..........

  回复 引用 举报
一本如初 个人主页 给TA发消息 加TA为好友 发表于:2016-11-25 13:17:18 33楼
 

学习一下,看看如何控制的,多谢分享

  回复 引用 举报
jou 个人主页 给TA发消息 加TA为好友 发表于:2016-11-25 15:14:09 34楼
 

有趣的主题,下载来学习一下!

  回复 引用 举报
yuye1121 个人主页 给TA发消息 加TA为好友 发表于:2016-12-03 20:04:32 35楼
 

学习一下,看看如何控制的,多谢分享


  回复 引用 举报
谢谢你的爱1999 个人主页 给TA发消息 加TA为好友 发表于:2016-12-03 20:10:42 36楼
 

回复内容:

对: 焦老雕                   学习一下,看看如何控制的 内容的回复!

 

  回复 引用 举报
老树发新芽 个人主页 给TA发消息 加TA为好友 发表于:2016-12-03 20:30:14 37楼
 

看看如何控制的,学习一下..

  回复 引用 举报
F238985 个人主页 给TA发消息 加TA为好友 发表于:2016-12-04 15:34:24 38楼
 


引用 老树发新芽 的回复内容: 看看如何控制的,学习一下..


  回复 引用 举报
Yvoon82 个人主页 给TA发消息 加TA为好友 发表于:2016-12-07 14:27:20 39楼
 

学习下,看看如何控制。 好东西多分享

  回复 引用 举报
穷孩子 个人主页 给TA发消息 加TA为好友 发表于:2016-12-08 15:59:56 40楼
 

学习下,看看如何控制。 好东西多分享

  回复 引用 举报
山马牧羊 个人主页 给TA发消息 加TA为好友 发表于:2016-12-10 20:38:53 41楼
 

学习了,谢谢楼主分享

  回复 引用 举报
hzp0735 个人主页 给TA发消息 加TA为好友 发表于:2016-12-11 21:35:56 42楼
 

学习学习学习学习学习学习学习学习学习

  回复 引用 举报
晴空微澜 个人主页 给TA发消息 加TA为好友 发表于:2016-12-13 17:01:54 43楼
 

谢谢啦::::::::::::::

  回复 引用 举报
晴空微澜 个人主页 给TA发消息 加TA为好友 发表于:2016-12-13 17:02:55 44楼
 

怎么看不了呢呢呢》》》》》》》》》》》

  回复 引用 举报
linxiao0915 个人主页 给TA发消息 加TA为好友 发表于:2016-12-29 16:17:24 45楼
 

你只有回复后才能看见内同9

  回复 引用 举报
高191092396 个人主页 给TA发消息 加TA为好友 发表于:2017-03-06 14:49:17 46楼
 

学习一下,看看如何控制的

  回复 引用 举报
lc12356kk 个人主页 给TA发消息 加TA为好友 发表于:2017-03-12 19:25:25 47楼
 

么看不了呢呢呢》》》》》》》》》》》

  回复 引用 举报
qiaojingcai 个人主页 给TA发消息 加TA为好友 发表于:2017-03-27 14:29:10 48楼
 

楼主辛苦了, 多谢分享。楼主辛苦了, 多谢分享。

  回复 引用 举报
小小高先生 个人主页 给TA发消息 加TA为好友 发表于:2017-03-29 19:02:17 49楼
 

谢谢楼主,初学者,希望看了会?#20852;?#25910;获

  回复 引用 举报
封建 个人主页 给TA发消息 加TA为好友 发表于:2017-03-31 14:52:44 50楼
 

引用楼上:  学习一下,看看如何控制的

  回复 引用 举报
个人主页 给TA发消息 加TA为好友 发表于:2019-09-30 12:08:09 0楼
 

 

Mpc013,mpc014,mpc014g运动控制模块

 

 

 

 

 

 

 

 

 

 

 

   概述

Mpc013,mpc014,mpc014g模块引脚兼容,指令功能兼容。Mpc013三轴高速独立控制,无插补功能,SPI通信。mpc014四轴共用一个插补核?#27169;?SPI通信。mpc014g在mpc014基础?#26174;?#21152;串口G代码控制功能。

◆   SPI或串口通讯,仅需使用少量指令便可完成复杂工作。

◆   单模块四轴输出,多个模块多从机工作可达120轴。

◆   支持四轴,三轴,二轴,一轴直线插补,二轴?#19981;?#25554;补,螺旋插补。脉冲输出使用脉冲+方向方式。 

◆   拥有512条运动指令缓存空间,支持连续插补,支持速度前?#21834;?/span>

◆   引脚输入输出3.3V,可兼容5V。

  

 

 

模块?#38405;?#21442;数

 

供电电源

3.3VDC   电流100MA

温度范围

-40 ~ +105

封装

双列直插30P

IO输入

3.3v ,兼容5v

IO输出

3.3v   TTL输出

控制轴数

Mpc013  3轴   Mpc014    4轴    Mpc014g    4轴

脉冲?#24503;?/span>

Mpc013  2M    Mpc014    500k    Mpc014g  500k

运动?#38405;?/span>

Mpc013  3轴独立单轴控制,支持指令缓存

Mpc014  1-4轴直线插补 ,?#19981;?#25554;补,螺旋插补,支持指令缓存,支持连续插补

Mpc014g  1-4轴直线插补 ,?#19981;?#25554;补,螺旋插补,支持指令缓存,支持连续插补,支持G代码控制

通信速度

SPI:20Mbps      串口:115200bps

状态指示灯

闲时慢速交替变化,轴运行时快速交替变化

 

 

封装尺寸

 

 

引脚排列

 

引脚号

引脚名称

引脚功能说明

1

VCC

电源正极+3.3V

2

GND

电源负极

3

TXD

串口数据发送

4

RXD

串口数据接收

5

CS

SPI通信使能脚,低电?#25509;行?/span>

6

SCK

SPI通信时钟脚

7

SO

SPI通信数据输出脚,接单片机数据输入脚

8

SI

SPI通信数据输入脚,接单片机数据输出脚

9

X0

1轴?#21512;?#20301;或原点,低电?#25509;行?/span>

10

X1

2轴?#21512;?#20301;或原点,低电?#25509;行?/span>

11

X2

3轴?#21512;?#20301;或原点,低电?#25509;行?/span>

12

X3

4轴?#21512;?#20301;或原点,低电?#25509;行?/span>

13

X4

4号输入口

14

X5

5号输入口

15

X6

6号输入口

16

P1

第1轴脉冲信号

17

D1

第1轴方向信号

18

P2

第2轴脉冲信号

19

D2

第2轴方向信号

20

P3

第3轴脉冲信号

21

D3

第3轴方向信号

22

P4

第4轴脉冲信号(mpc013无)

23

D4

第4轴方向信号(mpc013无)

24

Y0

0号输出口

25

Y1

1号输出口

26

Y2

2号输出口

27

Y3

3号输出口

28

Y4

4号输出口

29

Y5

5号输出口

30

Y6

6号输出口

 

 

 

 

SPI通讯协议

 

模块与单片机使用SPI通讯,单片机作为主机,模块为从机。CPHA=0,CPOL=0,高位在前,SPI数据宽度为8位。空闲状态下单片机SCK引脚必须为低电平。每一条指令开始发送前将CS引脚置低,整条指令发送完成后必须将CS置高。

每条指令间隔1MS以上

 

SPI时序图如下:

 

 

SPI通讯指令

 

设置轴速度

 

发送:

功能码

加速度

运行速度

倍率

0x01

2字节

2字节

1字节

 

 

 

 

 

 

部分参数解释:

加减速    加减速为:值(1-10000)*倍率(Hz/s2)

运行速度  运行?#24503;?#20026;:值(1-10000)*?#24503;时?#29575;(Hz)

倍率  ?#24503;时?#29575;(1-100)

 

要点:所设速度为所有轴速度,如需改变当前运动指令里的速度需在当前指令前重设速度。

 

 

设置轴逻辑位置

 

发送:

 

功能码

轴号

位置

0x12

1字节

4字节

 

 

 

 

部分参数解释:

轴号(1,2,3,4)   1-4:1-4轴

位置       轴逻辑位置,范围(-268435455~+268435455

 

 

轴停止

 

发送:

 

功能码

轴号

0x17

1字节

     

部分参数解释:

 

轴号(1,2,3,6)   1,2,3:独立轴1-3轴停     6,插补核心所有轴停止。

 

要点:只有mpc013有独立轴1-3轴。Mpc014所有轴共用一个插补核?#27169;?#34394;拟轴号为6。

 

各轴逻辑位置和状态

发送:

 

功能码

数据0

0x00

最多19个字节

        

返回:

起始码

各轴运行状态

各轴限位状态

剩余缓存数量

1轴坐标

2轴坐标

3轴坐标

4轴坐标

0x3f

1字节

1字节

1字节

4字节

4字节

4字节

4字节

 

 

 

 

 

 

部分参数解释:

 

 

各轴状态值(转为8位二进制数)

 第0位表示独立第一轴状态    0?#21644;?#27490;中  1:运行中

第1位表示独立第二轴状态    0?#21644;?#27490;中  1:运行中

第2位表示独立第三轴状态    0?#21644;?#27490;中  1:运行中

 

第5位为插补核心各轴状态     0?#21644;?#27490;中  1:运行中

各轴限位值(转为8位二进制数)

 第0位表示第一轴状态    0:正常  1?#21512;?#20301;

第1位表示第二轴状态    0:正常  1?#21512;?#20301;

第2位表示第三轴状态    0:正常  1?#21512;?#20301;

第3位表示第四轴状态    0:正常  1?#21512;?#20301;

 

剩余缓存数量(0-250)   剩余超过250条也显示250条

 

各轴坐标        范围(-268435455~+268435455

 

 

要点:返回字节按功能顺序排列,由于SPI工作模式是一边发送一边接收,如只需取前面字节的数据,为节省通讯时间,可只发送对应字节的数据0。例如只需获取各轴运行状态,发送2个字节0便可。

 

 

 

 

 

设置特殊功能

 

发送:

 

功能码

功能

0xfa

1字节

 

 

 

部分参数解释:

当功能写入0xfb,清除缓存。

当功能写入0xfc,缓存内运动指令暂停。

当功能写入0xfd,取消缓存内运动指令暂停。

 

 

 

 

 

 

以下指令会自动进入缓存区并排?#21448;?#34892;:

 

单轴运行

 

发送:

功能码

轴号

脉冲数量

运动方式

0x02

1字节

4字节

1字节

 

 

部分参数解释:

 

轴号(1,2,3)    单轴运动的轴号

脉冲数量 (-268435455~+268435455)输出的脉冲数 >0:正方向移动   <0:负方向移动

运动方式(0,1)   0:绝对位移  1?#21512;?#23545;位移  

 

要点: 此指令只有mpc013可用 ,mpc014如只需一轴运动可使用一轴直线插补指令。

 

 

 

 

 

 

 

一轴直线插补

发送:

 

功能码

X轴号

X脉冲数

运动方式

0x07

1字节

4字节

1字节

 

 

 

 

 

 

部分参数解释:

X轴号(1,2,3,4)

X脉冲(-268435455~+268435455

运动方式(0,1)   0:绝对位移  1?#21512;?#23545;位移 

 

 

二轴直线插补

发送:

 

 

功能码

X轴号

Y轴号

X脉冲数

Y脉冲数

运动方式

0x07

1字节

1字节

4字节

4字节

1字节

 

 

 

 

 

 

 

 

部分参数解释:

X轴号(1,2,3,4)

Y轴号(1,2,3,4)

X脉冲(-268435455~+268435455

Y脉冲(-268435455~+268435455

运动方式(0,1)   0:绝对位移  1?#21512;?#23545;位移 

 

 

三轴直线插补

发送:

 

 

 

功能码

X轴号

Y轴号

Z轴号

X脉冲数

Y脉冲数

Z脉冲数

运动方式

0x07

1字节

1字节

1字节

4字节

4字节

4字节

1字节

 

 

 

 

 

 

 

部分参数解释:

X轴号(1,2,3,4)

Y轴号(1,2,3,4)

Z轴号(1,2,3,4)

 

X脉冲(-268435455~+268435455

Y脉冲(-268435455~+268435455

Z脉冲(-268435455~+268435455

 

运动方式(0,1)   0:绝对位移  1?#21512;?#23545;位移 

 

 

 

四轴直线插补

发送:

功能码

X轴号

Y轴号

终点坐标X

终点坐标Y

?#27531;?#22352;标X

?#27531;?#22352;标Y

运动方式1

运动方式2

0x08

1字节

1字节

4字节

4字节

4字节

4字节

1字节

1字节

 

 

 

 

 

 

部分参数解释:

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

 

运动方式(0,1)   0:绝对位移  1?#21512;?#23545;位移 

 

 

二轴?#19981;?#25554;补

发送:

 

 

功能码

X轴号

Y轴号

Z轴号

E轴号

X脉冲数

Y脉冲数

Z脉冲数

E脉冲数

运动方式

0x07

1字节

1字节

字节

字节

4字节

4字节

字节

字节

1字节

 

 

 

部分参数解释:

X轴号(1,2,3)

Y轴号(1,2,3)

 

终点坐标         ?#19981;?#25554;补的终点位置,范围-268435455~+268435455

?#27531;?#22352;标         ?#19981;?#25554;补的?#27531;?#28857;位置,范围-268435455~+268435455

运动方式1        0:逆时针插补   1?#26680;?#26102;针插补  

运动方式2        0:绝对位移  1?#21512;?#23545;位移 

 

 

三轴螺旋插补

发送:

 

 

功能码

X轴号

Y轴号

Z轴号

终点坐标X

终点坐标Y

脉冲数

?#27531;?#22352;标X

?#27531;?#22352;标Y

运动方式1

运动方式2

0x08

1字节

1字节

1字节

4字节

4字节

字节

4字节

4字节

1字节

1字节

 

 

 

 

 

部分参数解释:

X轴号    (1,2,3)   ?#19981;轴

Y轴号    (1,2,3)   ?#19981;轴

Z轴号    (1,2,3)   螺旋轴

终点坐标     ?#19981;?#25554;补的终点位置,范围-268435455~+268435455

?#27531;?#22352;标     ?#19981;?#25554;补的?#27531;?#28857;位置,范围-268435455~+268435455

运动方式1     0:逆时针插补   1?#26680;?#26102;针插补 

运动方式2     0:绝对位移  1?#21512;?#23545;位移 

 

等待延时

 

发送:

 

功能码

延时量

0x0e

2字节

 

 

 

部分参数解释:

 

延时量(1-10000)MS

 

要点:等待延时是指等待所设延时量后才执行后面的指令。

 

?#35789;?#20986;口状态

 

发送:

 

功能码

输出端口号

输出状态

0x03

1字节

1字节

 

 

部分参数解释:

 

输出端口号   (0-6)    Y0-Y6

输出状态     (0,1)    0:输出低电平   1:输出高电平

 

 

等待轴停止

发送:

 

功能码

轴号

0x09

1字节

 

 

部分参数解释:

 

轴号(1,2,3)   1,2,3:独立轴1-3轴   

 

要点:等待轴停止是指在对应轴停止之前一直等待,直到轴停止后才执行后面的指令。只有mpc013才有独立轴1-3轴,独立轴不会自动等待轴运行完成后才执行下一条指令。Mpc014所有轴都基于一个插补核?#27169;?#20250;自动等待轴运行完成后才执行下一条指令。

 

 

 

 

 

 

 

 

电路连接

 

模块引脚输出最大电流15Ma,输入灌电流最大25Ma。如多模块组网,各模块的SCK,SO,SI引脚并联,CS脚独立受单片机控制。单片机SPI数据输入脚接模块SO脚,需内部或外部上拉。单片机SPI数据输出脚接模块SI脚。模块,单片机,差分输出连接参考图:

 

 

 

 

 

 

 

 

 

 

 

 

 

运动控制编程参考

通过51单片机控制模块的程序,完整电路图和程序工程可到官网下载。

 

#include <intrins.h>

#include <reg52.h>

 

//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 BRT             (65536 - FOSC / 115200 / 4)        //定义115200波特率

 

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    设为推挽输出

 

 SPI1_CSHIGH;      //CS不使用时设为高

 SPI2_CSHIGH;

 SPI3_CSHIGH;

 SPI_SCKLOW;//SCK空闲状态一定要为低电平。                 

}

 

void init_uart()

{

      

   SCON = 0x50;

    T2L = BRT;

    T2H = BRT >> 8;

    AUXR = 0x15;

  

}

 

 

 

/*

串口发送一个字节。

*/

 void USART_Txbyte(unsigned char i)

{

    SBUF   =   i;

    while(TI ==0);

    TI     =   0; 

}

 

 

/*

串口发送一串数据。

*/

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

{

   unsigned char i;                                    

        

   for(i=0;i<len;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);       

 

}

 

 

 

/*

函数名:   SPI_SendData

功能:软件模拟SPI通讯发送并接收一个8位字节数据。

如需使用硬件SPI,单片机作为主机,mpc014为从机。CPHA=0,CPOL=0,高位在前,SPI数据宽度为8位。

空闲状态下单片机SCK引脚必须为低电平。每一条指令开始发送前将CS引脚置低,整条指令发送完成后必须将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;

 

}

 

 

 

 

 

 

/*

函数名:  enabled_cs

功能:使能对应芯片模块的CS脚

参数:

cardno 卡号

用单片机不同引脚去控制不同芯片的CS脚,以便多个芯片模块关联使用。

*/

void enabled_cs(unsigned char cardno)

{

if(cardno==1)

{

SPI1_CSLOW;

}

 if(cardno==2)

{

SPI2_CSLOW;

}

 

if(cardno==3)

{

SPI3_CSLOW;

}

 

}

 

/*

函数名:  disabled_cs

功能:禁止对应芯片模块的CS脚

参数:

cardno 卡号

用单片机不同引脚去控制不同芯片的CS脚,以便多个芯片关联使用。

*/

void disabled_cs(unsigned char cardno)

{

 

if(cardno==1)

{

SPI1_CSHIGH;

}

 if(cardno==2)

{

SPI2_CSHIGH;

}

 

if(cardno==3)

{

SPI3_CSHIGH;

}

   

}

 

 

 

 

/*

函数名:  set_speed

功能:设置轴速度

参数:

cardno 卡号

acc        加减速:值*倍率(Hz/s2)

speed      运行?#24503;?#20026;:值*倍率(Hz)

range      倍率(1-100)

 

*/

 

void set_inp_speed(unsigned char cardno  ,unsigned int acc ,unsigned int speed ,unsigned char range)

{

unsigned char OutByte[25];

 

OutByte[0] = 1;

OutByte[1] = acc >>8;

OutByte[2] = acc ;

OutByte[3] = speed >>8;

OutByte[4] = speed ;

OutByte[5] = range;

   

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]);  

disabled_cs(cardno);    

   

delay_nms(1);

}

 

 

 

 

/*

函数名: pmove

功能:单轴运行    ,仅独立轴可用。

参数:

cardno 卡号

axis       轴号(1,2,3)

pulse  输出的脉冲数 >0:正方向移动     <0:负方向移动    范围(-268435455~+268435455)

mode    0:绝对位移  1?#21512;?#23545;位移

*/

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

{

unsigned char OutByte[25];

OutByte[0] = 2    ;

OutByte[1] = axis;

OutByte[2] = pulse >>24;

OutByte[3] = pulse >>16;

OutByte[4] = pulse >>8;

OutByte[5] = pulse ;

OutByte[6] = 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]);

   

disabled_cs(cardno);

 

    delay_nms(1)   ; 

}

 

 

 

 

 

 

 

/*

函数名:    set_command_pos

功能: 设置轴逻辑位置

 

参数:

cardno 卡号

axis   轴号(1,2,3,4)

pulse  位置脉冲数,范围(-268435455~+268435455)

 

*/

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

{

unsigned char OutByte[25];

 

OutByte[0] = 0x12 ;

OutByte[1] = axis ;

OutByte[2] = value >>24;

OutByte[3] = value >>16;

OutByte[4] = value >>8;

OutByte[5] = 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]);  

disabled_cs(cardno);    

      

   

 delay_nms(1);

}

 

 

 

/*

函数名: sudden_stop

功能: 轴立即停止

参数:

cardno 卡号

axis   停止的轴号(1,2,3,6)   1,2,3:独立轴1-3轴停     6,插补模块所有轴停止。

 

*/

void sudden_stop(unsigned char cardno ,unsigned char axis)

{

unsigned char OutByte[25];

 

OutByte[0] = 0x17 ;

OutByte[1] = axis ;

 

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

disabled_cs(cardno);

 

delay_nms(1);    

}

 

 

 

 

 /*

函数名: set_special

功能:设置特别功能

参数:

cardno 卡号

value 

       0xfb    清除缓存

       0xfc     缓存插补运动暂停

       0xfd   取消缓存插补暂停

     

*/

void set_special(unsigned char cardno,unsigned char value)

{

unsigned char OutByte[25];

 

OutByte[0] = 0xFA ;

OutByte[1] = value;

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

disabled_cs(cardno);

delay_nms(1);    

   

}

 

 

 /*

函数名: get_inp_state

功能: 获取轴状态,限位状态,缓存剩余量,各轴逻辑位置。

 

参数:

cardno 卡号

amount  获取字节数量。   设为20将取全部数据。

inbuf[]   读取的数据存放的数组

*/

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

{  

unsigned char OutByte[25];

 

char i;   

enabled_cs(cardno);

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

{  

inbuf[i]=SPI_SendData(0);

 

}

disabled_cs(cardno);

delay_nms(1);

   

 

}

 

 

 

 

 

 

 /*

函数名:     inp_move1

功能:一轴直线插补

参数:

cardno     卡号

no1   X轴轴号

pulse1            X轴移动的距离,范围(-8388608~+8388607)

mode  0:绝对位移  1?#21512;?#23545;位移 

*/

void inp_move1(unsigned char cardno,unsigned char no1 , long pulse1  ,unsigned char mode )

{

unsigned char OutByte[25];

OutByte[0] = 0x7;

OutByte[1] = no1;

OutByte[2] = pulse1>>24;

OutByte[3] = pulse1 >>16;

OutByte[4] = pulse1>> 8;

OutByte[5] = pulse1;

OutByte[6] = 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]);

   

disabled_cs(cardno);

   

delay_nms(1);    

 

 

}

 

/*

函数名:     inp_move2

功能:二轴直线插补

参数:

cardno     卡号

no1   X轴轴号

no2   Y轴轴号

pulse1,pulse2            X-Y轴移动的距离,范围(-8388608~+8388607)

mode   0:绝对位移  1?#21512;?#23545;位移 

*/

void inp_move2(unsigned char cardno,unsigned char no1 ,unsigned char no2 , long pulse1  ,long pulse2 ,unsigned char mode )

{

unsigned char OutByte[25];

OutByte[0] = 0x8;

OutByte[1] = no1;

OutByte[2] = no2;

OutByte[3] = pulse1>>24;

OutByte[4] = pulse1 >>16;

OutByte[5] = pulse1>> 8;

OutByte[6] = pulse1;

OutByte[7] = pulse2 >>24;

OutByte[8] = pulse2 >>16;

OutByte[9] = pulse2 >>8;

OutByte[10] = pulse2 ;

OutByte[11] = 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]); 

disabled_cs(cardno);

   

delay_nms(1);    

 

 

}

 

 

/*

函数名:     inp_move3

功能:三轴直线插补

参数:

cardno     卡号

no1   X轴轴号

no2   Y轴轴号

no3   Z轴轴号

pulse1,pulse2,pulse3            X-Y-Z轴移动的距离,范围(-8388608~+8388607)

mode  0:绝对位移  1?#21512;?#23545;位移 

*/

void inp_move3(unsigned char cardno,unsigned char no1 ,unsigned char no2 ,unsigned char no3, long pulse1  ,long pulse2 ,long pulse3 ,unsigned char mode )

{

unsigned char OutByte[25];

OutByte[0] = 0x9;

OutByte[1] = no1;

OutByte[2] = no2;

OutByte[3] = no3;

OutByte[4] = pulse1>>24;

OutByte[5] = pulse1 >>16;

OutByte[6] = pulse1>> 8;

OutByte[7] = pulse1;

OutByte[8] = pulse2 >>24;

OutByte[9] = pulse2 >>16;

OutByte[10] = pulse2 >>8;

OutByte[11] = pulse2 ;

  OutByte[12] = pulse3 >>24;

OutByte[13] = pulse3 >>16;

OutByte[14] = pulse3 >>8;

OutByte[15] = pulse3 ;

OutByte[16] = 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]); 

disabled_cs(cardno);

   

delay_nms(1);    

 

 

}

 

/*

函数名:     inp_move4

功能:四轴直线插补

参数:

cardno     卡号

no1   X轴轴号

no2   Y轴轴号

no3   Z轴轴号

no4   E轴轴号

pulse1,pulse2,pulse3,pulse4            X-Y-Z-E轴移动的距离,范围(-8388608~+8388607)

mode  0:绝对位移  1?#21512;?#23545;位移 

*/

 

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] = 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]);

disabled_cs(cardno);

   

delay_nms(1);    

 

 

}

 

 

 

/*

函数名: inp_arc

功能:二轴?#19981;?#25554;补

参数:

cardno 卡号

no1    参与插补X轴的轴号

no2    参与插补Y轴的轴号

x,y    ?#19981;?#25554;补的终点位置(相对于起点),范围(-8388608~+8388607)           

i,j    ?#19981;?#25554;补的?#27531;?#28857;位置(相对于起点),范围(-8388608~+8388607)

mode1       0:逆时针插补   1?#26680;?#26102;针插补

mode2  0:绝对位移  1?#21512;?#23545;位移

*/

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(1);    

}

 

/*

函数名: inp_helical

功能:?#19981;?#34746;旋插补

参数:

cardno 卡号

no1    参与插补X轴的轴号

no2    参与插补Y轴的轴号

no3    参与插?#23396;?#26059;轴的轴号

x,y    ?#19981;?#25554;补的终点位置(相对于起点),范围(-8388608~+8388607)

z      参与插?#23396;?#26059;轴的位置(相对于起点)       

i,j    ?#19981;?#25554;补的?#27531;?#28857;位置(相对于起点),范围(-8388608~+8388607)

mode1      0:逆时针插补   1?#26680;?#26102;针插补

mode2     0:绝对位移  1?#21512;?#23545;位移  

*/

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);    

}

 

/*

函数名: wait_stop

功能:等待轴停止

参数:

cardno  卡号

axis    需要等待停止的轴号(1,2,3,6)   1,2,3:独立轴1-3轴     6,插补模块所有轴

 

*/

void wait_stop(unsigned char cardno ,unsigned char axis)

{

unsigned char OutByte[25];

 

OutByte[0] = 0x0f ;

OutByte[1] = axis ;

 

enabled_cs(cardno);

SPI_SendData(OutByte[0]);

SPI_SendData(OutByte[1]);

disabled_cs(cardno);

 

delay_nms(1);

 

}

 

 

 

 

/*

函数名: write_bit

功能:?#35789;?#20986;口状态

参数:

cardno 卡号

number  端口号(0-2)  Y0-Y2

value   状态(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);

 

}

 

 

/*

函数名: wait_delay

功能:等待延时数

参数:

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);

 

}

 

 

 

void main(void) 

{

   initial();

   init_uart();

   // ES = 1;

   // EA = 1;

 

    P_SW2 = 0x80;

    XOSCCR = 0xc0;                              //启动外部晶振

    while (!(XOSCCR & 1));                      //等待时钟稳定

    CKDIV = 0x00;                               //时钟不?#21046;?/span>

    CKSEL = 0x01;                               //选择外部晶振

    P_SW2 = 0x00;

 

 

     led=0;

 delay_nms(10)     ;

 

 

   /*独立运行轴1,2,3轴回原点,更多方式回原点可自由组合。mpc013专用

     set_inp_speed(1 ,200,300,100);     //设加速度50000Hz/s2, 运行速度30000Hz

     pmove(1,1,-1000000,1);       //    1轴多脉冲负方向运动,碰到原点限位自动停止

     pmove(1,2,-1000000,1);       //    2轴多脉冲负方向运动 ,碰到原点限位自动停止

     pmove(1,3,-1000000,1);       //    2轴多脉冲负方向运动,碰到原点限位自动停止

     

     do

     {

     get_inp_state( 1, 2,inbuf);      //只需读出2个字节来判断轴状态

     }

     while(inbuf[1]);    //inbuf[1]数据为0表示所有轴都停

     set_command_pos(1 ,1,0);      //设1轴坐标    

     set_command_pos(1 ,2,0);      //设2轴坐标    

     set_command_pos(1 ,3,0);      //设3轴坐标

         

       */

 

     

 

 

   /*插补运行轴1,2,3,4轴回原点,更多方式回原点可自由组合。mpc014专用

     set_inp_speed(1 ,200,300,100);     //设加速度50000Hz/s2, 运行速度30000Hz

     inp_move4(1,1,2,3,4 ,-1000000,-1000000,-1000000,-1000000 ,1);     //   多轴多脉冲插补负方向运动,碰到原点限位自动停止

     do

     {

     get_inp_state( 1, 2,inbuf);      //只需读出2个字节来判断轴状态

     }

     while(inbuf[1]);    //inbuf[1]数据为0表示所有轴都停

     set_command_pos(1 ,1,0);      //设1轴坐标    

     set_command_pos(1 ,2,0);      //设2轴坐标    

     set_command_pos(1 ,3,0);      //设3轴坐标    

     set_command_pos(1 ,4,0);      //设3轴坐标    

        */

 

 

 

 

   while(1)

     {

     if((!b1)&&(!b1_state))

        {

        delay_nms(10);    

       if((!b1)&&(!b1_state))

        {

        led=0;

       b1_state=1;

    //  set_inp_speed(1 ,500,500,100);

        

      /*下面的指令会直接发到缓存区自动排队运?#23567;pc014专用*/

       inp_move2(1,2 ,3 ,5000 ,5000 ,1);

      inp_move2(1,2 ,3 ,5000 ,5000 ,1);

     inp_move3(1,2,3,1 ,500,1000 ,2000 ,1); 

       wait_delay(1 ,1000);

      inp_move2(1,1 ,2 ,1000 ,1000 ,1);

        write_bit(1 , 0, 1);

       inp_move1(1,2 ,10000  ,1 ) ;

       inp_move1(1,1 ,1000 ,1) ;

       inp_arc(1 ,2,3, -200, 200, -200, 0,0,1) ;

      /*上面的指令会直接发到缓存区自动排队运?#23567;pc014专用*/

 

      

 

    //  set_inp_speed(1 ,5000,5000,100);

    //  pmove(1,1,1000, 1);    // pmove只有mpc013能用

    //  wait_stop(1 ,1);

    //  pmove(1,2,-100, 1);

 

           while(!b1);

       }    

         

        }

       else

      led=1;

       

 

      if((!b1)&&(b1_state))

        {

        delay_nms(10)     ;

        if((!b1)&&(b1_state))

          {

 

           led=0;

          //sudden_stop(1,1);           //    立即停止独立轴1轴 ,只适用于mpc013

        //sudden_stop(1,6);             //    立即停止所有插补轴

 

         get_inp_state( 1, 20,inbuf);    //读出20个字节数据放入数组 

         USRAT_transmit(inbuf,20);    //  串口将数组数据发送出去查看

         if(inbuf[1]==0)         //inbuf[1]数据为0表示所有轴都停

            b1_state=0;

           while(!b1);

           }

      }

 

     }    

   

}

 

 

串口G代码控制

 

Mpc014g模块可通过串口 G代码控制模块,串口通讯速率为115200bps,数据位为8位,停止位1位,无校验。

模块通讯协议完全兼容标准G代码,G代码详细的格?#25509;?#29992;法请参考标准文档。上电芯片会主动发送字符“>”,工作时上位机每发送一条指令,会回复字符“ok”,发 M114会回复坐标。上位机只有当收到回复后,才可发送下一条指令。目前支持如下指令:

 

G0-快速定位  坐标,单位mm。速度F表示mm/s。

如:G0 X10 Y10 F30000

 

G1 - 直线插补     ?#28572;?#22352;标,单位mm。

如:G1 X10 Y10 F30000

 

G2 - 正圆插补   X,Y为终点坐标,I,J为?#27531;?#30456;对起点坐标。

如:G2 X-20 Y20 I-20 J0 F30000

 

G3 - 逆圆插补

如:G2 X-20 Y20 I-20 J0 F30000

 

 

G90 - 绝对坐标

如:G90

 

G91 - 相对坐标

如:G91

 

G92 -  设置坐标

如:G92 X0 Y0

 

M92  -  脉冲系数  每MM多少脉冲,模块默认系数为1。

如:M92 X200 Y200 Z200 E200

 

M109  -  等待延时,单位MS

如:M109 S2000

 

M110  -  端口输出 ,T为端口号,Z为值

如:M110 T6 Z1

 

 

M112 -急停     ,停所有轴,并清空缓存

如:M112

 

M114 -读取当前坐标  ,返回轴坐标

如:M114

 

M115返回轴状态

如:M115

 

M116返回剩余缓存数量

如:M116

 

 

M204  - 设置加速度S,单位mm/s2。

如:M204 S5000

 

 

 

 


  回复 引用 举报
总条数: | 当前第1/4页 首页 上一页 1 2 3 4 下一页 尾页
?
周点击排行
周回复排行
最新求助
Advertisement
?
? 2019最新自拍国产