单片机与mpc运动控制模块组成的三轴运动控制系统方案

上传人:xx****m 文档编号:70632952 上传时间:2022-04-06 格式:DOC 页数:18 大小:403KB
收藏 版权申诉 举报 下载
单片机与mpc运动控制模块组成的三轴运动控制系统方案_第1页
第1页 / 共18页
单片机与mpc运动控制模块组成的三轴运动控制系统方案_第2页
第2页 / 共18页
单片机与mpc运动控制模块组成的三轴运动控制系统方案_第3页
第3页 / 共18页
资源描述:

《单片机与mpc运动控制模块组成的三轴运动控制系统方案》由会员分享,可在线阅读,更多相关《单片机与mpc运动控制模块组成的三轴运动控制系统方案(18页珍藏版)》请在装配图网上搜索。

1、. . . . 单片机与mpc运动控制模块组成的三轴运动控制系统摘要:采用单片机stc89C2051和mpc微型运动控制模块作为控制系统的核心,控制三路步进电机做运动实验。单片机发送指令给mpc微型运动控制模块,模块信号输出给步进驱动器作高速度运动。可以定点运动,直线插补和圆弧插补。1引言运动控制的应用在国已有十几年的历史,技术也相当成熟。通常运动控制都需要用到运动控制卡,运动控制器等产品,但这些产品价格高昂,使用复杂,也不适合由单片机构成的控制系统。而如果直接采用单片机来做运动控制,由于运动控制对系统性能要求非常高,单片机速度资源有限,难以设计出性能优良的运动控制模型。因此,本文采用单片机和

2、专业的mpc微型运动控制模块构成运动控制系统。MPC微型运动控制模块采用新型FPGA设计,集成实用运动控制功能,可与普通单片机通过串口通讯对步进电机和伺服电机控制。具有如下特点: 串口通讯,仅需使用几条指令,简单可靠。 单模块最高六轴输出,多个模块组网工作可达120轴。 最大脉冲输出频率为2MHz,脉冲输出使用脉冲+方向方式。 最高六轴独立运动控制,任意两轴直线插补,任意两轴圆弧插补。 每轴一路硬件回原点。 模块带1000级指令缓存深度,指令先进先出。 模块体积小巧,仅3.5*2.5*1.5cm,双排直插30脚。2,系统硬件设计硬件系统由四部分构成:(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型光电开关来作为原点信号。(4) 信号输出部分输出采用NPN晶体管极电极开路输出,分别接到电机驱动器脉冲和方向信号输入端。3,系统软件设计MPC微型运动控制模块与单片机串口通讯速率为115200

4、bps,数据位为8位,停止位0位,无校验。使用函数前先设置好单片机的串口功能,并将需要用到的函数的原型拷贝到当前程序。试验程序如下:#include /-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_CLKO= 0X8f;sfr BRT =0x

5、9c;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位数据,可变波特率 BRT = 0xFD; /设定独立波特率发生器重装值 波特率115200bps AUXR |= 0x04; /独立波特率发生器时钟为

6、Fosc,即1T AUXR |= 0x01; /串口1选择独立波特率发生器为波特率发生器 AUXR |= 0x10; /启动独立波特率发生器/*串口发送一个字节,需根据所使用的单片机作适当更改。*/ void USART_Txbyte(unsigned char i) SBUF = i; while(TI =0); /等待发送完成 TI = 0; /清零串口发送完成中断请求标志/*串口接收模块返回的10个字节数据,需根据所使用的单片机作适当更改。*/ void receive(unsigned char *buf)unsigned char i;for(i=0;i10;i+) while(RI

7、=0); RI=0; bufi=SBUF; /*串口发送一串数据。*/void USRAT_transmit(unsigned char *fdata,unsigned char len) unsigned char i; for(i=0;i24;OutByte7 = pulse1 16;OutByte8 = pulse1 8;OutByte9 = pulse1;OutByte10 = pulse2 24;OutByte11 = pulse2 16;OutByte12 = pulse2 8;OutByte13 = pulse2 ;OutByte14 = mode;OutByte15 =OutB

8、yte1 +OutByte2 +OutByte3 +OutByte4+OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 +OutByte13 +OutByte14;USRAT_transmit(OutByte,16);receive(inbuf);return 1;/*函数名: inp_arc功能:二轴圆弧插补参数:cardno卡号no1参与插补X轴的轴号no2参与插补Y轴的轴号x,y圆弧插补的终点位置(相对于起点),围(-8388608+8388607)i,j圆弧插补的圆心点位

9、置(相对于起点),围(-8388608+8388607)mode 0:顺时针插补 1:逆时针插补返回值:0 失败1 成功*/unsigned 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

10、 = 0x7;OutByte4 = no1;OutByte5 = no2;OutByte6 = X 24;OutByte7 = 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 8;OutByte21 = j ;OutByte

11、22 = 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(OutByte,24); receive(inbuf);re

12、turn 1;/*函数名: set_speed功能:设置轴速度参数: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 ) unsigned char OutByte25;unsi

13、gned 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 ;OutByte13 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5

14、 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 ;USRAT_transmit(OutByte,14);receive(inbuf);return 1;/*函数名: set_soft_limit功能:设置轴软件限位参数:cardno卡号axis轴号(1-6)pulse1负方向限位脉冲值,围(-83886080)pulse2正方向限位脉冲值,围(0+8388607)返回值:0 失败1 成功*/unsigned char set_soft_limit(unsigned char cardno ,u

15、nsigned 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;OutByte7 = pulse1 16;OutByte8 = pulse1 8;OutByte9 = pulse1 ;OutByte1

16、0 = pulse2 24;OutByte11 = pulse2 16;OutByte12 = pulse2 8;OutByte13 = pulse2 ;OutByte14 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +OutByte10 +OutByte11 + OutByte12 +OutByte13 ;USRAT_transmit(OutByte,15);receive(inbuf);return 1;/*函数名: pmove功能:单轴运行参数:card

17、no卡号axis轴号(1-6)pulse 输出的脉冲数 0:正方向移动 24;OutByte6 = pulse 16;OutByte7 = pulse 8;OutByte8 = pulse ;OutByte9 = mode ;OutByte10 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 ;USRAT_transmit(OutByte,11);receive(inbuf);return 1;/*函数名: wait_delay功能:等待延时数参数:cardno卡

18、号value 延时量(1-10000)MS返回值:0 失败1 成功*/unsigned char wait_delay(unsigned char cardno ,unsigned int value) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x6 ;OutByte2 = cardno ;OutByte3 = 0xE ;OutByte4 = value 8;OutByte5 = value ;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByt

19、e4 +OutByte5;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函数名:set_command_pos功能: 设置轴逻辑位置参数:cardno卡号axis轴号(1-6)pulse 位置脉冲数,围(-268435455+268435455)返回值:0 失败1 成功*/unsigned char set_command_pos(unsigned char cardno ,unsigned char axis, long value ) unsigned char OutByte25;unsigned char inbuf12; Ou

20、tByte0 = 0x68 ;OutByte1 = 0x9 ;OutByte2 = cardno ;OutByte3 = 0x12 ;OutByte4 = axis ;OutByte5 = value 24;OutByte6 = value 16;OutByte7 = value 8;OutByte8 = value ;OutByte9 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);receive(inbuf);return

21、1; /*函数名: wait_pulse功能:等待轴脉冲数参数:cardno卡号axis轴号(1-6)pulse 位置脉冲数,围(-268435455+268435455)返回值:0 失败1 成功*/unsigned char wait_pulse(unsigned char cardno ,unsigned char axis, long value ) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68;OutByte1 = 0x9 ;OutByte2 = cardno ;OutByte3 = 0x19;OutByte

22、4 = axis ;OutByte5 = value 24;OutByte6 = value 16;OutByte7 = value 8;OutByte8 = value ;OutByte9 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);receive(inbuf);return 1;/*函数名: write_bit功能:写输出口状态参数:cardno卡号number 端口号(0-8) Y0-Y8value 状态(0,1) 0

23、 输出低电平 1 输出高电平返回值:0 失败1 成功*/unsigned char write_bit(unsigned char cardno , unsigned char number, unsigned char value) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x6 ;OutByte2 = cardno ;OutByte3 = 3;OutByte4 = number;OutByte5 = value;OutByte6 =OutByte1 +OutByte2 +OutBy

24、te3 +OutByte4 +OutByte5 ;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函数名: sudden_stop功能: 轴停止参数: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 = card

25、no ;OutByte3 = 0x17 ;OutByte4 = axis ;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4 ;USRAT_transmit(OutByte,6);receive(inbuf);return 1;/*函数名: wait_in功能: 等待输入口状态参数:cardno卡号number 端口号(0-6) X0-X6value 状态(0,1) 0 输入低电平 1 输入高电平返回值:0 失败1 成功*/unsigned char wait_in( unsigned char cardno, unsigned char num

26、ber, unsigned char value) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68 ;OutByte1 = 0x6 ;OutByte2 = cardno;OutByte3 = 0xF ;OutByte4 = number ;OutByte5 = value;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函数名: wait_stop

27、功能:等待轴停止参数:cardno 卡号axis 需要停止的轴号返回值:0 失败1 成功*/unsigned char wait_stop(unsigned char cardno ,unsigned char axis) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x5 ;OutByte2 = cardno ;OutByte3 = 9;OutByte4 = axis ;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4;USRAT_tran

28、smit(OutByte,6);receive(inbuf);return 1;/*函数名: get_number功能:获取唯一序列号参数:cardno卡号返回值: 32位序列号*/unsigned long get_number(unsigned char cardno ) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x4 ;OutByte2 = cardno;OutByte3 = 0xC ;OutByte4 =OutByte1 +OutByte2 +OutByte3 ;USRAT_t

29、ransmit(OutByte,5);receive(inbuf);return (unsigned long)inbuf424+(unsigned long)inbuf516+(unsigned long)inbuf68+(unsigned long)inbuf7;/*函数名: get_status功能:获取各轴工作状态参数:cardno卡号返回值: 8位二进制,1-6位分别代表1-6轴状态,0表示停止中,1表示运行中。*/unsigned char get_status( unsigned char cardno) unsigned char OutByte25;unsigned char

30、 inbuf12;OutByte0 = 0x68 ;OutByte1 = 0x4 ;OutByte2 = cardno ;OutByte3 = 5 ;OutByte4 =OutByte1 +OutByte2 +OutByte3 ;USRAT_transmit(OutByte,5);receive(inbuf);return inbuf4;/*函数名: get_command_pos功能: 获取轴逻辑位置参数:cardno卡号axis 轴号返回值: 位置脉冲数,围(-268435455+268435455)*/unsigned long get_command_pos( unsigned cha

31、r cardno, unsigned char axis) unsigned char OutByte25;unsigned char inbuf12; OutByte0 = 0x68 ;OutByte1 = 0x5 ;OutByte2 = cardno ;OutByte3 = 6 ;OutByte4 = axis ;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4 ;USRAT_transmit(OutByte,6);receive(inbuf);return (unsigned long)inbuf524+(unsigned long)inb

32、uf616+(unsigned long)inbuf78+(unsigned long)inbuf8;/*函数名: set_cardno功能:设置卡号参数:cardno卡号(1-255)返回值:0 失败1 成功*/unsigned char set_cardno(unsigned char cardno) unsigned char OutByte25;unsigned char inbuf12;OutByte0 = 0x68 ;OutByte1 = 5 ;OutByte2 = 0 ;OutByte3 = 0xFA ;OutByte4 = cardno ;OutByte5 =OutByte1

33、+OutByte2 +OutByte3 +OutByte4 ;USRAT_transmit(OutByte,6);receive(inbuf);return 1;void main(void) initial(); init_uart(); set_cardno(1); /设卡号为1 while(1) if(!s1)/按键按下 set_speed(1 ,1,1000,1000,10,200); / 设1轴速度 set_speed(1 ,2,1000,1000,10,200); / 设2轴速度 set_speed(1 ,3,1000,1000,10,200); / 设3轴速度 /*1轴回原点*/

34、 pmove(1,1,-1000000,0); / 1轴运动 wait_in(1,0,1); / 等待X0为高 sudden_stop(1,1); / 1轴停止 set_command_pos(1,1,0);/ 设1轴此时坐标为0pmove(1,2,3200,0); / 2轴运动 pmove(1,3,-3200,0); / 3轴运动 while(!s1); 4,结束语单片机和mpc运动控制模块构成的系统,使单片机彻底地从复杂的运动控制算法中解放出来,单片机只需简单地使用几条指令来控制模块便可完成运动控制,从而能将更多的资源用来参与其它方面的控制,对构建一个稳定的控制系统具有重大意义。18 / 18

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!