




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、由单片机和mpc运动控制模块组成的三轴运动控制系统摘要:以单片机stc 89C 2051和mpc微运动控制模块为控制系统核心,控制三向步进电机进行运动实验。单片机向mpc微运动控制模块发送指令,模块信号输出给步进驱动器进行高速运动。可以进行定点运动、直线插补和圆弧插补。1 .介绍运动控制的应用在国内已有十多年的历史,技术相当成熟。通常运动控制需要运动控制卡、运动控制器等产品,但这些产品价格昂贵,使用复杂,不适合单片机组成的控制系统。但是,如果单片机直接用于运动控制,由于运动控制对系统性能的要求非常高,而且单片机的速度资源有限,因此很难设计出性能优良的运动控制模型。有限的。因此,本文采用单片机和
2、专业的mpc微型运动控制模块组成运动控制系统。MPC微运动控制模块采用全新的FPGA设计,集成了实用的运动控制功能,可以通过与普通单片机的串行通讯控制步进电机和伺服电机。具有以下特点: 串行通讯只需少量指令,简单可靠。 单个模块最多可输出6轴,多模块组网最多可工作120轴。 最大脉冲输出频率为2MHz,脉冲输出采用脉冲+方向方式。 多达六轴独立运动控制,任意两轴线性插补,任意两轴圆弧插补。 每轴一个硬件回原点。 模块具有1000级指令缓存深度,指令先进先出。 模块体积小,仅3.5*2.5*1.5cm,双排直插30针。2.系统硬件设计硬件系统由四部分组成:单片机部分单片机和模块只需要三根线连接,
3、分别作为RXD和TXD进行串口通讯,作为模块缓存满后输出的BUSY信号。 P3.7引出一个按钮进行测试。mpc微运动控制模块部分mpc微型运动控制模块采用5V电源供电,RXD、TXD、BUSY与单片机相连。 X0、X1、X2可作为三通电机的原点信号,P1、D1为1轴的脉冲和方向信号。 P2、D2为2轴的脉冲和方向信号。 P3、D3为3轴的脉冲和方向信号。(3) 原点信号输入部分原点采用光耦隔离输入,输入端可接NPN光电开关作为原点信号。信号输出部分输出采用NPN晶体管极电极的开路输出,分别接电机驱动器的脉冲和方向信号输入端。3.系统软件设计MPC微动控制模块与单片机的串行通信速率为115200
4、bps,数据位为8位,停止位为0位,无奇偶校验。使用该功能前,先设置好单片机的串口功能,并将要使用的功能原型复制到当前程序中。测试程序如下:#include /-STC 89 C205 1 -sfr IPH = 0XB7;sfr CCON = 0XD8;sfr CMOD = 0XD9;sfr CL = 0XE9;sfr CH =0XF9;sfr CCAP0L = 0XEA;sfr CCAP0H = 0XFA;sfr CCAPM0 = 0XDA;sfr CCAPM1 = 0XDB;sfr P3M1=0XB1;sfr P3M0=0XB2;sfr P1M1=0X91;sfr P1M0=0X92;sf
5、r WAKE_CLKO= 0X8f;sfr BRT = 0 x9c;sfr AUXR = 0 x8E;sfr AUXR1 = 0 xA2;sfr WDT_CONTR = 0 xc1;sfr T2MOD = 0 xC9;/位忙= P3 2;位 s1 = P37;无效初始()P3M1 = 0 x00;P3M0 = 0 x80;P1M1 = 0 x00;P1M0 = 0 xf9;无效的init_uart()PCON &= 0 x7f; /波特率不加倍SCON = 0 x50; /8位数据,可变波特率BRT = 0 xFD; /设置独立波特率发生器重载值波特率115200bpsAUXR |= 0 x0
6、4; /独立波特率发生器的时钟为Fosc,即1TAUXR |= 0 x01; /串口1选择独立的波特率发生器作为波特率发生器AUXR |= 0 x10; /启动独立波特率发生器/*串口发送一个字节,需要根据使用的单片机改变。*/无效 USART_Txbyte(无符号字符 i)SBUF = 我;而(TI =0); /等待发送完成TI = 0; /清除串口发送完成中断请求标志/*串口接收模块返回的10字节数据需要根据使用的单片机做适当的改变。*/无效接收(无符号字符 *buf)无符号字符 i;对于(i=0;i10;i+)而(RI=0); RI=0;bufi=SBUF;/*串口发送一串数据。*/vo
7、id USRAT_transmit(unsigned char *fdata, unsigned char len)无符号字符 i;for(i=0;i24;OutByte7 = 脉冲1 16;OutByte8 = 脉冲1 8;OutByte9 = 脉冲1;OutByte10 = 脉冲2 24;OutByte11 = 脉冲2 16;OutByte12 = 脉冲2 8;OutByte13 = 脉冲2;OutByte14 = 模式;OutByte15 =OutByte1 +OutByte2 +OutByte3 +OutByte4+OutByte5 +OutByte6 +OutByte7 +OutBy
8、te8 +OutByte9 +输出字节10 +输出字节11 + 输出字节12 +输出字节13 +输出字节14;USRAT_transmit(OutByte,16);接收(inbuf);返回 1;/*函数名:inp_arc功能:两轴圆弧插补范围:卡诺卡号no1参与插补X轴的轴号no2插补所涉及的Y轴的轴号x,y圆弧插值(相对于起点),圆周(-8388608+8388607)i,j圆弧插补中心点的位置(相对于起点),圆周(-8388608+8388607)模式 0:顺时针插补 1:逆时针插补返回值:0 失败1 成功*/unsigned char inp_arc(unsigned char card
9、no ,unsigned char no1,unsigned char no2, long X , long y, long i, long j,unsigned char mode )无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x17;OutByte2 = 卡号;输出字节3 = 0 x7;OutByte4 = no1;OutByte5 = no2;OutByte6 = X 24;OutByte7 = X 16;OutByte8 = X 8;输出字节9 = X ;OutByte10 = y 24;OutByte 11 = y 16;Out
10、Byte 12 = y 8;输出字节 13 = y;OutByte 14 = i 24;OutByte 15 = i 16;OutByte 16 = i 8;输出字节 17 = i;OutByte 18 = j 24;OutByte 19 = j 16;OutByte 20 = j 8;输出字节 21 = j;OutByte 22 = 模式;OutByte 23 = OutByte 1 + OutByte 2 + OutByte 3 + OutByte 4 + OutByte 5 + OutByte 6 + OutByte 7 + OutByte 8 + OutByte 9 +输出字节 10
11、+ 输出字节 11 + OutByte 12 + OutByte 13 + OutByte 14 + OutByte 15 + OutByte 16 + OutByte 17 + OutByte 18 + OutByte 19 + OutByte 20 + OutByte 21 +输出字节22;USRAT_transmit (OutByte, 24); 接收(inbuf);返回 1;/*函数名称:set_speed功能:设置轴速度范围:卡诺卡号轴轴号 (1-6)acc 加速时间 (ms)dec 减速时间 (ms)startv 起始频率 (*100Hz)速度运行频率(*100Hz)返回值:0 失
12、败1 成功*/unsigned char set_speed (unsigned char cardno ,unsigned char axis ,unsigned int acc ,unsigned int dec ,unsigned int startv ,unsigned int speed )无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 xD;OutByte2 = 卡号;输出字节3 = 1;OutByte4 = 轴;OutByte5 = acc 8;OutByte6 = acc ;OutByte7 = 十进制 8;OutByte8
13、= 十进制;OutByte9 = startv 8;OutByte10 = startv ;OutByte11 = 速度 8;OutByte12 = 速度;OutByte13 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 +OutByte9 +输出字节10 +输出字节11 +输出字节12;USRAT_transmit(OutByte,14);接收(inbuf);返回 1;/*函数名称:set_soft_limit功能:设置轴软限位范围:卡诺卡号轴轴号 (1-6)pulse1负限脉冲
14、值,范围(-83886080)pulse2正限脉冲值,范围(0+8388607)返回值:0 失败1 成功*/unsigned char set_soft_limit(unsigned char cardno ,unsigned char 轴 ,unsigned char 模式, long pulse1 , long pulse2 )无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 xE;OutByte 2 = cardno;输出字节3 = 0 x13;OutByte 4 = 轴;OutByte 5 = 模式;OutByte 6 = 脉冲 1 2
15、4;OutByte 7 = 脉冲 1 16;OutByte 8 = 脉冲 1 8;OutByte 9 = 脉冲 1;OutByte 10 = 脉冲2 24;OutByte 11 = 脉冲 2 16;OutByte 12 = 脉冲 2 8;OutByte 13 = 脉冲 2;OutByte 14 = OutByte 1 + OutByte 2 + OutByte 3 + OutByte 4 + OutByte 5 + OutByte 6 + OutByte 7 + OutByte 8 + OutByte 9 +输出字节 10 + 输出字节 11 +输出字节 12 + 输出字节 13;USRAT_
16、transmit (OutByte, 15);接收(inbuf);返回 1;/*函数名称:pmove功能:单轴操作范围:卡诺卡号轴轴号 (1-6)脉冲输出脉冲0:正方向运动 24;OutByte 6 = pulse 16;OutByte 7 = pulse 8;OutByte 8 = pulse;OutByte 9 = mode;OutByte 10 = OutByte 1 + OutByte 2 + OutByte 3 + OutByte 4 + OutByte 5 + OutByte 6 + OutByte 7 + OutByte 8 + OutByte 9;USRAT_transmit
17、(OutByte, 11);receive (inbuf);return 1;/ *名 名: wait_delay数 : 等待 延时 数参数 :cardno卡号value 延时量(1-10000)MS返回值:0 失败1 成功*/unsigned char wait_delay(unsigned char cardno ,unsigned int value)无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x6;OutByte2 = 卡号;输出字节3 = 0 xE;OutByte4 = 值 8;OutByte5 = 值;OutByte6 =Ou
18、tByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5;USRAT_transmit(OutByte,7);接收(inbuf);返回 1;/*函数名: set_command_pos功能:设置轴逻辑位置范围:卡诺卡号轴轴号 (1-6)脉冲位置脉冲数,圆周(-268435455+268435455)返回值:0 失败1 成功*/unsigned char set_command_pos(unsigned char cardno ,unsigned char axis, long value )无符号字符输出字节25;无符号字符 inbuf12;输出字节0 =
19、0 x68;输出字节1 = 0 x9;OutByte2 = 卡号;输出字节3 = 0 x12;OutByte4 = 轴;OutByte5 = 值 24;OutByte6 = 值 16;OutByte7 = 值 8;OutByte8 = 值;OutByte9 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);接收(inbuf);返回 1;/*函数名称:wait_pulse功能:等待轴脉冲数范围:卡诺卡号轴轴号 (1-6)脉冲位置脉冲
20、数,圆周(-268435455+268435455)返回值:0 失败1 成功*/unsigned char wait_pulse(unsigned char cardno ,unsigned char 轴, long value )无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x9;OutByte2 = 卡号;输出字节3 = 0 x19;OutByte4 = 轴;OutByte5 = 值 24;OutByte6 = 值 16;OutByte7 = 值 8;OutByte8 = 值;OutByte9 =OutByte1 +OutByte2 +
21、OutByte3 +OutByte4 +OutByte5 +OutByte6 +OutByte7 +OutByte8 ;USRAT_transmit(OutByte,10);接收(inbuf);返回 1;/*函数名:write_bit功能:写输出端口状态范围:卡诺卡号number 端口号 (0-8) Y0-Y8value state (0,1) 0 输出低电平 1 输出高电平返回值:0 失败1 成功*/unsigned char write_bit(unsigned char cardno, unsigned char number, unsigned char value)无符号字符输出字节
22、25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x6;OutByte2 = 卡号;输出字节3 = 3 ;OutByte4 = 数字;OutByte5 = 值;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5 ;USRAT_transmit(OutByte,7);接收(inbuf);返回 1;/*函数名称:突然停止功能:轴停止范围:卡诺卡号轴停止轴号(1-6)返回值:0 失败1 成功*/无符号字符突然停止(无符号字符卡号,无符号字符轴)无符号字符输出字节25;无符号字符 inbuf12;输出字节
23、0 = 0 x68;输出字节1 = 0 x5;OutByte2 = 卡号;输出字节3 = 0 x17;OutByte4 = 轴;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4 ;USRAT_transmit(OutByte,6);接收(inbuf);返回 1;/*函数名:wait_in功能:等待输入端口状态范围:卡诺卡号number 端口号 (0-6) X0-X6值状态 (0,1) 0 输入低电平 1 输入高电平返回值:0 失败1 成功*/unsigned char wait_in(unsigned char cardno, unsigned
24、char number, unsigned char value)无符号字符输出字节25;unsigned char inbuf12;OutByte0 = 0 x68 ;OutByte1 = 0 x6 ;OutByte2 = cardno;OutByte3 = 0 xF ;OutByte4 = number ;OutByte5 = value;OutByte6 =OutByte1 +OutByte2 +OutByte3 +OutByte4 +OutByte5;USRAT_transmit(OutByte,7);receive(inbuf);return 1;/*函数名: wait_stop功能
25、:等待轴停止参数:cardno 卡号axis The axis number that needs to be stoppedreturn value:0 failure 1 success*/unsigned char wait_stop(unsigned char cardno ,unsigned char 轴)无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x5;OutByte2 = 卡号;输出字节3 = 9 ;OutByte4 = 轴;OutByte5 =OutByte1 +OutByte2 +OutByte3 +OutByte4;U
26、SRAT_transmit(OutByte,6);接收(inbuf);返回 1;/*函数名:get_number功能:获取唯一序列号范围:卡诺卡号返回值:32位序列号*/unsigned long get_number(unsigned char cardno)无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x4;OutByte2 = 卡号;输出字节3 = 0 xC ;OutByte4 =OutByte1 +OutByte2 +OutByte3 ;USRAT_transmit(OutByte,5);接收(inbuf);返回 (unsigned
27、 long)inbuf424+(unsigned long)inbuf516+(unsigned long)inbuf68+(unsigned long)inbuf7;/*函数名称:get_status功能:获取各轴的工作状态范围:卡诺卡号返回值:8位二进制,1-6位分别代表1-6轴的状态,0表示停止,1表示运行。*/unsigned char get_status(unsigned char cardno)无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x4;OutByte2 = 卡号;输出字节3 = 5 ;OutByte4 =OutByt
28、e1 +OutByte2 +OutByte3 ;USRAT_transmit(OutByte,5);接收(inbuf);返回 inbuf4;/*函数名:get_command_pos功能:获取坐标轴逻辑位置范围:卡诺卡号轴轴数返回值:位置脉冲数,范围(-268435455+268435455)*/unsigned long get_command_pos(unsigned char cardno, unsigned char axis)无符号字符输出字节25;无符号字符 inbuf12;输出字节0 = 0 x68;输出字节1 = 0 x5;OutByte2 = 卡号;输出字节3 = 6 ;OutB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit4 My favorite subject Section A 2a-2f 教学设计2024-2025学年人教版英语七年级上册
- 23纸船和风筝 教学设计-2024-2025学年语文二年级上册统编版
- 名校联盟浙江省温州市瓯海区实验中学八年级社会下册教学设计(42份)
- 2024年一年级品生下册《我和小树交朋友》教学设计 山东版
- 2024年五年级英语下册 Unit 1 Were going to read stories第3课时教学设计 湘少版
- 2023七年级数学下册 第八章 二元一次方程组8.3 实际问题与二元一次方程组第1课时 实际问题与二元一次方程组(1)教学设计 (新版)新人教版
- 2024秋八年级英语上册 Unit 2 How often do you exercise Section B (2a-2e)教学设计(新版)人教新目标版
- 2024秋四年级英语上册 Module 9 Unit 1 Are you going to run on sports day教学设计 外研版(三起)
- 移动客户经理年终工作总结
- 《我的立体名片》(教学设计)-2024-2025学年沪教版(2024)美术一年级上册
- 骨折病人的中医饮食护理
- 小学生理性消费课件
- 内蒙古科技馆新馆展陈创新方案
- 村级公墓规划设计方案
- 山东省济南市(2024年-2025年小学六年级语文)统编版小升初真题(下学期)试卷及答案
- 大模型原理与技术-课件 chap6 大模型微调
- 单层轻钢结构施工方案
- 深度学习及自动驾驶应用 课件 第9、10章 生成对抗网络及自动驾驶应用、强化学习理论及自动驾驶应用实践
- 拼多多在线测评98道题
- 中国国新基金管理有限公司招聘笔试题库2024
- 环境监测站运行管理与质量控制标准
评论
0/150
提交评论