51单片机控制五自由度机械手臂源程序

合集下载

应用单片机进行多自由度机械臂控制系统设计

应用单片机进行多自由度机械臂控制系统设计

应用单片机进行多自由度机械臂控制系统设计作者:王晴来源:《江苏理工学院学报》2018年第02期摘要:机器人(臂)是机械技术、电子技术和信息技术有机结合的产物。

机械臂的优点众多,其中最为显著的是其精确性和高效性。

而要实现这些优点,作为机械臂的大脑——机械臂的控制系统则显得尤为重要,拌随着微电子技术的日趋成熟和控制方法的不断改进,以单片机作为控制系统也变得更为简单和方便。

介绍了基于单片机(STC12C5A60S2)采用脉冲调制技术(PWM)控制舵机达到控制多自由机械臂,工作原理以及控制系统的设计(包括硬件电路设计和C语言进行软件设计),为今后开发更加复杂且功能更为强大的现代机械臂奠定了基础。

关键词:单片机;机械臂;控制系统中图分类号:TP241.2 文献标识码: A 文章编号:2095-7394(2018)02-0060-04近年来,随着人工智能技术、数字化制造技术与移动互联网之间创新融合步伐的不断加快,发达国家纷纷做出战略部署,抢占机器人产业制高点。

机器人(臂)是机械技术、电子技术和信息技术有机结合的产物,在现代工业的基础上,综合应用机械技术、微电子技术、信息技术、自动控制技术、传感测试技术、电力电子技术、接口技术、软件编程技术以及人体仿生学技术等群体技术实现高功能、高质量、高精度、高可靠性、低能耗等诸方面实现多种技术功能复合的最佳功能价值系统工程技术的产物。

它是应用于工业领域的多关节机械手或多自由度的机械装置,能自动执行工作,靠自身动力和控制能力来实现设计功能的装置。

它既可接受人类指挥,也可按照预先编排的指令程序运行,先进的工业机器人能够根据人工智能技术制定的原则纲领行动。

1 80C51单片机单片机[1]是一种集成在一块电路芯片上的完整计算机系统,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

本科毕业论文-基于单片机的多自由度机械手臂控制器设计解析

本科毕业论文-基于单片机的多自由度机械手臂控制器设计解析

唐山学院毕业设计设计题目:基于单片机的多自由度机械手臂控制器设计系别:信息工程系班级:11电气工程及其自动化3班姓名:刘亮指导教师:田红霞2015年6月1日基于单片机的多自由度机械手臂控制器设计摘要机械臂控制器作为机械臂的大脑,对于它的研究有着十分重要的意义。

随着微电子技术和控制方法的不断进步,以单片机作为控制器的控制系统越来越成熟。

本课题正是基于单片机的机械臂控制系统的研究。

本文首先介绍了国内外机械臂发展状况以及控制系统的发展状况。

其次,阐述了四自由度机械手臂控制系统的硬件电路设计及软件实现。

详细阐述了机械臂控制系统中单片机及其外围电路设计、电源电路设计和舵机驱动电路设计。

在程序设计中,着重介绍了利用微分插补法进行PWM调速的程序设计。

并给出了控制器软件设计及流程图。

最后,给出了系统调试中出现的软硬件问题,进行了详细的分析并给出了相应的解决办法。

关键词:机械臂单片机自由度舵机PWMDesign of Multi DOF Manipulator ControllerBased on MCUAbstractAs the brain of robot arm, manipulator controller is very important for its research.With the development of microelectronics technology and control method, the control system of MCU is becoming more and more mature.This thesis is based on the research of the manipulator control system of MCU.Firstly,it is introduced the development of the manipulator and the control system at home and abroad.Secondly,it is given the circuit and software design for the four DOF manipulator in this disertation.it is expatiated the Single Chip Microcomputer(SCM),the relative circuit design ,Power circuit design,and driver circuit design of manipulator control system.In the design of the program, the design of PWM speed regulation by differential interpolation is introduced emphatically. The software design and flow chart of the controller are given.Finally,it is presented the problems of hardware and software in practive given resolves.Key word: Manipulator;MCU;DOF;Steering engine;PWM目录1引言 (1)1.1研究的背景和意义 (1)1.2国内外机械臂研究现状 (2)1.2.1国外机械臂研究现状 (2)1.2.2国内机械臂研究现状 (3)1.3机械臂控制器的发展现状 (3)1.4本设计研究的任务 (4)2机械结构与控制系统概述 (5)2.1机械结构 (5)2.2控制系统 (6)2.3系统功能介绍 (8)2.4舵机工作原理与控制方法 (8)2.4.1概述 (8)2.4.2舵机的组成 (8)2.4.3舵机工作原理 (9)3系统硬件电路设计 (11)3.1时钟电路设计 (11)3.2复位电路设计 (11)3.3控制器电源电路设计 (12)3.4舵机驱动电路 (13)3.5串口通信电路设计 (13)4系统软件设计 (14)4.1四自由机械臂轨迹规划 (15)4.2主程序设计 (16)4.3舵机调速程序设计 (17)4.3.1舵机PWM信号 (17)4.3.2利用微分插补法实现对多路PWM信号的输出 (18)4.4初末位置置换子程序 (21)4.5机械爪控制程序 (22)4.6定时器中断子程序 (23)4.6.1定时器T1中断程序 (23)4.6.2定时器T0中断子程序 (24)5系统软硬件调试 (25)5.1单片机系统开发调试工具 (25)5.1.1编程器 (25)5.1.2集成开发环境Keil和Protues (25)5.2控制系统的仿真 (26)5.3软件调试 (27)5.4硬件调试 (27)5.5软硬件联合调试 (28)6结论 (29)谢辞 (30)参考文献 (31)附录 (32)1引言1.1研究的背景和意义机器人是传统的机械结构学结合现代电子技术、电机学、计算机科学、控制理论、信息科学和传感器技术等多学科综合性高新技术产物,它是一种拟生结构、高速运行、重复操作和高精度机电一体化的自动化设备。

本科毕业论文-基于单片机的多自由度机械手臂控制器设计

本科毕业论文-基于单片机的多自由度机械手臂控制器设计

本科毕业论文-基于单片机的多自由度机械手臂控制器设计摘要:随着自动化技术的不断发展,机械手臂在工业生产中扮演着越来越重要的角色,越来越得到人们的关注。

现代机械手臂控制器尤其是多自由度机械手臂控制器的设计与实现成为了本领域中的研究热点。

本文基于单片机芯片设计了一种多自由度机械手控制器,采用了串行通信的方式从计算机发送命令控制机械手臂的动作。

在硬件设计方面,使用了AT89S52单片机作为主控制器,引入了五个伺服电机控制模块作为机械手的动力源,以及一组角度传感器作为手臂的姿态测量元件。

在软件设计方面,采用C语言编写程序,实现了机械手臂自动运动、复位、姿态检测等功能。

同时,对机械手臂的自动防撞、误操作检测等进行了设计。

最终实验表明,本文设计的多自由度机械手控制器具有较强的动作准确性和鲁棒性。

关键词:多自由度机械手,单片机,控制器,硬件设计,软件设计Abstract:With the continuous development of automation technology, the role of robotic manipulators in industrial production is becoming more and more important, and it has attracted more and more attention from people. The design and implementation of modern robotic controller, especially multi-degree-of-freedom robotic controller, has become a hot research topic in this field.In this paper, a multi-degree-of-freedom robotic arm controller based on MCU chip is designed, and the motion of the robotic arm is controlled by serial communication from the computer. In terms of hardware design, AT89S52 MCU is used as the main controller. Five servo motor control modules are introduced as the power source of the manipulator, and a set of angle sensors are used as the posture measurement element of the arm.In terms of software design, the program is written in C language, and the functions of automatic movement, reset and posture detection of the robotic arm are realized. At the same time, the automatic anti-collision and misoperation detection of the robotic arm are also designed. Finally, the experiment shows that the multi-degree-of-freedom robotic arm controller designed in this paper has strong motion accuracy and robustness.Keywords: multi-degree-of-freedom robotic arm, MCU, controller, hardware design, software design一、引言机器人技术早产业生产中广泛使用,将传统的出产系统向自动化和智能化方向推进。

基于51单片机多自由度机械手教学模型的设计

基于51单片机多自由度机械手教学模型的设计

基于51单片机多自由度机械手教学模型的设计作者:欧家明来源:《科技视界》 2014年第16期欧家明(广东省南方高级技工学校,广东韶关 512023)【摘要】目前,51系列单片机广泛应用于各院校的单片机教学当中,而多自由度的机械手的教学应用也比较广泛。

本文探讨了利用51系列单片机进行多自由度机械手教学模型的设计,可作为自动控制等专业学生学习单片机应用和自动控制的教学模型。

【关键词】51系列单片机;自由度;机械手;舵机;PWM 按键消抖0 概述在各院校的开设的单片机课程当中,几乎都是采用51系列单片机进行教学。

51系列单片机是一种8位单片机,始祖是MCS-51单片机,由INTEL公司发明。

后来INTEL公司将核心技术授权其它公司,生产出兼容的51系列单片机。

现在国内教学比较常用的是美国ATMEL公司的AT89系列和深圳宏晶公司的STC89系列,采用都是兼容的51指令。

由于51单片机到现在还能到处见到它的踪影,可见其生命力之长。

掌握了51单片机的应用,对于进一步的学习AVR系列和PIC系列单片机就更有帮助了。

多自由度机械手教学模型,有助于学生更好的理解工业自动控制的过程,激发学习兴趣。

教学用的多自由度机械手可分为气动类和电动类的。

气动类需要压缩空气驱动汽缸作为动力;电动类可以由步进电机、直流电机等驱动。

以上的机械手结构比较复杂,制作起来费时费力。

本设计采用航模中的舵机作为动力,结合由51单片机组成的控制系统,可以对机械手进行多自由度控制。

不仅可以作为自动控制专业课程的教学演示,还可以在单片机的教学中作为目标机,供学生编程学习用,应用效率高。

1 机械手硬件组成1.1 舵机本设计采用舵机作为驱动。

舵机主要由以下几个部分组成:舵盘、减速齿轮组、位置反馈比例电位器、直流电机、控制电路板等。

控制电路板接受来自控制端口的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出轴。

舵机的输出轴和位置反馈比例电位器是相连的,输出轴转动的同时,带动位置反馈比例电位器,转换为一比例电压反馈到控制电路板,然后控制电路板根据所在位置决定电机的转动方向和速度,达到目标后停止。

基于单片机的多自由度机械手臂设计

基于单片机的多自由度机械手臂设计

基于单片机的多自由度机械手臂设计近年来,机器人技术蓬勃发展,越来越多的高新机器人先后亮相。

在各种机器人中,带机械手臂类机器人应用最为广泛。

带机械手臂的机器人能模仿人的肢体动作,代替人的工作,特别是在重物装卸,精细加工中有着非常重要的优势。

机械手臂关节的自由度、灵活性和准确性是机械手臂机器人的工作前提。

文章基于单片机,设计一个小型机器人的一只手臂能在空间四个自由度转动。

加入机械手的机械结构,通过对四个电机的正反转实验论证方案的可靠性和可行性。

标签:单片机;四自由度;机械手臂;电机引言机器手臂作为一种工业技术装备,它能代替人搬运物件或货物分拣操作。

近年来工业机器人在工厂自动化改革中发挥着巨大的作用,代替人处理一些高危险、高危害、高工作负荷的工作,大大加快了生产效率,缩减了生产周期。

然而在这些自动化生产中,机械臂机器人占了最大的比重。

如汽车生产中的无缝焊接,钢厂里的钢材打包分拣,都用到了机器人机械臂。

机器手臂具有三个部分组成:机械臂、控制部分和工作部分。

机械臂的大小,规格决定了机械臂的应用,转角轴等,控制部分工业上一般是工控机,通过编程设计控制机械臂进行相应的操作。

工作部分由具体工作事项决定,如电焊机器人的电焊手,搬运机器人的挂钩。

1 系统功能介绍本设计采用电动式多自由度机器机器手臂模型,应用单片机控制,步进电动机的方式来驱动。

该手臂具有四个关节,每个关节可以前后转动,手臂转动采用4台微型步进电机驱动,可以完成前后左右360度摆臂等简单动作,系统控制图如图1控制部分采用80C51单片机,完成对电机的控制,即完成对手臂转动的控制。

2 软硬件设计机械手臂在动力传动方式上有连杆式、齿轮式和绳索式等。

采用齿轮结构是主流的机械手发展趋势,因为齿轮式机械手臂传动精度高、结构紧、承载高等优点。

随着工业的发展,对机械手臂要求越来越高,机械手臂向多自由度发展。

本设计为了简单起见,选用第三种传动方式——绳索式。

2.1 机械结构4自由度机械臂采用四个步进电机控制,如图2,步进电机1控制底座,实现自由旋转,步进电机2、3、4可自由旋转,完成伸展、收缩等动作。

机械手控制程序

机械手控制程序

#include<STC15F2K.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define Cycle 20000 //定义周期uint PWM_Value[6];uchar order=0; //中断步长uchar FLAG,DZ_FLAG;//PWM的输出端口sbit PWM_OUT0=P0^0; //舵机1 sbit PWM_OUT1=P0^1; //舵机2 sbit PWM_OUT2=P0^2; //舵机3 sbit PWM_OUT3=P0^3; //舵机4 sbit PWM_OUT4=P0^4; //舵机5 sbit PWM_OUT5=P0^5; //舵机6void Init_Timer0() //定时器0 初始化{TMOD=0x01;TH0=(65536-500)/256; //0.5msTL0=(65536-500)%256;AUXR&=0X7F; //12分频1T模式EA = 1;//打开总中断ET0 = 1;//打开定时器0中断TR0 = 1;//启动定时器0// PT0=1; //定时器0 设置为最高优先中断// PX0=0; // 外部中断0 设置最低中断}//延时void delay(uint us){while(us--);}void delayms(uint ms){{uchar i=100,j;for(;ms;ms--){while(--i){j=10;while(--j);}}}}//动作void action_duoji_1(uint mov1) {while(PWM_Value[0]!=mov1){if(PWM_Value[0]<mov1)PWM_Value[0]+=1;elsePWM_Value[0]-=1;delay(1000);}}void action_duoji_2(uint mov2) {while(PWM_Value[1]!=mov2){if(PWM_Value[1]<mov2)PWM_Value[1]+=1;elsePWM_Value[1]-=1;delay(2000);}}void action_duoji_3(uint mov3) {while(PWM_Value[2]!=mov3){if(PWM_Value[2]<mov3)PWM_Value[2]+=1;elsePWM_Value[2]-=1;delay(1000);}}void action_duoji_4(uint mov4){while(PWM_Value[3]!=mov4){if(PWM_Value[3]<mov4)PWM_Value[3]+=1;elsePWM_Value[3]-=1;delay(1000);}}void action_duoji_5(uint mov5){while(PWM_Value[4]!=mov5){if(PWM_Value[4]<mov5)PWM_Value[4]+=1;elsePWM_Value[4]-=1;delay(1000);}}/****************************************************************************** *********************************************************************************************** ***************/void action1() //初始动作{action_duoji_1(550);delayms(250);action_duoji_2(1500);delayms(250);action_duoji_3(530);delayms(250);action_duoji_4(580);delayms(250);action_duoji_5(1700);delayms(250);}void action2() //抓取前方物体{action1();action_duoji_1(555); //1舵机底层delayms(250);action_duoji_3(750); //抓取准备delayms(250);action_duoji_4(1300);delayms(250);action_duoji_5(1300);delayms(250);action_duoji_2(1200); //舵机23组合减少误差delayms(400);action_duoji_3(900);delayms(250);action_duoji_2(1150); //舵机23组合减少误差delayms(400);action_duoji_3(950);delayms(250);action_duoji_2(1100);delayms(250);action_duoji_3(1000);delayms(250);action_duoji_2(1050);delayms(250);action_duoji_3(1050);delayms(250);action_duoji_2(950);delayms(250);action_duoji_3(1100);delayms(250);action_duoji_2(850);delayms(250);action_duoji_3(1150);delayms(250); //组合完毕action_duoji_2(800);delayms(600);action_duoji_5(1600);delayms(1000);action_duoji_2(1500);delayms(1000); //抓取完毕action_duoji_1(1250);delayms(500);action_duoji_2(1000);delayms(1000);action_duoji_3(950);delayms(250);action_duoji_5(1200);delayms(250);action_duoji_2(1500);delayms(1000);action_duoji_4(580);delayms(250);action_duoji_3(580);delayms(250);action_duoji_1(550);action_duoji_5(1600);delayms(250); //完成物品放下}void main(void){FLAG=0;PWM_Value[0]=550;PWM_Value[1]=1500;PWM_Value[2]=600;PWM_Value[3]=580;PWM_Value[4]=1600;// PWM_Value[5]=800;delayms(500);Init_Timer0();while(1){//action1();//action2();action2();// action_duoji_5(800);// delayms(2000);// action_duoji_5(2200);// delayms(2000);while(1){EA=0;}}}void timer0(void) interrupt 1{switch(order){case 1:PWM_OUT0=1;TH0=-PWM_Value[0]/256; //第一路输出高电平时长TL0=-PWM_Value[0]%256;break;case 2:PWM_OUT0=0;TH0=-(5000-PWM_V alue[0])/256; //第一路输出低电平时长TL0=-(5000-PWM_Value[0])%256;break;case 3:PWM_OUT1=1;TH0=-PWM_Value[1]/256;TL0=-PWM_Value[1]%256;break;case 4:PWM_OUT1=0;TH0=-(5000-PWM_V alue[1])/256;TL0=-(5000-PWM_Value[1])%256;break;case 5:PWM_OUT2=1;TH0=-PWM_Value[2]/256;TL0=-PWM_Value[2]%256;break;case 6:PWM_OUT2=0;TH0=-(5000-PWM_V alue[2])/256;TL0=-(5000-PWM_Value[2])%256;break;case 7:PWM_OUT3=1;TH0=-PWM_Value[3]/256;TL0=-PWM_Value[3]%256;break;case 8:PWM_OUT3=0;TH0=-(5000-PWM_V alue[3])/256;TL0=-(5000-PWM_Value[3])%256;break;case 9:PWM_OUT4=1;TH0=-PWM_Value[4]/256;TL0=-PWM_Value[4]%256;break;case 10:PWM_OUT4=0;TH0=-(5000-PWM_V alue[4])/256;TL0=-(5000-PWM_Value[4])%256;/* break;case 11:PWM_OUT5=1;TH0=-PWM_Value[5]/256;TL0=-PWM_Value[5]%256;break;case 12:PWM_OUT5=0;TH0=-(5000-PWM_V alue[5])/256;TL0=-(5000-PWM_Value[5])%256; */order=0;break;default: order=0;}order++;}。

基于单片机的机械手设计

基于单片机的机械手设计

基于单片机的机械手设计摘要机械手是一种能够模仿人类手臂运动的智能机器人。

本文介绍了一款基于单片机的机械手的设计。

该机械手由五个自由度组成,其运动控制系统由单片机控制。

该机械手具有定位精度高、反应速度快、操作简便等优点。

理论分析和实验结果表明,该机械手设计具有较高的实用性和普适性。

关键词:机械手;单片机;自由度;控制系统;精度1. 引言近年来,智能机器人领域蓬勃发展,机械手作为一种具有广泛应用前景的机器人,已成为研究热点。

机械手具有广泛的应用范围,如生产线上的自动化生产,医疗手术,危险环境中的救援等。

因此,基于单片机的机械手的设计及其控制系统研究具有重要意义。

2. 设计思路本文设计的机械手由五个自由度组成,能够完成抓取、举起、放置等基本操作。

本文的设计思路是基于单片机控制系统,通过驱动电机实现机械手的运动。

机械手的五个自由度分别为旋转、抬升、伸展、弯曲和手掌张合。

机械手的控制系统主要由单片机、电机驱动器和传感器组成。

其中,单片机采用STM32F407主控制器,并通过PWM信号控制电机运动。

传感器采用光电编码器对电机转速和位置进行反馈。

图2 机械手的控制系统机械手的驱动电机由直流电机和舵机组成。

直流电机主要用于实现伸展和弯曲动作,而舵机用于实现手掌张合动作。

机械手的轴承部件采用滚珠轴承,能够有效减小摩擦力,提高机械手的运动精度和操作稳定性。

3. 理论分析本文采用MATLAB建立机械手的数学模型,并进行了理论分析。

机械手在执行任务时需要完成一系列位置和姿态变化,因此,机械手的位置和姿态控制是机械手设计的重要指标。

机械手的位置精度取决于电机性能和轴承部件的精度。

电机性能包括电机的输出电功率、转速、转矩等。

机械手的姿态精度取决于机械手的运动学性能。

在不同姿态下,机械手的姿态解算需要通过角度解算和矩阵变换等方法进行计算。

在机械手的设计中,需要考虑机械手的运动学性能和机械手的实际操作需求。

4. 实验结果本文通过实验验证了机械手设计的有效性和性能优越性。

51单片机机械臂设计流程

51单片机机械臂设计流程

51单片机机械臂设计流程
设计一个基于51单片机的机械臂需要经过以下几个步骤:
1. 需求分析:明确机械臂需要完成的任务,例如抓取、移动、释放等。

根据任务需求,确定机械臂的关节数量、自由度以及工作范围等。

2. 机械设计:根据需求,设计机械臂的各个关节和结构。

这一步通常需要使用CAD软件(如SolidWorks、AutoCAD等)进行建模和仿真。

3. 控制系统设计:确定使用51单片机作为主控制器,并为其编写控制程序。

根据机械臂的自由度和关节数量,选择合适的电机和驱动器,如步进电机、舵机等。

4. 硬件搭建:根据设计,采购并搭建控制系统所需的硬件,包括51单片机、电机驱动器、传感器等。

同时,也需要设计和制作机械臂的电路板。

5. 软件编程:使用C语言或汇编语言为51单片机编写控制程序,实现对机械臂的精确控制。

这一步需要编写各种算法,如PID控制、模糊控制等,以实现精确的运动控制。

6. 系统调试:在完成硬件搭建和软件编程后,需要进行系统调试,确保机械臂能够按照预期工作。

这一步可能需要反复修改硬件和软件,直到达到满意的效果。

7. 优化和完善:在初步实现机械臂的基本功能后,需要进行优化和完善,以提高机械臂的性能和工作效率。

以上是一个基于51单片机的机械臂设计的基本流程,具体的设计过程可能会因实际需求和条件的不同而有所调整。

基于51单片机多自由度机械手教学模型的设计

基于51单片机多自由度机械手教学模型的设计
列单片机 进行 多自由度机械手教学模型的设计 . 可作为 自 动控制等专业 学生 学习单片机应用和 自动控制 的教 学模型 。
【 关键词 】 5 1系列单片机 ; 自由度 ; 机械手 ; 舵机 ; P wM 按键消抖
学生使 用 ; 晶振 为 1 2 M H z , 使单片机 的机器周期为 1 s ; 由于舵 机在运 行 过程 中要从 电源吸纳较大 的电流 . 若舵机与单 片机控制器共用一个 在各 院校的开设 的单片机课程当中 . 几 乎都是采用 5 1 系列单 片 电源 , 舵机会 对单 片机产生较大 的干扰。 因此 , 舵机与单片机控制器采 机进行教学 。5 1 系列 单片机是一种 8 位单 片机 , 始祖是 M C S 一 5 1 单片 用两个电源供 电.舵机供 电的电源最好采用输 出功率较大 的开关 电 机. 由I N T E L公司发 明。后来 I N T E L公 司将核 心技 术授权其它公 司, 源 该 控制器利 用 M A X 2 3 2 芯片 , 将P c 机的 R S 2 3 2 电平转换 成单 片 生 产 出兼 容 的 5 1 系列 单片 机 。现 在 国 内教 学 比较 常 用 的是 美 国 机的 T r L电平 单片机 串1 : 3 除作为编程 口外 , 还可以和上位机通讯 , A T M E L公司的 A T 8 9 系列和深圳宏 晶公司的 S T C 8 9系列 .采用都是 利用上 位机控制机械手 。 兼容 的 5 1 指令 由于 5 1 单 片机 到现在 还能 到处见 到它的踪影 . 可见 2 . 2 控 制系统 的软件部分设计 其生命力 之长 掌握了 5 1单片机的应用 . 对于进一步 的学 习 A V R系 由于舵机 的控制信号为脉宽 调制信号 . 结合 之前的分析 . 采用 汇 列和 P I C系列单 片机就更有 帮助了 编指令进 行编程 。编程 中需要考虑的部分有 : 多 自由度机械 手教 学模 型 . 有 助于学生更好 的理解工业 自动控制 1 ) 按键 的去抖动 问题 的过程 . 激发学 习兴趣 。教学用的多 自由度机械手可分为气动类和 电 由于按键 的结构 为机械弹性开关 .在开关按下 和释放操作 时 . 触 动类 的 气 动类需要压 缩空气 驱动汽缸作为动力 : 电动类可 以由步进 点闭合 和断开 的瞬间会接触不稳定 . 从而产生抖 动。按键 的抖 动时间 电机 、 直 流电机等驱动。 以上 的机械手结构 比较复杂 , 制作起来 费时费 般为 5 ~ 1 0 ms . 会引起 C P U对一 次键操作进 行多次处理 . 所 以必 须 力 本设计采用航模 中的舵机作为动力 , 结合 由 5 1 单片机组成 的控制 要进行 消抖的处 理。按键消抖处理可用硬件或软件 的方法进行 . 出于 系统 . 可 以对 机械手进行多 自由度控制 不仅可 以作为 自 动控制专业 系统的简易性 和成本 的考虑 , 这里采用软件消抖的方法 。 一般情况下. 课程 的教学演示 . 还 可以在单片机 的教学 中作 为 目标机 . 供 学生编程 只需对 开关按下 时作消抖处理 即可满足要求。 具体 的做法就是在判断 学 习用 . 应用效 率高 按键有没有闭合 时加入一定 的延时来避开抖动 . 加入延 时时 间要比按 键的抖动时间要长。 在检测到按键按下时 . 经过延 时, 判断键号并转入 1 机械 手硬 件 组 成 相应的按键处理 程序 。 1 . 1 舵 机 2 ) P WM脉宽调制波的形成 本设计 采用 舵机作 为驱动 。 舵机 主要 由以下几个部分组成 : 舵 盘、 P WM脉宽调制波的周期为 2 0 m s 。 占空比为 2 . 5 %~ 1 2 . 5 %。 由于 5 1 减 速齿轮组 、 位置反馈 比例 电位器 、 直流电机 、 控制电路板等 。控制 电 系列单片机没有专门的 P WM输 出端 . 编程要 比A V R等系列稍显复杂 路板 接受来 自控制端 口的控制信号 . 控制 电机 转动 . 电机 带动一系列 P WM输出实现 的方案有很多 . 本设计采用 1 D和 T 1 定时中断 的方法实 齿 轮组 . 减速后 传动至输出轴 舵机的输 出轴和位置反馈 比例 电位器 现 单片机的晶振为 1 2 M H z , 机器周期为 1 “ 8 , 1 1 D 和T 1 都工作 于工作方 是相 连的 . 输 出轴转动的同时 . 带动位置反馈 比例电位器 . 转换为一 比 式 2 ( 8 位自 动) 。 T 0 的初值设为 # 0 6 . 计数 2 5 0 次。 即每过 2 5 0 1  ̄ s 响应一 例 电压反 馈到控制电路 板 . 然后控制电路板根据所在位置决定 电机 的 次中断 。寄存器 R 6 设定 响应 中断次数 # 0 8 0 . 执行 8 0 次 即为一个周期 转动方 向和速度 , 达到 目标后停止 标准 的舵机接线端子顺序为 : 控制 2 0 m s ; T 1 的初值设为 # 2 0 6 , 计数 5 O次 , 寄存器 R 7 装载初始值为 # 0 0 . 端、 电源正 、 电源负 控 制端输入周期 为 2 0 m s 的脉宽调制信 号 , 脉宽 每过 5 0 1  ̄ s 响应一次 中断 R 7 加1 。 执行 1 O 次即为脉宽 0 . 5 m s 。 通过改变 范 围为 O . 5 m s ~ 2 . 5 m s . 相对应舵盘 的位置 为一 9 O 。 ~ + 9 0 。 . 呈线性变化 R 7的计数终 值可 以控制脉 冲的宽度在 0 . 5 m s 2 . 5 m s 间变化 .步进 为

【精品毕设】基于单片机的多自由度机械手臂控制器设计

【精品毕设】基于单片机的多自由度机械手臂控制器设计

唐山学院毕业设计设计题目:基于单片机的多自由度机械手臂控制器设计系别:信息工程系班级:11电气工程及其自动化3班*名:*****师:***2015年6月1日基于单片机的多自由度机械手臂控制器设计摘要机械臂控制器作为机械臂的大脑,对于它的研究有着十分重要的意义。

随着微电子技术和控制方法的不断进步,以单片机作为控制器的控制系统越来越成熟。

本课题正是基于单片机的机械臂控制系统的研究。

本文首先介绍了国内外机械臂发展状况以及控制系统的发展状况。

其次,阐述了四自由度机械手臂控制系统的硬件电路设计及软件实现。

详细阐述了机械臂控制系统中单片机及其外围电路设计、电源电路设计和舵机驱动电路设计。

在程序设计中,着重介绍了利用微分插补法进行PWM调速的程序设计。

并给出了控制器软件设计及流程图。

最后,给出了系统调试中出现的软硬件问题,进行了详细的分析并给出了相应的解决办法。

关键词:机械臂单片机自由度舵机PWMDesign of Multi DOF Manipulator ControllerBased on MCUAbstractAs the brain of robot arm, manipulator controller is very important for its research.With the development of microelectronics technology and control method, the control system of MCU is becoming more and more mature.This thesis is based on the research of the manipulator control system of MCU.Firstly,it is introduced the development of the manipulator and the control system at home and abroad.Secondly,it is given the circuit and software design for the four DOF manipulator in this disertation.it is expatiated the Single Chip Microcomputer(SCM),the relative circuit design ,Power circuit design,and driver circuit design of manipulator control system.In the design of the program, the design of PWM speed regulation by differential interpolation is introduced emphatically. The software design and flow chart of the controller are given.Finally,it is presented the problems of hardware and software in practive given resolves.Key word: Manipulator;MCU;DOF;Steering engine;PWM目录1引言 (1)1.1研究的背景和意义 (1)1.2国内外机械臂研究现状 (2)1.2.1国外机械臂研究现状 (2)1.2.2国内机械臂研究现状 (3)1.3机械臂控制器的发展现状 (3)1.4本设计研究的任务 (4)2机械结构与控制系统概述 (5)2.1机械结构 (5)2.2控制系统 (6)2.3系统功能介绍 (8)2.4舵机工作原理与控制方法 (8)2.4.1概述 (8)2.4.2舵机的组成 (8)2.4.3舵机工作原理 (9)3系统硬件电路设计 (11)3.1时钟电路设计 (11)3.2复位电路设计 (11)3.3控制器电源电路设计 (12)3.4舵机驱动电路 (13)3.5串口通信电路设计 (13)4系统软件设计 (14)4.1四自由机械臂轨迹规划 (15)4.2主程序设计 (16)4.3舵机调速程序设计 (17)4.3.1舵机PWM信号 (17)4.3.2利用微分插补法实现对多路PWM信号的输出 (18)4.4初末位置置换子程序 (21)4.5机械爪控制程序 (22)4.6定时器中断子程序 (23)4.6.1定时器T1中断程序 (23)4.6.2定时器T0中断子程序 (24)5系统软硬件调试 (25)。

单片机六自由度机械手控制程序

单片机六自由度机械手控制程序

单片机六自由度机械手控制程序#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); voidlcd_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;elsei=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();elsebreak;}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; }}。

机械手程序

机械手程序

#include<Text1.h>#define uint unsigned int/***************************************延时***************************************/void delay(uint t){unsigned char i;while(t--){for(i=123;i>0;i--) ;}}void initial(){P3=0XFF;P1=0XFF; //手爪上升delay(300);if(INT9==0) //如果手爪有东西,那向左运动,放松手爪后回1工位{OUT1=0;while(INT3!=0) {;;}OUT1=1;OUT4=0;delay(200);OUT4=1;}if(INT6==0){OUT4=0;delay(300);OUT4=1;}if(INT1!=0){OUT2=0; //当电机不在1工位的时候,电机向右运动while(INT1!=0){;;}OUT2=1; //当电机到达1工位时,电机停下}}void dongzhuo1(void){uint j=0;OUT4=0; //手爪放松delay(300);OUT4=1; //手爪放松电磁阀关闭OUT5=0; //手爪下降while(INT5==1){;;} //手爪到位检测OUT3=0; //手爪夹紧delay(200);OUT3=1;while(1){delay(100);if(INT6==0){break;}else{OUT4=0;delay(300);OUT4=1;break;}}OUT5=1; //手爪上升delay(500);while(INT4==1){;;} //手爪复位检测}void dongzhuo2(void){OUT1=0;while(INT3!=0){;;}OUT1=1;delay(1000);if(INT3==0) //再次判断有没有真的到达3工位{OUT4=0;delay(200);OUT4=1;}else{OUT1=0;while(INT3!=0){;;}OUT1=1;delay(300);OUT4=0;delay(1000);OUT4=1;}}void main(){delay(300);initial();while(1){if(INT7==0) //如果1工位有球{if(INT1!=0) //如果电机不在1工位,电机向右{OUT2=0;while(INT1!=0){;;}OUT2=1; //当电机到达1工位时,电机停下}if(INT7==0) //再次判断1工位有没有球,有球,手爪下降抓球{dongzhuo1();if(INT9==0){dongzhuo2();}else{OUT4=0;delay(500);OUT4=1;}}}if((INT8==1)&&(INT7==1)) //1,2工位都没球{initial();}}}#ifndef __text1_H__#define __text1_H__/* BYTE Registers */sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr IE = 0xA8;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IP = 0xB8;sbit TR1 = TCON^6;sbit ET1 = IE^3;sbit EA = IE^7;/* BYTE Registers */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;/* P1 */sbit OUT1 = P1^0; //驱动电机左移sbit OUT2 = P1^1; //驱动电机右移sbit OUT3 = P1^2; //驱动手爪夹紧电磁阀sbit OUT4 = P1^3; //驱动手爪放松电磁阀sbit OUT5 = P1^4; //驱动手爪升降电磁阀/* P0 */sbit INT9 = P2^0; //手爪是否有物体检测/* P3 */sbit INT1 = P3^0; //1工位限位sbit INT2 = P3^1; //2工位限位sbit INT3 = P3^2; //3工位限位sbit INT4 = P3^3; //手爪复位检测sbit INT5 = P3^4; //手爪到位检测sbit INT6 = P3^5; //手爪夹紧检测sbit INT7 = P3^6; //1工位物料sbit INT8 = P3^7; //2工位物料#endif。

基于51单片机的机械臂控制系统设计

基于51单片机的机械臂控制系统设计

基于51单片机的机械臂控制系统设计下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!基于51单片机的机械臂控制系统设计1. 引言在现代工业自动化领域,机械臂作为重要的执行器,在各种自动化任务中发挥着关键作用。

51单片机机械手控制C程序学习资料

51单片机机械手控制C程序学习资料

51单片机机械手控制C程序//包含所需头文件#include<reg51.h>#define uchar unsigned char/***************------宏定义------*******************/sbit qigang_left=P0^0; //气缸sbit qigang_right=P0^1;sbit qigang_up=P0^2;sbit qigang_down=P0^3;sbit qigang_behind=P0^4;sbit qigang_front=P0^5;sbit qigang_grasp=P0^6;sbit qigang_loose=P0^7;sbit journey_left=P1^0; //传感器开关sbit journey_right=P1^1;sbit journey_up=P1^2;sbit journey_down=P1^3;sbit journey_behind=P1^4;sbit journey_front=P1^5;sbit flag_start=P3^2; //启动按钮/*************** 中断 ****************************/void t0(void) interrupt 0 using 0 //按键按下触发中断服务程序{//flag_start=1;}/*************** 延时函数S***********************/void delay(unsigned char m) //延时子m秒子程序{unsigned char i,j,k;m=m*100;for(i=m;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}/******************* 主函数 *********************/void main(){qigang_left=1;qigang_right=1;qigang_front=1;qigang_behind=1;qigang_up=1;qigang_down=1;qigang_grasp=1;qigang_loose=1;/*************** 中断初始化 ******************/IT0=1; // 下降沿触发EX0=1;EA=1;if(flag_start==0){while(1){qigang_left=0; //机械手左移while(1) //左移死循环,等待下面的传感器开关{if(journey_left==0) //左面的传感器开关接通{qigang_left=1; //停止左移qigang_front=0; //机械手前移while(1) //前移死循环,等待前面的传感器开关{if(journey_front==0) //前面的传感器开关接通{qigang_front=1; //停止前移qigang_down=0; //机械手下降while(1) //下降死循环,等待下面的传感器开关{if(journey_down==0) //下面的传感器开关接通{qigang_down=1; //停止下降qigang_grasp=0; //机械手抓取delay(1); //抓取延时qigang_up=1; //开始上升while(1) //上升死循环,等待上面的传感器开关{if(journey_up==0) //上面的传感器开关接通{qigang_up=1; //停止上升qigang_right=0; //向右移动while(1){if(journey_right==0){ qigang_right=1;qigang_behind=0;while(1){if(journey_behind==0){qigang_behind=1;qigang_down=0;while(1){if(journey_down==0){qigang_down=1;qigang_loose=0;delay(1);qigang_up=1;while(1){if(journey_up==0){qigang_up=1;break;}}break;}}break;}}break;}}break;}}break;}}break;}}break;}}}}}。

应用单片机进行多自由度机械臂控制系统设计

应用单片机进行多自由度机械臂控制系统设计
8951单片机其数据分辨率为 256,那么经过舵 机极限参数实验,得到应该将其划分为 250份。那 么 0.5ms~2.5ms的 宽 度 为 2ms = 2000us。 2000us/250=8us则:PWM 的控制精度为 8us,我们 可以以 8us为单位递增控制舵机转动与定位。舵机 可以转动 180°,那么 180°/250=0.72°,则:舵机的 控制 精 度 为 0.72°。 控 制 所 需 的 PWM 宽 度 为 05ms~2.5ms,宽度 2ms。2ms÷250=8us;所以得 出:PWM信号 =1°/8us。
3)多路 PWM 信号同步性。多路 PWM 控制信 号的关键,实现多路信号输出的同时,还要多路控制 信号的同步输出才能实现各个环节的协调控制,这 样才能实现控制多自由度机械臂的意义。
4)PWM 信 号 的 丰 富 性。对 于 同 一 种 周 期 的 PWM信号,我们往往需要通过实时的改变占空比, 去实现 PWM信号对平均电压的分配,才能控制系 统中实现脉宽调制的控制作用,体现 PWM 出控制 的意义。 3.2 PWM信号的输出
该单ቤተ መጻሕፍቲ ባይዱ机具有体积小、结构简单、可靠性高;控 制能力强;低电压、低功耗;优异的性能 /价格比等优 点,所以适用于很多工作场所特别是较为恶劣的工 作环境。
2 硬件电路的设计
2.1 舵机驱动电路的设计[2,3] 相对于其他元器件来说,由于舵机需要更大电
流来驱动其正常运转,如果其供电电路和控制器电 路共用同一个 5V电源的话,则会影响控制电路单
PWM 信号周期具有可调性,这样,PWM 信号才 能被 广泛应用。
2)实现多路 PWM信号的输出。在大多数的控 制系统中,往往需要的不仅仅是输出单个 PWM 信 号控制,而是输出多个 PWM 信号协同控制。如果 一个控制系统只能输出单一的 PWM 信号,那么这 样的控制系统产生 PWM信号的方法也就是没有任 何意义。

keil单片机五向摇杆控制代码

keil单片机五向摇杆控制代码

keil单片机五向摇杆控制代码这里提供一个示例代码,可以实现用五向摇杆来控制单片机的运动。

```c#include <reg52.h>sbit Up = P1^0;sbit Down = P1^1;sbit Left = P1^2;sbit Right = P1^3;sbit Center = P1^4;void TurnRight();void TurnLeft();void GoForward();void GoBackward();void main(){while(1){if(Up == 0){GoForward();}else if(Down == 0){GoBackward();}else if(Left == 0){TurnLeft();}else if(Right == 0){TurnRight();}}}void GoForward(){//向前运动代码}void GoBackward(){//向后运动代码}void TurnLeft(){//向左转向代码}void TurnRight(){//向右转向代码}```上述代码中,使用了一个五向摇杆,其中Up、Down、Left、Right、Center分别对应五个方向。

当摇杆朝某个方向时,对应的引脚会被按下,从而触发相应的函数。

实际使用过程中,根据具体硬件情况,可能需要调整引脚以适配自己的单片机板子。

机械手程序设计

机械手程序设计

程序清单: 程序清单: ADD1: R3, ADD1:MOV R3, #00H R4, MOV R4, #00H R2, MOV R2, #N MOV R0 , #50H LOOP: A, LOOP:MOV A,R4 A, ADD A,@R0 R4, MOV R4,A INC R0 CLR A A, ADDC A, R3 R3, MOV R3,A R2, DJNZ R2, LOOP
谢谢!
程序设计基本方法 编写一个程序大致分为: 编写一个程序大致分为: 确定计算方法,定出运算步骤和顺序, 1、确定计算方法,定出运算步骤和顺序,把运算 框图。 过程画成 框图。 确定数据:包括工作单元的数量, 2、确定数据:包括工作单元的数量,分配存放单 元。 按所使用计算机的指令系统,把确定顺序( 3、按所使用计算机的指令系统,把确定顺序(框 写成程序。 图)写成程序。
3、循环程序结构
在程序设计中,常遇到反复执行某一或某一段指 在程序设计中, 此时可利用循环程序结构, 令,此时可利用循环程序结构,这有助于缩短程序 , 提高程序质量。 提高程序质量。 循环结构的程序一般包括:置循环初值.循环体. 循环结构的程序一般包括:置循环初值.循环体. 循环修改.循环控制等四个部分。在单片机中, 循环修改.循环控制等四个部分。在单片机中,一般 用一个工作寄存器Rn 作为计数器,Rn中的初值即为 用一个工作寄存器Rn 作为计数器,Rn中的初值即为 循环次数, 的值减1 直到为0 循环次数,每循环一次 ,Rn 的值减1,直到为0 循 环终止。 环终止。 XI均为单字节数 并按I I=1~N) 均为单字节数, 例:若XI均为单字节数,并按I(I=1~N)顺序 存放在MCS MCS- 的内部RAM 50H开始的单元中 RAM从 开始的单元中, 存放在MCS-51 的内部RAM从50H开始的单元中,N放 R2中 现要求他们的和放在R3R4 R3R4中 在R2中,现要求他们的和放在R3R4中 。

51单片机控制五自由度机械手臂源程序

51单片机控制五自由度机械手臂源程序

/*****五自由度机器手臂舵机控制**********//*****中国地质大学(武汉)**************//***机械与电子信息学院 071082班王聪***/#include<reg52。

h〉#include<zlg7289.h>/************************************************************/#define uint unsigned int#define uchar unsigned charsbit P00=P0^0; //底座旋转舵机sbit P01=P0^1; //腰部舵机sbit P02=P0^2; //肘部舵机sbit P03=P0^3; //腕部舵机sbit P04=P0^4; //夹持舵机uchar Key=0xff;//默认键值uchar k=0xff;uchar flag=0;uchar dat;uchar M=11;uchar dj0,dj1,dj2,dj3,dj4;uchar a=0;uchar c=0;uchar beep=1;/***********************************************************/void Delay(uchar n)//毫秒延时{uint i,j;for(i=n;i〉0;i--)for(j=0;j<1140;j++);}void Init_Timer0(void){TMOD |= 0x01;TH0=0xff; //定时器初值,定时100us TL0=0x9c;EA=1;ET0=1;TR0=1;}void INT0_SVC() interrupt 0{Key = ZLG7289_Key();k = Key; //Key 的值复制到临时变量k 中Key = 0xFF; //Key 恢复为无按键状态flag=1;}void Init_zlg(void){Delay(10); //延时30ms,等待ZLG7289 复位完毕ZLG7289_Init(4); //调用ZLG7289 的初始化函数Delay(20);ZLG7289_Reset();Delay(10);}void Timer0_isr(void) interrupt 1 using 1//中断函数内部太过复杂,影响定时器计时精度,堆栈是否会溢出出问题?有待测试..。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*****五自由度机器手臂舵机控制**********/
/*****中国地质大学(武汉)**************/
/***机械与电子信息学院071082班王聪***/
#include<reg
52."h>
#include<zlg
7289."h>
/************************************************************/#defi ne uint unsigned int
#define uchar unsigned char
sbit P00=P0^0; //底座旋转舵机
sbit P01=P0^1; //腰部舵机
sbit P02=P0^2; //肘部舵机
sbit P03=P0^3; //腕部舵机
sbit P04=P0^4; //夹持舵机
uchar Key=0xff;//默认键值
uchar k=0xff;
uchar flag=0;
uchar dat;
uchar M=11;
uchar dj0,dj1,dj2,dj3,dj4;
uchar a=0;
uchar c=0;
uchar beep=1;
/***********************************************************/void Delay(uchar n)//毫秒延时{uint i,j;
for(i=n;i>0;i--)
for(j=0;j<1140;j++);}
void Init_Timer0(void){TMOD |= 0x01;
TH0=0xff;//定时器初值,定时100us
TL0=0x9c;
EA=1;
ET0=1;
TR0=1;}void INT0_SVC() interrupt 0{Key = ZLG7289_Key();
k = Key; //Key的值复制到临时变量k中
Key = 0xFF; //Key恢复为无按键状态
flag=1;}void Init_zlg(void){Delay
(10); //延时30ms,等待ZLG7289复位完毕
ZLG7289_Init
(4); //调用ZLG7289的初始化函数
Delay
(20);
ZLG7289_Reset();
Delay
(10);}void Timer0_isr(void) interrupt 1 using 1
//中断函数内部太过复杂,影响定时器计时精度,堆栈是否会溢出出问题?有待测试...{a+=1;
c+=1;
TH0=0xff;
TL0=0x9c;
if(a==M)//高电平持续时间{a=0;
beep=0;}if(c==200)//低电平持续时间为(200-M)*100us{a=c=0;
beep=1;}}
void mov(uchar t ,uchar p,uchar n)//单步动作完成函数,t为控制执行时间参数,n为舵机编号选择{uchar i,j;
M=p;//所需位置信息赋给舵机脉宽变量
for(i=0;i<150;i++){if(flag)
break;
for(j=0;j<t;j++){switch(n){case 0:{P00=beep;dj0=p;break;}
case 1:{P01=beep;dj1=p;break;}
case 2:{P02=beep;dj2=p;break;}
case 3:{P03=beep;dj3=p;break;}
case 4:{P04=beep;dj4=p;break;}
default:
break;}}}}
void auto_mov()//自动执行一串动作{mov(100,5,0);
mov(60,7,1);
mov(100,22,3);
mov(200,17,4);
mov(60,10,1);
mov(60,8,2);
mov(100,22,0);
mov(80,7,1);
mov(80,10,2);
// mov(100,20,3);
mov(200,8,4);
mov(60,11,1);
mov(60,11,2);
mov(60,18,3);}void key_test(){for (;;){flag=0;
if ( k != 0xFF ) //通过临时变量k判断是否有键按下,有则显示出来{ dat = k / 10;
ZLG7289_Download(1,2,0,dat);
dat = k - dat * 10;
ZLG7289_Download(1,3,0,dat);
//以下部分调节高电平脉宽,控制舵机转角
switch(k){case 0:{ if(dj0>=5)dj0--;M=dj0;break;}
case 1:{ if(dj1>=5)dj1--;M=dj1;break;} case 2:{ if(dj2>=5)dj2--;M=dj2;break;} case 3:{ if(dj3>=5)dj3--;M=dj3;break;} case 4:{ if(dj0<=23)dj0++;M=dj0;break;} case 5:{ if(dj1<=23)dj1++;M=dj1;break;} case 6:{ if(dj2<=23)dj2++;M=dj2;break;} case 7:{ if(dj3<=23)dj3++;M=dj3;break;} case 8:{ if(dj4<=23)dj4++;M=dj4;break;} case 9:{ if(dj4>=5)dj4--;M=dj4;break;} case 10:{auto_mov();k=0xff;break;} default:
break;}while(k==0||k==4){P00=beep; if(flag)
break;}while(k==1||k==5){P01=beep; if(flag)
break;}while(k==2||k==6){P02=beep; if(flag)
break;}while(k==3||k==7){P03=beep; if(flag)
break;}while(k==8||k==9){P04=beep; if(flag)
break;}}
Delay
(5);}}
void main(){Init_Timer0();//初始化定时器设置Init_zlg();//初始化周立功7289
IT0 = 1; //负边沿触发中断
EX0 = 1;
dj0=dj1=dj2=dj3=dj4=M;
while(k==0xff)
P00=P01=P02=P03=beep;
key_test();}。

相关文档
最新文档