行走机器人功能分析与调试 毕业设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北能源职业技术学院《行走机器人功能分析与调试》
摘要:
虽然机器人的研究、制作和使用已经有几十年的历史,但是双足直立行走的机器人世界上很少。
主要因为稳定性控制及双足行走控制非常复杂,但为了研究出与人更加接近的机器人,这是必须克服的难关。
主要是解决直立行走机器人腿部平衡的问题,包括硬件设计和软件的设计,侧重于对硬件的设计,即着重介绍直立行走机器人腿部平衡系统的相关知识、设计目的、设计思路、方案的确定、原理设计及分析、硬件调试。
行走机器人是最典型的机电一体化数字化装备,是集机械、电子、控制、计算机、传感器、人工智能等多学科先进技术于一体的智能机器人。
它代表了机器人的尖端技术,是当代科技的研究热点之一。
目前,国内双足机器人研究与世界先进水平相比还有较大差距,特别是在教学机器人方面的研究更是寥寥无几。
为改善这种局面,提高我国高校师生的综合技能,本论文在研制教学双足机器人方面进行了有益的尝试和大胆的实践,设计并制作出了一款适用于高校教学开发使用的小型双足行走机器人。
本文详细阐述了双足机器人机构设计和控制系统的研发过程,包括控制系统的硬件电路设计和制作,机器人双足的外形设计与加工,以及双足行走机器人的驱动和控制技术。
结合对人类行走步态的研究,规划了双足机器人行走的姿态及轨迹,推导了双足机器人稳定步行的条件,并据此进行了实物实验,实现了稳定的低速静态步行。
本论文重点讨论了静态步行的算法设计和仿真,详细分析了基于零力矩点的双足机器人动态步行运动规划方法,根据运动学约束条件计算出各个关节的运动轨迹。
使用Matlab软件,以ZMP点的轨迹作为约束条件,进行了前向离线规划试验和ZMP误差补偿试验,实验证明本文所采用的步态规划方法可以满足机器人连续稳定行走的要求。
教学双足机器人运动平稳,系统控制精度高,具有良好的教学功能和广阔的应用开发前景。
本文针对教学双足行走机器人方面进行了深入的研究,对他人今后进行教学双足机器人的研究提供了一套系统的研究方法,对同行具有借鉴和引导作用。
目录序 (1)
1、自动机器人平台总述 (2)
1.1自动机器人平台的总体构成 (3)
1.2自动机器人平台按键部分 (4)
1.3机器人平台的充电 (4)
2、自动机器人平台系统结构 (4)
2.1自动机器人平台机械部分 (4)
2.1.1机器人平台机械部分组成 (4)
2.1.2机器人平台运动详解 (5)
2.2自动机器人平台控制系统 (6)
2.2.1概述 (6)
3、自动机器人平台的装配和调试 (13)
3.1机器人装配过程 (13)
3.1.1主动轮电机装配 (13)
3.1.2电机安装至铝合金架板 (13)
3.1.3从动轮及传感器安装 (13)
3.1.4电路板的安装 (13)
3.2机器人平台的调试 (14)
4、可行性的上部机器手臂设计方案 (14)
5、驱动软件的编写及调试 (17)
6、取得的成果 (38)
序
2012年2月,在寒假期间,比赛用机器人平台运抵学校,学校验收后交付使用,3月份开学初,我和于长波组织学生开始筹备学习机器人平台的使用,研究了平台的硬件电路和软件程序的编写,因今年机器人比赛的题目没定下来,只能等待。
2012年5月16日接到全国职业院校技能大赛规程,离正式比赛仅有20天。
需要添购通讯模块等部分设备,否则不准参赛,之后立即申报购买部分设备,包括通讯模块,交通灯,工件,电源等,同时组织学生学习研究通讯模块用法,并对参赛规程进行分析,规划比赛场地,制定可行性设计方案,三易其稿并着手采购机器人上部机构零件。
期间攻坚克难无数,同学们非常辛苦。
在规划场地时,比赛场地尺寸:大小为8米*6米。
其中外围档板高10cm,材质为木工板,上面贴有30mm宽的白色引导条。
我们采用普通透明胶带加普通打印纸来代替比赛用的白色一道条,实验室场地场地不够大,仅有6米*5米多。
怎么办,若对每个方格都按比例缩小,那么小车将无法完成正常转向,我们分析比赛规则后,规划出小车的理想行驶轨迹,把部分不重要的方格由原来的0.5米*0.5米压缩到0.5米*0.2米,这样原来的的正方形格畸变成长方形,整个比赛场地严重变形,经过大家的多次精密计算,最终解决了比赛模拟场地面积不够的问题,同时白色导条也以最小的经济成本得以解决。
之后我们分析了机器人上部机构传动形式,分析各种电机的运动特点,排除了使用伺服电机,直流减速电机等驱动形式。
查找各种电机的型号,价位并上网采购步进电机及其配套的驱动器,之后又分析链条,齿轮,导条的传动的特点,确定采用导条为支撑和传动骨架,并上网查找配件型号同时进行采购。
咨询多位老教师(卢恩贵,李瑞春,魏国江等),排除了谐波齿轮,滚珠丝杠等多种传动方法最后敲定了机器人手部形式,如何能有效的夹取工件,由于目前技术原因,机器人很多技术都不成熟,没有太多的有效资料可供参考,我们边想边做,花费很多时间,进展很慢。
另外采购角铝,电钻,方铁管等配件,期间费了很大周折。
1、自动机器人平台总述
自动机器人平台是专门为高职类机器人大赛提供的一个统一的机器人底盘。
使用者可以根据大赛任务的要求,在此平台上进一步设计制作各种抓取、投放机构,利用机器人平台提供的主控制板实现整体机器人的控制。
1.1自动机器人平台的总体构成
机器人平台包括主动车轮、从动车轮、铝合金框架、直流电机、电池、电路板以及安装在底部的16路传感器组成。
1.2自动机器人平台按键部分
自动机器人平台上共有三个按键,12V电源开关、24V电源开关以及启动按钮。
在开机时,注意先打开12V电源开关,再打开24V电源开关,最后按下启动按钮,机器人开始运行;关机时,先关闭24V电源开关,再关闭12V 电源开关。
1.3机器人平台的充电
机器人平台的电源为三节铅酸电池。
电池充满电压可以达到13V,额定工作电压12V。
其中一节电池专门给主控制板和传感器信号处理板供电,另2节电池串联成24V,给电机驱动板供电,用于驱动机器人上的各种电机,为了提高整体的抗干扰性能,12V和24V的电池不要共地。
电池可重复充电1000次以上。
充电时需先取出电池。
我们可按下面步骤进行:
1.关闭机器人平台的电源;
2.拔掉连接线,将电池依次取出,充电。
3.重新装上充好的电池。
每个平台配备了一个充电器,可以给一个电池充电,充电时,充电器上面的指示灯呈蓝色,充电完毕呈红色。
2、自动机器人平台系统结构
2.1自动机器人平台机械部分
2.1.1机器人平台机械部分组成
机器人平台的机械部分是指机器人执行具体功能时所要用到的机械部件,共有以下几个部分:
1.主动轮
机器人平台的主动轮有两只,金属铝芯,外包三根O型圈,能够完成向前直走,向后转弯,左转,右转等这些平地上的技术动作。
2.从动轮
机器人平台有1只从动轮,和两只主动轮形成三角支撑着机器人的身体。
从动轮随着主动轮的方向改变自己的方向。
众所周知,三点支撑结构是最稳定的结构,从动轮和两个主动轮形成了一个稳定的支撑结构。
3.直流电机
机器人平台上有两个2台额定电压24VDC、150转/分、70W功率直流减速电机。
4.铝合金框架
机器人平台的框架使用了铝合金型材制成,可以很方便地利用配备的专用螺母将设计的上部机构安装在平台上。
5.铝板
机器人平台上铺设了5块4mm厚的铝板,可以根据自己的需要在这些铝板上打孔,用于固定安装上部机构,若需要这些铝板,可以自行卸下,以减轻整体重量。
2.1.2机器人平台运动详解
1.机器人的动作
机器人一共有三种动作:
1)前进
两个电机等速正转时,机器人前进。
2)后退
两个电机等速反转时,机器人后退。
3)转弯
两个电机按一定比例不等速正转时,机器人转弯。
2.机器人运动原理
机器人运动时,通过直流电机的轴转动来驱动两个主动轮的运动,利用两个主动轮来控制底盘的各种运动(前进,后退或者转弯)。
底盘前端的从动轮前端有一个传感器,用于探测地面白条的位置。
探测后把相关数据传给控制装置(单片机),控制装置分析计算后把相应运动指令转化为PWM脉宽调速信号来控制电机的转速,从而使机器人能够沿着白条运行。
2.2自动机器人平台控制系统
2.2.1概述
自动机器人平台控制系统包括16路巡线传感器、传感器信号处理板、主控制板、电机驱动板和其他待开发扩展部件组成。
组成框图如图2.1所示。
图
2-1
机器
人平
台控
制系
统组
成框
图
图2-1中,虚线框中的部分是机器人平台已经配备的部分,其他部分需要在设计中根据所设计的上部机构的动作情况自行开发,并用主控制板统一控制。
2.2.2主控制板
1.概述
主控制板是机器人的大脑,承担着信息接收、处理、外部设备控制的重要任务,主控制板中处理器选用了STC12C5A60S2芯片为主控芯片,控制板支持两大类输入,既16通道专用巡线传感器输入,和8通道传感器输入;输出也是支持2大类,即可调速行走电机控制输出和不
可调速行走电机控制输出;具有一个可扩展接口。
STC12C5A60S2单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),抗干扰能力强,适合应用在强干扰场合。
具体功能和参数可以参考STC12C5A60S2数据手册。
主控制板使用的是40个引脚的单片机,共有35个I/O接口,其中,P0、P2和P4.6口用于输入,共17个端口,P1和P3部分接口用于输出,共12个端口。
主控制板实物如图2-2所示。
图中,12V电源输入插座连接12V电源,12V 电源输出插座连接传感器信号处理板的12V电源插座(注意板子上的电源正极标志,不要插反),巡线传感器输入接口用于连接传感器信号处理板,启动按钮输入插座连接面板上启动按钮,左右车轮
电机接口连接驱动板上的电机信号控制插座,程序下载接口用于程序的在线下载,8通道传感器输入接口可以用于连接8个NPN型传感器,非调速电机输出接口用于上部机构各种电机的控制。
图2-2主控制板外形图
图中,为了减少对单片机端口的占用,使用了2片74HC245总线驱动电路构成对单片机P2的复用,用单片机P4.4口的信号加以控制。
当P4.4为低电平时,P2口接收到的是16路传感的低8位信号QQ0-QQ7,当P4.4为高电平时,P2口接收到的是16路传感器的高8位信号
Q8-QQ15。
2.8通道传感器输入接口
8通道传感器输入接口用于连接光电、接近或者超声传感器等,可以在整体
设机器人时,充分利用各种传感器探测外部信息,其中4通道输入接口电
路图如图2-3所示。
图2-3 通道传感器输入接口
图中,展示了4路传感器输入接口,输入信号使用了单片机的P0.0-P0.3
口,插座J8-J11分别接4个不同传感器,传感器直接使用市场现有的成熟
产品,主要有:图2-4所示的红外传感器,在机器人中,主要用来探测四
周是否存在障碍或者是否到达预定物体附近,
图
2-4
红外
传感
器
图2-5
接近
开关
其最大探测距离根据所用型号的不同,有30cm、1m、2m多种;图2-5所示
为接近开关,主要用在机器人上探测一些运动部件是否到位,探测距离一
般在5mm以下。
传感器上有3根引线,分别接J8-J11的3个引脚。
需要注
意的是:使用的传感器必须是NPN型,工作电压在6V-36V之间。
图2-3所示的的电路均为低电平有效,即传感器探测到目标时,反相器输
出端即单片机的P0-P3脚为低电平信号,否则为高电平。
3.PWM和电机方向控制电路
图2-6 PWM和电机方向控制电路
PWM和电机方向控制电路如图2-6所示,STC12C5A60S2本身具有2路PWM 输出,即P1.3和P1.4为PWM输出端口,分别控制左(P1.4
控制)右(P1.3控制)电机的转速,图2-6中,P15和P12分别是左(P1.5控制)右(P1.2控制)电机的方向控制信号,需要注意的是,P1.5和P1.2是低电平有效,即P1.5和P1.2是低电平时,电机驱动板上的继电器常开触点闭合,电机反转。
5.非调速电机输出接口
本电路板上设置了8个非调速电机输出接口,可以用来控制4个正反转直流电机或者8个单向运转直流电机,电路图如图2-7所示。
图2-7中,P16、P17,P32-P37为8个控制信号,使用了单片机的P1.6、P1.7和P3.2-P3.7口,同样需要注意,这些信号均是低电平有效。
图2-7 非调速电机输出接口
6.扩展接口
主控制板中,P1.0和P4.5两个接口没有使用,用插座对外引出,参赛队可以根据自己机器人的设计情况加以使用。
7.下载接口
本电路板上有一个DB9串口接口,可以用来实现程序的在线下载。
在线下载的主要步骤为:
1)首先关闭本电路板的12V电源,取出串口连接线。
一头接本电路板的DB9下载口,另一头接PC机箱后的9针串口。
如果你的电脑后面没有空余9针串口,可以使用USB转串口转接头。
2)打开STC-ISP在线下载软件,进行程序的下载,具体操作方法见
STC12C5A60S2数据手册;下载完毕,从电路板上取下串口下载线。
2.2.3巡线传感器
自动机器人平台底部安装了16路巡线传感器,可以可靠地探测到地面白条以及白条的十字交叉点。
光源发射部分采用了16个高亮LED发射管,用16个光敏电阻接受地面反射回来的光线,输出插座连接传感器信号处理板的
巡线传感器输入接口。
2.2.4传感器信号处理板
1.概述
传感器信号处理板仅自动机器人平台使用,电路板实物如图2-8所示。
图中,巡线传感器输入接口连接安装在机器人平台底部的16路巡线传感器;信号输出接口连接单片机控制板,插座JP接12V电源,注意板子上的电源正极标志,不要插反。
图2-8 传感器信号处理板
16路巡线传感器将采集到的地面白条信息送入本电路板,对于采集的信息先进行放大处理,放大后的信号跟标准电压比较,保留白条反射的有效信号,过滤掉地面背景反射信号,有效信号再通过稳压、反向、放大处理后送入单片机控制板,同时用发光二极管的亮暗指示当前某路传感器是否在地面白条上。
2.信号放大电路
本电路板使用了16路信号放大电路,第一路传感器信号放大电路如图2-9所示。
(其余15路电路均相同)
图2-9 信号放大电路
2-9中,Q0为单路传感器输入信号,数值很小,若巡线传感器在地面白条上,大约在0.9V左右;若巡线传感器不在地面白条上,数值大约在0.3V
左右,此信号输入到由运放LM324组成的同相放大电路,调节电位器RW1可以改变整个放大电路的放大倍数(实际电路中,RL使用了阻值1KΩ的排阻),即调节了放大电路输出的QQ0。
若Q0为地面白条反射的有效信号,通过调节RW1,使QQ0的电压输出为9.5V-10V左右,若Q0为地面背景反射的信号,根据地面背景的颜色以及光滑程度,QQ0大致在4-6V左右,越低越好。
3、自动机器人平台的装配和调试
3.1机器人装配过程
机器人底盘安装即把主动轮,电机,从动轮,传感器依次安装至底盘铝合金框架上以及完成线路板之间的连接。
3.1.1主动轮电机装配
安装步骤:
从左至右,依次结合螺栓,主动轮,连接钢板,以及电机,并且旋紧,把三个轮套套在主动轮上。
3.1.2电机安装至铝合金架板
直流电机直接对准相应钢板部位,螺丝旋紧即可。
3.1.3从动轮及传感器安装
从动轮和传感器直接对准相应部位,螺丝旋紧即可。
3.1.4电路板的安装
1.将三个电池固定在平台上。
2.将传感器信号处理板、电机驱动板、主控制板从下至上叠加在一起,固定了平台上。
3.连接信号线:用20芯排线连接16路巡线传感器的输出和传感器信号处理板的传感器输入接口;用20芯排线连接传感器信号处理板的信号输出接口与主控制板的16路传感器输入接口;面板上的启动按钮连接主控制板的启动按钮插座;用10芯排线连接主控制板的左右车轮电机接口与电机驱动板的控制信号接口;左右车轮电机连接电
机驱动板的左右电机输出插座。
4.连接电源线:12V电源线连接主控制板的12V电源输入插座;主控制板的12V电源输出插座连接传感器信号处理板的12V电源输入插座;24V电源连接电机驱动板的24V电源插座。
连接电源时,务必确认主板上电源插座的正负极,切勿插反。
3.2机器人平台的调试
在机器人平台全部安装完毕,初步检查无误后,下一步就进行必要的调试,主要的调试步骤如下:
1.进行传感器信号处理板的调试。
2.将程序下载到单片机中。
3.将机器人平台放到场地上。
4.先后打开12V电源和24V电源,按下启动按钮,观察机器人平台运行情况。
4、可行性的上部机器手臂设计方案
第一代旋转机构主要采用舵机控制云台见下图:
但是第一代机器人上部机构设计完成后,发现设计过于复杂,所用的传感器在不接扩展板的情况下,用一片单片机远远不能对其进行精密控制,导致第一代机器人设计失败。
鉴于此情况我们参赛小组又连日赶制第二代上部机构,第二代机器人的上部机构去掉了旋转云台,采用二维设计,这种设计的灵活度虽没有第一代上部机构灵活度高,但便于控制,如图:
连日来赶制的第二代机器人上部机构终于完工,但小组成员并没有高兴起来,因为二代机器人上部机构由于Y轴步进电机的功率过小,导致不能正常的驱动机器手进行上下移动,此时小组成员以陷入困境。
辛辛苦苦做出来的二代机器手却因为Y轴步进电机功率过小而不能使机器手动作,鉴于此情况我们当中的一位成员突然想到电梯的结构,大多数电梯都有配重装置,我们马上开工,对二代上部机构进行改进,做出了第三代机器人上部机构,如下图:
此处说明:Y轴步进电机不能采用功率非常大的电机,因为Y轴步进电机的动作是最频繁的,功率过大后很有可能导致蓄电池的电能在没有完成任务之前就没电啦。
5、驱动软件的编写及调试
;-----------****河北能源职业技术学院机器人小组调试程序*****---------------------
;---------------------***以下为伪指令定义程序***--------------------
NUM EQU 7FH ;
COUNT EQU 7EH ;需要循迹的路线条数
HLWP bit P1.0 ;
start bit P1.1 ;
RDIR bit P1.2 ; ;右电机
RPWM bit P1.3 ;
LPWM bit P1.4 ;
LDIR bit P1.5 ; ;左电机
CCON EQU 0D8H;PCA 控制寄存器
CL EQU 0E9H; //PCA 计数器低位
CH EQU 0F9H; //PCA 计数器高位
CMOD EQU 0D9H; //PCA 工作模式寄存器
CCAP0L EQU 0EAH; //PCA 模块 0 的捕捉/比较寄存器低 8 危
CCAP0H EQU 0FAH; //PCA 模块 0 的捕捉/比较寄存器高 8 位
CCAP1L EQU 0EBH; //PCA 模块 1 的捕捉/比较寄存器低 8 位。
CCAP1H EQU 0FBH; //PCA 模块 1 的捕捉/比较寄存器高 8 位。
Fosc_0 EQU 79H;Fosc_0为PWM0占空比设置形参,右电机
Fosc_1 EQU 7AH;Fosc_1为PWM1占空比设置形参,左电机
CCAPM0 EQU 0DAH; //PCA 模块0 PWM 寄存器
CCAPM1 EQU 0DBH; //PCA 模块1 PWM 寄存器
PCA_PWM0 EQU 0F2H; //PCA 模块0 PWM 寄存器
PCA_PWM1 EQU 0F3H; //PCA 模块1 PWM 寄存器?
forward EQU 1 ;
backward EQU 0 ;
P1M1 EQU 91H ;
P1M0 EQU 92H ;
P2M1 EQU 95H ;
P2M0 EQU 96H ;
P4SW EQU 0BBH ;
;---------------------- 以下为传感器低高8位-------------------- ;-------------------HLWP=0时读取低八位,WL_WP=1时读取高八位-------------------
WP_0_8 EQU P2.0 ;
WP_1_9 EQU P2.1 ;
WP_2_10 EQU P2.2 ;
WP_3_11 EQU P2.3 ;
WP_4_12 EQU P2.4 ;
WP_5_13 EQU P2.5 ;
WP_6_14 EQU P2.6 ;
WP_7_15 EQU P2.7 ;
;-----------------
S2CON EQU 9AH ;
IE2 EQU 0AFH ;
S2BUF EQU 9BH ;
AUXR EQU 8EH ;
AUXR1 EQU 0A2H ;
BRT EQU 9CH ;
IAP_CONTR EQU 0C7H ;
RELOAD_COUNT EQU 0FDH;串行口波特率设置为9600
;------------------------*****以下为主程序*****-------------------
ORG 0000H
LJMP MAIN
ORG 0043H
LJMP MAIN_1
ORG 0100H
;*************************************************************** ************** MAIN: mov c,start ; 检测小车启动键是否按下
JC MAIN ;
MOV SP,#0C0H ;
MOV S2CON,#50H ;串口2方式1
MOV BRT,#RELOAD_COUNT ; 设定波特率为9600
MOV AUXR,#11H ;
MOV IE2,#01H ;
SETB EA
MOV AUXR1,#10H ;
MOV 41H,#00H ;以下是等待裁判的出发命令, MOV 51H,#00H ;以下是等待裁判的出发命令, MOV 61H,#00H ;以下是等待裁判的出发命令, MOV 71H,#00H ;以下是等待裁判的出发命令,MAIN_WAIT1: MOV A,41H
CJNE A,#03H,MAIN_WAIT1;
MAIN_WAIT2: MOV A,51H
CJNE A,#04H,MAIN_WAIT2;
MAIN_WAIT3: MOV A,61H
CJNE A,#05H,MAIN_WAIT3;
MAIN_WAIT4: MOV A,71H
CJNE A,#09H,MAIN_WAIT4;
MOV AUXR1,#00H
MOV AUXR,#00H
MOV IE2,#00H
CLR EA
LCALL S_T ;.........................................
LCALL QIAN1
LCALL TURN_90L
LCALL QIAN1
LCALL QIAN1
;发关键点1信息
LCALL QIAN1
LCALL QIAN1
;发关键点2信息
LCALL QIAN1
LCALL TURN_90R
LCALL QIAN1
LCALL TURN_90L
LCALL QIAN1
LCALL QIAN1
;到货架位置了,扫描工件代码
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL TURN_90R
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
;发关键点3信息
LCALL QIAN1
MAIN_JIAOTONG:LCALL QIAN1
DJNZ 74H,MAIN_JIAOTONG
LCALL TURN_90R
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
;发关键点4信息
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
LCALL QIAN1
SJMP $
QIAN1: nop
QIAN1_1:LCALL JIU_PIAN
LCALL CAIYAN_16
MOV A,COUNT
CJNE A,#1H,QIAN1_1
RET
;*************************************************************** **********
;-------------------------以下为S_T初始化程序---------------------------
S_T:
MOV P1M1,#00H;
MOV P1M0,#18H;
MOV P2M1,#0ffH;
MOV P2M0,#00H;
MOV P4SW,#50H; //P4.4和P4.6口设置,都为I/O输出口
LCALL PWM0_1; //PWM的初始化设置
RET
;---------------------- 以下为MOTOR程序------------------------------------
MOTOR:MOV CMOD,#80H
MOV CCON,#00H
MOV CL,#00H
MOV CH,#00H
SETB 0A8h.6 ;开PCA中断
SETB EA ;开总中断
SETB 0d8h.6 ;将PCA计数器打开,非常重要
; SETB RDIR;forward 左电机正转向后走,以一个轮的为前,双轮为后
MOV CCAP0H,Fosc_1
MOV CCAP0L,Fosc_1
MOV CCAPM0,#42H;//8位PWM输出,无中断
MOV PCA_PWM0,#00H ;有脉冲输出,值为03H时无脉冲输出
; clr LDIR;backward 右电机反转向前走,以一个轮的为前,双轮为后
MOV CCAP1H,Fosc_0
MOV CCAP1L,Fosc_0
MOV CCAPM1,#42H; //8位PWM输出,无中断
MOV PCA_PWM1,#00H
RET
;---------------------- 以下为PWM0占空比设置------------------------------------
PWM0: MOV CCAP0H,#150
MOV CCAP0L,#150
MOV CCAPM0,#42H;//8位PWM输出,无中断
MOV PCA_PWM0,#00H ;有脉冲输出,值为03H时无脉冲输出
RET
;---------------------- 以下为PWM1占空比设置------------------------------------
PWM1:
MOV CCAP1H,#250
MOV CCAP1L,#250
MOV CCAPM1,#42H; //8位PWM输出,无中断
MOV PCA_PWM1,#00H
RET
;---------------------- 以下为PCA时钟源控制寄存器计数初值设置--------------------
PWM0_1:
MOV CCON,#00H
MOV CH,#00H
MOV CL,#00H
MOV CMOD,#00H
RET
;---------------------- 以下为DELAY_MS程序------------------------------------
DELAY_MS: ; 调用延时程序前要赋值给R6
DL0: MOV R7,#250
DL1: NOP
NOP
DJNZ R7,DL1
DJNZ R6,DL0
RET
;---------------------- 以下为STOP_L程序------------------------------------
STOP_L:
MOV CCAP0H,#0
MOV CCAP0L,#0
MOV CCAPM0,#42H
MOV PCA_PWM0,#0
RET
;---------------------- 以下为STOP_R程序------------------------------------
STOP_R:
MOV CCAP1H,#0
MOV CCAP1L,#0
MOV CCAPM1,#42H
MOV PCA_PWM1,#0
RET
;---------------------- 以下为TURN_90R程序--------------
TURN_90R:
TURN_0R: MOV Fosc_0,#165 ;左电机速度
MOV Fosc_1,#165 ;右电机速度
CLR RDIR
SETB LDIR
LCALL MOTOR
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
CLR P1.0 ;选择低8位巡线发光管
MOV A,P2
ANL A,#0E0H
CJNE A,#0,TURN_1R
SJMP TURN_0R
TURN_1R: MOV R6,#10 ;检测第二遍
LCALL DELAY_MS
CLR P1.0 ; 选择低8位巡线发光管
MOV A,P2
ANL A,#0E0H
CJNE A,#0,TURN_2R
SJMP TURN_0R
TURN_2R:
RET
;---------------------------------------------------------------------------------------
;---------------------- 以下为TURN_90L程序---------------- TURN_90L:
TURN_0L: MOV Fosc_0,#165 ;左电机速度
MOV Fosc_1,#165 ;右电机速度
SETB RDIR
CLR LDIR
LCALL MOTOR
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
MOV R6,#250
LCALL DELAY_MS
SETB P1.0 ; 选择高8位巡线发光管
MOV A,P2
ANL A,#07H
CJNE A,#0,TURN_1L
SJMP TURN_0L
TURN_1L: MOV R6,#10
LCALL DELAY_MS
SETB P1.0 ; 选择高8位巡线发光管
MOV A,P2
ANL A,#07H
CJNE A,#0,TURN_2L
SJMP TURN_0L
TURN_2L: MOV Fosc_0,#160 ;左边电机
MOV Fosc_1,#160;右边电机
SETB RDIR
SETB LDIR
LCALL MOTOR
MOV R6,#100 ;延时1000ms
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
RET
;--------------------------需要数的线路条数-----------------------------------
CAIYAN_16:MOV COUNT,#00H
MOV NUM,#00H
CLR P1.0 ;选择低8位巡线发光管 MOV A,P2
MOV R7,#8
CLR C
CAIY_L0: RRC A
JNC CAIY_L1
INC NUM
CAIY_L1: DJNZ R7,CAIY_L0
SETB P1.0 ;选择高8位巡线发光管
MOV A,P2
MOV R7,#8
CLR C
CAIY_L3: RRC A
JNC CAIY_L4
INC NUM
CAIY_L4: DJNZ R7,CAIY_L3
MOV A,NUM
CJNE A,#9,CAIY_L5
INC COUNT
LJMP CAIY_L_END
CAIY_L5:
CJNE A,#10,CAIY_L6
INC COUNT
LJMP CAIY_L_END
CAIY_L6:
CJNE A,#11,CAIY_L7
INC COUNT
LJMP CAIY_L_END
CAIY_L7:
CJNE A,#12,CAIY_L8
INC COUNT
LJMP CAIY_L_END
CAIY_L8:
CJNE A,#13,CAIY_L9
INC COUNT
LJMP CAIY_L_END
CAIY_L9:
CJNE A,#14,CAIY_LA
INC COUNT
LJMP CAIY_L_END
CAIY_LA:
CJNE A,#15,CAIY_LB
INC COUNT
LJMP CAIY_L_END
CAIY_LB:
CJNE A,#16,CAIY_L_END
INC COUNT
CAIY_L_END:
RET
;-------------------以下为纠偏走直线程序-----------------------------
JIU_PIAN:
CLR P1.0 ;检测低八位
MOV A,P2
ANL A,#20H
JZ LOOP_HIGH_1
MOV Fosc_0,#215
MOV Fosc_1,#140 ;右边电机
SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LOOP_HIGH_1:
SETB P1.0 ;检测高八位
MOV A,P2
ANL A,#04H
JZ LOOP_LOW_2
MOV Fosc_0,#140
MOV Fosc_1,#215 ;ZUO
SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_LOW_2:
CLR P1.0 ;检测低八位MOV A,P2
ANL A,#10H
JZ LOOP_HIGH_2
MOV Fosc_0,#215 MOV Fosc_1,#140 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_HIGH_2:
SETB P1.0 ;检测高八位MOV A,P2
ANL A,#08H
JZ LOOP_LOW_3
MOV Fosc_0,#140 MOV Fosc_1,#215 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_LOW_3:
CLR P1.0 ;检测低八位MOV A,P2
ANL A,#08H
JZ LOOP_HIGH_3
MOV Fosc_0,#205 MOV Fosc_1,#140 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_HIGH_3:
SETB P1.0 ;检测高八位MOV A,P2
ANL A,#10H
JZ LOOP_LOW_4
MOV Fosc_0,#140 MOV Fosc_1,#205 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_LOW_4:
CLR P1.0 ;检测低八位MOV A,P2
ANL A,#04H
JZ LOOP_HIGH_4
MOV Fosc_0,#205 MOV Fosc_1,#140 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_HIGH_4:
SETB P1.0 ;检测高八位MOV A,P2
ANL A,#20H
JZ LOOP_LOW_5
MOV Fosc_0,#140 MOV Fosc_1,#205 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_LOW_5:
CLR P1.0 ;检测低八位MOV A,P2
ANL A,#02H
JZ LOOP_HIGH_5
MOV Fosc_0,#210 MOV Fosc_1,#140 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_HIGH_5:
SETB P1.0 ;检测高八位MOV A,P2
ANL A,#40H
JZ LOOP_LOW_6
MOV Fosc_0,#140 MOV Fosc_1,#210 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_LOW_6:
CLR P1.0 ;检测低八位MOV A,P2
ANL A,#01H
JZ LOOP_HIGH_6
MOV Fosc_0,#225 MOV Fosc_1,#140 SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS LCALL DELAY_MS LCALL DELAY_MS
LOOP_HIGH_6:
SETB P1.0 ;检测高八位
MOV A,P2
ANL A,#80H
JZ LOOP_end
MOV Fosc_0,#140
MOV Fosc_1,#225
SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LOOP_end:
MOV Fosc_0,#140 ;左边电机
MOV Fosc_1,#140;右边电机
SETB RDIR
SETB LDIR
LCALL MOTOR
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
LCALL DELAY_MS
RET
;--------------MAIN_1中断程序---------------------------------------------------
MAIN_1:setb RS1 ;中断程序用第2组工作寄存器
MOV IE2,#00H ;关闭串口2中断
LCALL JS_1T
;------------------判断机器人的地址----------
MOV A,30H
CJNE A,#01H,MAIN_1_L3
LJMP MAIN_1_L4
MAIN_1_L3:CJNE A,#0FEH,MAIN_1_END ;此处说明书上错误
MAIN_1_L4:LCALL crc_jy ;调用校验计算子程序,完成一个接收命令校验码的计算
LCALL jy_bj ;调用校验比较子程序,完成一个接收命令的校验
CJNE R2,#00H,MAIN_1_END;如果收到错误的命令,中断子程序返回
;JNB F0, MAIN_1_END
LCALL mingling_zhuancun;把不同的命令存入不同的缓冲区位置,每次转存一条命令
MOV R0,#30H
ORL 31H,#0A0H ;将发送来的功能码改为回应的功能码
LCALL crc_jy ;调用校验子程序,完成一个发送命令的校验 MOV 3EH,R6
MOV @R0,3EH ;以下3行是将校验码存放到发送命令的尾部 INC R0
MOV 3FH,R7
MOV @R0,3FH
MOV R0,#30H
MAIN_1_LP1: MOV A,@R0
LCALL UART2_FASONG
INC R0
DJNZ R5,MAIN_1_LP1
MAIN_1_END: MOV IE2,#01H ;打开串口2中断
NOP
NOP
CLR RS1
RETI ; MAIN_1中断子程序的返回
;------------*****接收一条完整命令的子程序****-------------------------------------------------------
JS_1T: MOV R0,#30H
MOV R4,#3
JS_1T_L1: LCALL UART2_receive
MOV @R0,A
INC R0
JS_1T_L4: DJNZ R4, JS_1T_L1
DEC R0 ;计算再接受多少次,次数存入R4中
MOV A,@R0
INC R0
ADD A,#2
MOV R4, A
ADD A,#3
MOV R5,A ;R5是统计总的接收次数
JS_1T_L2:LCALL UART2_receive
MOV @R0,A
INC R0
DJNZ R4,JS_1T_L2
RET ;接收一条完整命令的子程序返回
;------------------------------------
;----- ----***以下为转存接收到的一条命令的子程序***--------------------------------------
mingling_zhuancun:MOV 49H,#9
MOV R0,#30H
MOV A,31H
CJNE A,#03H, mingling_1
MOV R1,#40H ;40H存放抓取工件的命令
SJMP mingling_lp
mingling_1:CJNE A,#04H, mingling_2
MOV R1,#50H ;50H存放装配台安装的命令
SJMP mingling_lp
mingling_2:CJNE A,#05H, mingling_3
MOV R1,#60H ;60H存放启动的命令
SJMP mingling_lp
mingling_3:CJNE A,#09H, mingling_4
MOV R1,#70H ;70H存放红绿灯的命令
SJMP mingling_lp
mingling_4:NOP
NOP
SJMP mingling_5
NOP
mingling_lp:MOV A,@R0
INC R0
MOV @R1,A
INC R1
DJNZ 49H,mingling_lp
mingling_5:RET
;-------------------****以下为串行口2接收子程序****------------- UART2_receive:MOV A,S2CON ; 检测RI是否为0
ANL A,#01H
CJNE A,#01H,UART2_receive
MOV A,S2CON ;清除RI标志
ANL A,#0FEH ;
MOV S2CON,A ;
MOV A,S2BUF ;接收数据到缓冲区
RET ;串行口2接收子程序返回
;----------------------***以下为串行口2发送子程序***-------------------
UART2_FASONG: PUSH ACC
MOV A,S2CON ; 清除TI位
ANL A,#0FDH
MOV S2CON,A
POP ACC
MOV S2BUF,A
UART2_SEND_WAIT:
MOV A,S2CON
ANL A,#02H
CJNE A,#02H, UART2_SEND_WAIT
MOV A,S2CON ; 清除TI位
ANL A,#0FDH
MOV S2CON,A
RET ;串行口2发送子程序返回
;---------------***以下为校验码计算子程序***----------------
crc_jy:MOV R7,#0FFH ;crch初始化
MOV R6,#0FFH ;crcl初始化
MOV R0,#30H
MOV A,32H
ADD A,#3
MOV R1,A
jy_LOOP:MOV A,R6
XRL A,@R0
INC R0
MOV R6,A。