单片机六自由度机械手控制程序
- 格式:doc
- 大小:22.00 KB
- 文档页数:10
基于TMS320F2812的六自由度机械手控制实验目的:研究六自由度的机械手控制原理和机械手的路径规划掌握DSP芯片的最小系统设计、程序编写和熟悉CCS3.3开发环境以及protel99se开发环境。
实验要求:一:控制器选取、最小外围系统制作(制版)二:机械手设计三:机械手舵机驱动设计实验过程:首先考虑控制能力、PWM接口,其次考虑控制器价格最后考虑控制器可操作度本实验采用TI公司的TMS320F2812PGFA控制器,该款控制器为TI公司的主要用于控制领域的控制器,控制器有16路PWM信号输出其中12路为比较计数器输出,4路为定时器/计数器产生接下来便是DSP最小外围系统的设计。
TMS320F2812是美国TI公司推出的新一代32位定点数字信号处理器,该芯片每秒可执行1.5亿次指令,具有单周期32 bit×32 bit的乘和累加操作功能,片内集成了丰富的外围设备,如16路A/D转换器、面向电机控制的事件管理器以及多种标准串口通信外设等[1]。
可见,其不仅具有数字信号处理器卓越的数据处理能力,又像单片机那样具有适于控制的片内外设及接口;它在数字控制系统中有着广泛的应用,特别是在运动控制领域以及嵌入式开发系统设计中,常常成为微处理器的首选。
DSP最小应用系统设计一般包括硬件设计和调试部分。
硬件设计部分一般包括电源、复位电路、时钟电路、JTAG电路和外部接口电路的设计;最小系统板作为 DSP 控制系统的核心部件,在其外围接入扩展板,能够使系统实现相应的功能。
本文基于TMS320F2812设计的DSP 最小应用系统,不仅可以作为学习 DSP系统的基础,同时对与DSP有关的科研实验以及工业控制领域也有着重要的应用价值。
最小外围系统的设计原理图如图所示:舵机驱动电路如下:通过调节上图的滑动变阻器便可改变输出电压的大小。
硬件设计完之后便是程序设计,实验代码如下:#include "DSP28_Device.h"# define y 1000 // DSP281x Headerfile Include Filevoid init_eva(void);void init_evb(void);void delay(int i);void main(void){int k;InitSysCtrl();// InitGpio(); 配置IO口功能为PWM模式EALLOW;GpioMuxRegs.GPAMUX.all = 0x00FF;EDIS;DINT; //关CPU总中断 InitPieCtrl(); //初始化PIE控制寄存器IER = 0x0000;IFR = 0x0000;InitPieVectTable(); //初始化PIE中断向量表 init_eva(); //初始化EV-A EvaRegs.T1CON.bit.TENABLE=1; //手工启动定时器 T1CON:定时器控制寄存器init_evb();EvbRegs.T3CON.bit.TENABLE=1;EINT; // 使能INTM(全局中断)ERTM; // Enable Global realtime interrupt DBGMfor(;;){delay(y);for(k=0;k<50;k++){//EvaRegs.CMPR1 = 41383;EvaRegs.CMPR2 = 41383;EvaRegs.CMPR3 = 44950;EvbRegs.CMPR4 = 41950;}delay(y);for(k=0;k<50;k++){// EvaRegs.CMPR1=42383;EvaRegs.CMPR2 = 42383;EvaRegs.CMPR3 = 44650;EvbRegs.CMPR4 = 42950;}delay(y);for(k=0;k<50;k++){EvaRegs.CMPR1=43200;//机械手合上 EvaRegs.CMPR2 = 43383;EvaRegs.CMPR3 = 44650;EvbRegs.CMPR4 = 43950;}delay(y);for(k=0;k<50;k++){EvaRegs.CMPR1=44383;EvaRegs.CMPR2 = 44383;EvaRegs.CMPR3 = 44650;EvbRegs.CMPR4 = 44950;}delay(y);for(k=0;k<50;k++){EvaRegs.CMPR1=45000;//机械手张开最大 EvaRegs.CMPR2 = 45500;EvaRegs.CMPR3 = 44650;}}}//EV-A初始化void init_eva(void){EvaRegs.T1PR = 46900; //周期值--连续增减时,PWM频率=TCLK/(2*T1PR)---频率设为1K, PWM=75M/(2*37500)EvaRegs.T1CMPR = 15360; // Compare Reg--比较值EvaRegs.T1CNT = 0; //计数器初值//连续增/减模式,x/1分频,内部时钟,使能比较,使用自己的周期,禁止定时器启动(等初始化全部完成后手工启动)EvaRegs.T1CON.all = 0x0C02;EvaRegs.GPTCONA.bit.TCMPOE = 1; //通过逻辑产生T1 PWMEvaRegs.GPTCONA.bit.T1PIN = 1; //GP定时器1比较时低有效//使能比较产生1--6 PWM波 1个比较单元控制2路互补的PWM输出,控制PWM占空比//连续增减--低有效时:PWM占空比=CMPR1/T1PR,高有效时:PWM占空比=(T1PR-CMPR1)/T1PREvaRegs.CMPR1 = 45500; //第一路PWM 占空比设为0.4,0.4=15000/37500EvaRegs.CMPR2 = 42383;EvaRegs.CMPR3 = 44650;// output pin 1 CMPR1 - 高有效,output pin 2 CMPR1 - 低有效// output pin 3 CMPR2 - 高有效,output pin 4 CMPR2 - 低有效// output pin 5 CMPR3 - 高有效,output pin 6 CMPR3 - 低有效EvaRegs.ACTRA.all = 0x066A; //比较方式控制寄存器,控制PWM引脚的高/低有效EvaRegs.DBTCONA.all = 0x0000; //静止死区CONA.all = 0xA600; //比较控制寄存器--禁止空间矢量PWM模式}void init_evb(void){EvbRegs.T3PR=46900;EvbRegs.T3CMPR=15360;EvbRegs.T3CNT=0;EvbRegs.T3CON.all=0X0C02;EvbRegs.GPTCONB.bit.TCMPOE = 1;EvbRegs.GPTCONB.bit.T3PIN = 1;EvbRegs.CMPR4 = 45500; //第一路PWM 占空比设为0.4,0.4=15000/37500EvbRegs.CMPR5 = 42383;EvbRegs.CMPR6 = 44650;EvbRegs.ACTRB.all = 0x066A; //比较方式控制寄存器,控制PWM引脚的高/低有效EvbRegs.DBTCONB.all = 0x0000; //静止死区CONB.all = 0xA600; //比较控制寄存器--禁止空间矢量PWM模式}void delay(int i){for(i;i>0;i--){int j=10000;while(j--);}}程序运行如下图所示:实验心得:通过本实验进一步了解了舵机控制的原理以及DSP 芯片最小外围系统的设计,在实验中也遇到了很多的困难,比如说DSP芯片的程序烧不进去,程序中的各个寄存器的配置等,但在老师的帮助下最终解决了该问题,在以后的学习中应该好好的总结,应该多多向他人请教。
六自由度平台控制流程
一、设计阶段
1.确定平台运动范围
(1)确定平台的工作空间尺寸
(2)确定平台的最大移动范围
2.选择控制系统
(1)确定控制系统的类型
(2)选择适合的控制器
二、运动学建模
1.建立平台的运动学模型
(1)确定平台的坐标系
(2)建立运动学方程
2.运动学分析
(1)分析平台的各个自由度运动关系
(2)计算各关节的运动学参数
三、控制器设计
1.PID控制器设计
(1)确定PID控制器参数
(2)进行闭环控制设计
2.轨迹规划
(1)设计平台的运动轨迹
(2)确定平台的运动速度和加速度
四、软硬件实现
1.编写控制程序
(1)使用编程语言编写控制算法(2)软件实现运动控制
2.硬件连接
(1)连接传感器和执行器
(2)配置控制器和驱动器
五、系统调试
1.运动测试
(1)进行平台的手动控制测试
(2)检查各个自由度的运动是否正常2.控制效果验证
(1)进行自动控制测试
(2)验证控制效果和精度
六、性能优化
1.参数调整
(1)调整控制器参数
(2)优化控制算法
2.系统稳定性分析
(1)进行系统稳定性分析(2)确保平台运动稳定可靠。
基于AVR单片机6自由度示教机械手控制系统设计
刘向宇;徐聪;韩文杰;王正初;李绣峰;方绿茵;孙建
【期刊名称】《机电产品开发与创新》
【年(卷),期】2017(30)1
【摘要】针对机械手现有技术存在的问题,设计了一种操作简便且适用范围广的控制系统.介绍了机械手的特点和用途、6自由度气动机械手的结构和主要功能,详细阐述了以AVR单片机为核心的控制系统硬件电路和系统的结构框图,同时介绍了系统的软件的设计方法和详细实现过程.经调试运行证明,该控制系统是有效可行的.【总页数】2页(P90-91)
【作者】刘向宇;徐聪;韩文杰;王正初;李绣峰;方绿茵;孙建
【作者单位】台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000;台州学院机械工程学院,浙江台州318000
【正文语种】中文
【中图分类】TP2412;TP138
【相关文献】
1.基于S7-200PLC的二自由度气动绢花拾取机械手控制系统设计 [J], 李海祯;于复生;范国隆;国海芝;张佳丽
2.基于PLC的机械手示教控制系统设计 [J], 何英;霍罡;付新生;吴向阳
3.基于PLC的六自由度机械手控制系统设计 [J], 朱娟娟;张爱民
4.基于单片机的六自由度机械手臂控制系统设计 [J], 陈心怡;张春雨;朱丽华
5.基于PLC的四自由度气动机械手控制系统设计研究 [J], 周晓娟;台畅
因版权原因,仅展示原文概要,查看原文内容请购买。
利用单片机MSP430作为控制核心实现六自由度自动
寻迹机械人的设计
本系统为单片机的寻迹机器人系统,主要应用单片机MSP430作为控制核心,直流电机、舵机、一体红外接收头等相结合的系统。
这个系统软硬件设计简单,易于开发,严格控制各种元件的采购成本,所以价格低廉,安全可靠,操作方便。
1 系统原理
1.1 自动寻迹模块的系统原理
本设计中自动寻迹模块主要由单片机及其外同电路、红外寻迹电路、直流电机控制电路等组成。
正常工作时,单片机循环检测红外寻迹电路输出信号,据此产生直流电机控制信号,当系统检测到工作方式发生改变时,系统进入相应方式。
其原理框图如图1、图2所示。
图1 自动寻迹模块原理框图
图2 自动寻迹模块原理框图。
本文以示教型六自由度串联机械手为试验设备,进行机械手的复杂运动控制,使机械手完成各种复杂轨迹的运动控制等功能,能够在现代工业焊接、喷漆等方面的任务。
本文从运动学分析的基础上着手研究轨迹控制的问题,利用运动学逆解的方式分析复杂轨迹运动的可行性和实用性。
目前,六自由度机械手的复杂运动控制已经有了比较好的逆解算法,也有一些针对欠自由度机械手的逆解算法。
逆解算法求出的解不是唯一的,它能使机械手达到更多位姿,完成大部分的原计划任务,但其中的一些解并不是最优化的,因此必须讨论其反解的存在性和唯一性。
本文通过建立机械手的笛卡尔坐标系,推导出机械手的正、逆运动学矩阵方程,并研究了正、逆运动学方程的解;在此基础上建立机械手的工作空间,并讨论其工作空间的灵活性和存在可能性。
因此本文的另一种方式对六自由度串联机械手的复杂运动控制问题进行研究,提出以机械手示教手柄引导末端执行器对复杂运动轨迹进行预设计。
然后通过记录程序进行复杂轨迹的再实现,再对记录程序进行预修改,最终通过现有的程序进行设计编程完成复杂轨迹设计任务。
并利用MATLAB对轨迹进行仿真,对比其实际与计算的正确性。
最后本设计通过六自由度串联机械手实现平面文字轨迹,得出其设计的方式。
即首先利用示教手柄实现轨迹预设,记录预设轨迹程序,然后再对比程序初始化坐标进行手动编程。
关键词:六自由度机械手,笛卡尔坐标系,运动学方程,仿真,示教手柄ABSTRACTIn this paper, mechanical hand control the complex movement based on the series of six degrees of freedom manipulator so that the mechanical hand complete the complex trajectory of the movement control functions. In modern industrial welding, painting, and other aspects of the mandate can be used.This article based on the analysis of kinematics to study the trajectory control problems, use of inverse kinematics of the complex mode of tracking movement of the feasibility and practicality. At present, the six degrees of freedom manipulator complex movement has been relatively good control of the inverse algorithm.There are also some less freedom for the inverse of the manipulator algorithm. Solutions sought by inverse algorithm is not the only solution, it can reach more manipulator Pose, originally planned to complete most of the task.But some of these solutions is not the most optimal, it is necessary to discuss their anti-the existence of solutions and uniqueness.Through the establishment of the manipulator Cartesian coordinates, derived manipulator is the inverse kinematics matrix equation and the study is the inverse kinematics of the equation solution on the basis of this establishment manipulator working space. And discuss their work space The flexibility and the possibility exists.So in another way to the six degrees of freedom series manipulator motion control the complex issues of research, to handle the machinery Shoushi guide for the implementation of the end of the complex pre-designed trajectory. Then track record of the complicated procedure to achieve, and then record the pre-amended procedures.The eventual adoption of the existing procedures designed trajectory design of complex programming tasks. And using MATLAB simulation of the track, compared with its actual calculation is correct.The final design through six degrees of freedom series manipulator track to achieve flat text, draw their design approach. That is, first of all use of teaching handle achieve trajectory default the track record of default procedures, and then compared to manual procedures initialized coordinate programming.key words:Six degree-of-freedom manipulators,Cartesian coordinates,Equations of motion,Simulation,Demonstration handle.绪论 (1)课题研究背景和意义 (1)国内外研究状况 (2)六自由度机械手复杂运动控制的现实意义 (4)课题的提出 (5)本课题研究的主要内容 (5)串联机器人运动学 (7)2.1 机器人运动学方程的表示 (7)2.1.1 运动姿态和方向角 (8)2.1.2 运动位置和坐标 (9)2.1.3 连杆变换矩阵及其乘和 (12)2.2 机械手运动方程的求解 (15)2.2.1 欧拉变换解 (16)2.2.2 滚、仰、偏变换解 (20)2.2.3 球面变换解 (21)2.3 反解的存在性和唯一性 (23)2.3.1 反解的存在性和工作空间 (23)2.3.2 反解的唯一性和最优解 (24)2.3.3 求解方法 (25)六自由度机械手的平面复杂轨迹设计及运动学分析 (27)3.1 系统描述及机械手运动轨迹设计方式 (27)3.1.1 机器人技术参数一览表 (27)3.1.2 机器人控制系统软件的主界面 (27)3.1.3 机器人各部位和动作轴名称 (28)3.1.4 机械手运动轨迹设计方式 (29)3.2 平面复杂轨迹设计目的 (33)3.2.1“西”字的轨迹设计和分析 (33)3.2.2“南”字的轨迹设计和分析 (34)3.2.3机械手的起始位姿和末态位姿 (35)3.3机械手轨迹设计中坐标系的建立 (35)3.4 平面轨迹设计的正运动学分析 (43)3.4.1平面轨迹设计的正运动学分析原理 (43)3.4.2 正运动学分析步骤及计算 (44)3.5 平面轨迹设计的逆运动学分析 (45)3.5.1 平面轨迹设计的逆运动学分析原理 (45)3.5.2.逆运动学分析步骤及计算 (46)设计实现过程和MA TLAB仿真计算 (50)4.1 设计实现过程 (50)4.2 MA TLAB仿真计算 (53)结论与展望 (57)5.1 结论 (57)5.2 展望 (58)致谢 (59)参考文献 (60)第一章绪论1.1 课题研究背景和意义在现代制造行业中,先进的制造技术不断的代替传统的加工方法和操作方式。
6自由度机械手的算法介绍6自由度机械手是一种具有6个自由度的机械臂,可以在空间中完成复杂的运动任务。
为了实现机械手的精确控制和运动规划,需要使用一系列算法来实现。
本文将探讨6自由度机械手的算法,包括逆运动学、正运动学、轨迹规划等。
逆运动学逆运动学是指已知机械手末端位置和姿态,计算出各个关节角度的过程。
对于6自由度机械手而言,逆运动学问题是一个复杂的数学问题。
以下是逆运动学算法的基本步骤:1.确定机械手的DH参数,包括关节长度、关节偏移、关节旋转角度等。
2.根据机械手的DH参数,构建正运动学方程,即末端位置和关节角度的关系。
3.根据末端位置和姿态,求解正运动学方程,得到关节角度的解。
4.对于多解的情况,选择最优解,例如使关节角度变化最小或满足特定约束条件的解。
正运动学正运动学是指已知机械手各个关节角度,计算出末端位置和姿态的过程。
对于6自由度机械手而言,正运动学问题相对简单,可以通过矩阵变换来实现。
以下是正运动学算法的基本步骤:1.确定机械手的DH参数。
2.根据机械手的DH参数,构建正运动学方程,即关节角度和末端位置的关系。
3.根据关节角度,求解正运动学方程,得到末端位置的解。
轨迹规划轨迹规划是指在给定起始位置和目标位置的情况下,确定机械手的运动路径和速度的过程。
对于6自由度机械手而言,轨迹规划需要考虑运动的平滑性和避免碰撞等因素。
以下是轨迹规划算法的基本步骤:1.确定起始位置和目标位置。
2.根据起始位置和目标位置,计算出机械手的途径点和运动方向。
3.根据途径点和运动方向,生成平滑的运动路径。
4.考虑机械手的运动速度和加速度,生成合适的速度曲线。
5.考虑碰撞检测,避免机械手和其他物体的碰撞。
动力学建模动力学建模是指根据机械手的结构和参数,建立机械手的运动学和动力学模型的过程。
对于6自由度机械手而言,动力学建模需要考虑关节间的耦合效应和惯性等因素。
以下是动力学建模的基本步骤:1.确定机械手的质量、惯性等参数。
六轴机械手nc编程摘要:1.六轴机械手简介2.六轴机械手NC 编程基本概念3.六轴机械手NC 编程流程4.六轴机械手NC 编程实例分析5.六轴机械手NC 编程在工业领域的应用及前景正文:随着科技的不断发展,自动化生产已成为我国制造业的主流趋势。
六轴机械手作为一种广泛应用于工业生产中的自动化设备,其NC 编程技术越来越受到业界的关注。
本文将为您详细介绍六轴机械手NC 编程的相关知识。
1.六轴机械手简介六轴机械手,又称为六自由度机械手,是一种具有六个独立运动轴的自动化设备。
它具有高度的灵活性和精确性,可以执行各种复杂的抓取、搬运、装配等任务。
六轴机械手的核心部分是控制系统,而NC 编程则是控制系统中的关键环节。
2.六轴机械手NC 编程基本概念C 编程,即数控编程,是一种通过计算机来控制机床或设备进行加工的编程方式。
在六轴机械手中,NC 编程主要用于控制机械手末端执行器的运动轨迹,以实现所需任务。
六轴机械手NC 编程主要涉及到以下几个方面:- 坐标系:用于描述机械手各轴的运动范围和位置关系。
- 运动指令:用于描述机械手各轴的运动方式,如平移、旋转等。
- 速度和加速度:用于描述机械手运动的快慢和加速度限制。
- 安全保护:用于确保机械手在运动过程中不会发生碰撞,保证安全。
3.六轴机械手NC 编程流程六轴机械手NC 编程流程主要包括以下几个步骤:- 建立坐标系:根据机械手的结构和运动范围,建立合适的坐标系。
- 规划运动轨迹:根据任务需求,规划机械手末端执行器的运动轨迹。
- 编写NC 程序:根据运动轨迹,编写相应的NC 程序。
- 仿真与调试:对NC 程序进行仿真,观察其运动过程是否满足任务要求,如有需要进行调试。
- 下载与执行:将编写好的NC 程序下载到机械手控制器中,执行加工任务。
4.六轴机械手NC 编程实例分析以一个简单的六轴机械手抓取任务为例,首先需要建立以机械手基座为原点的坐标系,然后规划出从初始位置到目标位置的运动轨迹。
6自由度控制算法在机器人控制与运动规划中,6自由度(6DoF)控制算法是一种常用的方法。
这种算法可以实现对机械臂或机器人的六个自由度进行精确控制,使其在三维空间内能够实现各种复杂的运动轨迹和任务。
6自由度控制算法的核心思想是:通过对机械臂的关节角度进行精确控制,从而实现末端执行器的运动。
一般来说,典型的6自由度机械臂由6个关节组成,每个关节可以控制一个自由度。
常见的机械臂有工业机械臂、服务机器人臂等。
实现6自由度控制的算法可以分为两个主要步骤:逆运动学求解和控制器设计。
逆运动学求解是根据机械臂的末端位姿(位置和姿态),确定关节角度以实现期望运动。
控制器设计是针对不同的任务需求,设计合适的控制策略以保证机械臂的精确控制和稳定性。
在逆运动学求解方面,一种常用的方法是使用解析解法。
对于六自由度的机械臂,可以通过对正运动学方程求逆,从而得到关节角度与末端位姿之间的映射关系。
一般来说,这种方法可以快速计算出关节角度,但对于一些特殊情况(例如奇异构型)可能无法求解解析解,需要使用数值解法来求解逆运动学问题。
在控制器设计方面,常见的方法包括PID控制、基于模型的控制(如轨迹跟踪控制、力/力矩控制)和基于反馈线性化的控制等。
PID控制是一种经典的控制策略,通过调节比例、积分和微分参数,实现机械臂位置和速度的精确控制。
基于模型的控制方法利用机械臂的动力学模型,通过预测机械臂的运动轨迹或实施力/力矩控制来实现精确控制。
而基于反馈线性化的控制方法,则通过设计非线性转换器和线性控制器,将非线性动力学系统转化为线性系统,从而实现控制目标。
除了逆运动学求解和控制器设计,6自由度控制算法还需要考虑如传感器选取与数据融合、路径规划、碰撞检测和碰撞回避等问题。
传感器可以提供机械臂的姿态和位姿信息,用于控制系统的反馈;数据融合则将多个传感器的信息进行整合,提高机械臂的感知能力。
路径规划是将机械臂的运动轨迹优化为最佳路径,以提高运动效率和精确度。
六自由度关节式机器人控制系统开发六自由度关节式机器人控制系统开发随着科技的不断进步和人工智能的发展,机器人在各个领域的应用越来越广泛。
其中,六自由度关节式机器人凭借其优越的操作能力和灵活性,正逐渐成为工业自动化、医疗护理、教育培训等领域中不可或缺的一部分。
本文将结合相关技术,介绍六自由度关节式机器人控制系统开发的过程和挑战。
一、六自由度关节式机器人控制系统概述六自由度关节式机器人是指具有六个自由度(前后移动、左右移动、上下移动、绕Z轴旋转、绕Y轴旋转、绕X轴旋转)的机器人,可以实现复杂的动作。
控制系统是机器人正常运行的关键,它包括硬件构架、传感器、控制算法等组成部分。
二、硬件构架六自由度关节式机器人的硬件构架主要包括电机、减速器、关节、传感器等。
电机负责驱动机器人的运动,减速器用于减小电机的转速并提高输出力矩,关节使机器人能够按照设定轨迹进行运动,传感器则用于感知外部环境和机器人运动状态。
三、传感器传感器对于机器人控制系统非常重要,它能够获取机器人周围环境和机器人自身状态的数据,并将其传输给控制系统进行处理。
常见的传感器包括视觉传感器、力传感器、惯性测量单元等。
视觉传感器能够识别和跟踪目标,力传感器可以感知机器人与外部物体的交互力,惯性测量单元可以测量机器人的加速度、角速度等。
四、控制算法控制算法是六自由度关节式机器人控制系统的核心部分,它决定了机器人执行动作的精确度和鲁棒性。
常用的控制算法包括PID控制、模糊控制、神经网络控制等。
PID控制是一种经典的控制算法,通过调整比例、积分、微分三个参数来使机器人运动稳定。
模糊控制是一种基于模糊逻辑的控制方法,可以处理不确定性和模糊性的问题。
神经网络控制是利用人工神经网络模拟人脑神经元的工作原理进行控制,具有较强的自适应性和学习能力。
五、控制系统开发流程控制系统开发过程一般包括需求分析、系统设计、软硬件开发、测试调试等环节。
首先,需要明确机器人的功能需求和性能指标,确定控制系统的硬件和软件设计方案。
六自由度机械手程序使用手册
为了使六自由度机械手能够进行运动,我们将对机械手进行逐个的电机运动,确认接线是正确的;然后通过运动程序控制铁机械手的各种动作。
在本章节使用的所有的程序能够从德普施公司得到技术支持。
如果需要Keil编辑器和使用方法,请参照《Keil》的使用说明。
电机运动测试:
运行《电机测试》程序,将得到的电机运行.hex 文件烧入到芯片中,确认所有连线,观察机械手的运动情况。
机械手的运动应该是从上到下依次进行运动,如果看到此动作,说明机械手的机械安装和电机安装正确。
夹取物体:
运行《夹取物体》程序,将得到的hand.hex 文件烧入到芯片中,运行程序,可以看到机械手的动作是将物体从左边夹取到右边。
用户可根据实际情况调整电机的运动位置达到实际应用的目的。
注:连接C51教学主板和PSC板是通过P1.2口。
单片机六自由度机械手控制程序
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
#define uint unsigned int #define uchar unsigned char #define COM1 XBYTE[0x5800] #define C01 XBYTE[0x4000] #define C11 XBYTE[0x4800]
#define C21 XBYTE[0x5000] #define COM2 XBYTE[0x3800] #define C02 XBYTE[0x2000] #define C12 XBYTE[0x2800] #define C22 XBYTE[0x3000] sbit k1=P3^2;//电机复位按钮
sbit k2=P3^3;//电机选择按钮
sbit k3=P3^4;//电机正转
sbit k4=P3^5;//电机反转
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
uint m=0,i=0;
void reservo();
void lcd(uint i);
void timer(uint n);
void delay(uint n);
void lcd_init();
void lcd_wcom(uchar com); void lcd_wdat(uchar dat); void
lcd_wndat(uint dat); void delay(uint n);
void init(void);
void EXT1_INT(void)
{ EX1=1;
IT1=1;
EA=1;
}
void EXT0_INT()
{ EX0=1;
IT0=1;
EA=1;
}
void EXT1_INT_SRV() interrupt 2 {
i++;
}
//主程序
void main() {
while(1)
{if(k1==0)
{reservo();//电机复位程序break;}
}
EXT1_INT();//中断初始化
if(i!=0&&i%6==0)
i=6;
else
i=i%6;
lcd(i);
timer(i);
}
//电机复位程序
void reservo() {
EXT0_INT();
delay(200); }
void EXT0_INT_SRV() interrupt 0 {
TMOD=0x01;
TH0=0xB1;
TL0=0xE0;
ET0=1;
EA=1;
TR0=1;
COM1=0x30;
C01=0xdc; C01=0x05;
COM1=0x70;
C11=0xdc; C11=0x05;
COM1=0xB0;
C21=0xdc; C21=0X05;
COM2=0x30;
C02=0xdc; C02=0x05;
COM2=0x70;
C12=0xdc; C12=0x05;
COM2=0xB0;
C22=0xdc; C22=0X05; }
//显示屏程序
void lcd(uint i)
{ uint n;
uchar code table[]="servo"; lcd_init();
lcd_wcom(0x80);
for(n=0;n<16;n++)
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x07); switch(i) {
case 1: lcd_wndat(1);
delay(200);
break;
case 2: lcd_wndat(2);
delay(200);
break;
case 3: lcd_wndat(3);
delay(200);
break;
case 4: lcd_wndat(4);
delay(200);
break;
case 5: lcd_wndat(5);
delay(200);
break;
case 6: lcd_wndat(6);
delay(200);
}
}
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)//1602写命令程序 { rs=0;
rw=0;
P0=com;
delay(5);
en=1;
en=0;
}
void lcd_wdat(uchar dat)//1602写数据程序 { rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_wndat(uint dat)//1602写数据程序 { rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_init() {
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01); } //舵机程序
void timer(uint n) {
init();
uint n;
for(n=1;n<=10;n++) {if(k3==0) servozheng();
else
break;
}
n=1;
for(;n<=10;n++) {if(k4==0)
void servofan();} }
void init(void) {
TMOD=0x01;
TH0=0xB1;
TL0=0xE0;
ET0=1;
EA=1;
TR0=1;
}
void servozheng() interrupt 1 {
TH0=0xB1;
TL0=0xE0;
switch(i)
{
case1: com1=0x30;
c01=0x(dc+64*n); c01=0x05; break;
case2: com1=0x70;
c11=0x(dc+64*n); c11=0x05; break;
case3: com1=0xB0;
c21=0x(dc+64*n); c21=0x05; break;
case4: com1=0x30;
c02=0x(dc+64*n); c02=0x05; break;
case5: com1=0x70;
c12=0x(dc+64*n); c12=0x05; break;
case6: com1=0xB0;
c22=0x(dc+64*n); c22=0x05; }
}
void servofan() interrupt 1 {
TH0=0xB1;
TL0=0xE0;
switch(i)
{
case1: com1=0x30;
c01=0x(dc-64*n); c01=0x05; break;
case2: com1=0x70;
c11=0x(dc-64*n); c11=0x05; break;
case3: com1=0xB0;
c21=0x(dc-64*n); c21=0x05; break;
case4: com1=0x30;
c02=0x(dc-64*n); c02=0x05; break;
case5: com1=0x70;
c12=0x(dc-64*n); c12=0x05; break;
case6: com1=0xB0;
c22=0x(dc-64*n); c22=0x05; }
}。