实验报告机器人控制技术基础实验报告

  • 格式:doc
  • 大小:123.51 KB
  • 文档页数:14

华北电力大学

实 验 报 告

|

|

实验名称: 机器人控制技术基础

课程名称: 机器人控制技术基础

|

|

实 验 人:

成 绩: 18.00秒

指导教师:

实验日期: 年 月 日- 月 日

华北电力大学工程训练中心

第一部分:单片机开发板

实验一:LED灯闪烁实验

实验目的:通过此实验,让大家初步掌握单片机的 IO 口的基本操作和感受单片机学习的乐趣

实验内容:用常用的指令编写,控制接在 P0.0 上的 LED 发光二极管 L0 做闪烁实验

硬件说明:

通过原理图,我们可以发现,要让接在 P0.0 的 L0 做亮灭实验,得先选通

LED 的电源供应三极管(这是我们设计的一个特殊地方,是为了方便和同时接在

P0 口的数码管实现端口的复用,节省 IO 口)然后只要让 P0.0 的端口电平为 0,L0 就会亮.让 P0.0 的端口电平为 1,L0 就回灭. 端口,所以实验前要先把液晶模块的使能端置为 0由于 P0 口是 LED、数码管和液晶模块共用端口,所以实验前要先把液晶模块的使能端置为 0

以下的程序将实现这个功能

源程序如下:

ORG 0000H ;CPU 上电复位后,从 0000H 开始执行

LJMP MAIN ;跳转到 MAIN 主程序

ORG 0100H ;主程序从 0100H 开始,避开中断入口区地址

MAIN:

CLR P3.7 ;选通 LED 的电源供应三极管

CLR P2.7 ;由于 P0 口是 LED、数码管和液晶模块共用端口,所以实验前要先把液晶模

块的使能端置为 0

MOV P0,#0FFH ;把 P0 口置一,熄灭 8 个发光二极管

LOOP:

CLR P0.0 ;把 P0.0 清零,低电平点亮 L0

LCALL DELAY ;调用延时子程序

SETB P0.0 ;把 P0.0 置 1,高电平熄灭 L0

LCALL DELAY ;调用延时子程序

LJMP LOOP ;回到 LOOP,不断的循环执行程序

; 延时子程序,改变 R5、R6、R7 的值,可以改变延时的时间,从而改变

LED 的闪烁速度速度

DELAY: MOV R5,#40

D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$ DJNZ R6,D2

DJNZ R5,D1

RET

END

实验二:按键控制的LED灯亮灭实验

实验目的:掌握简单的按键检测编程方法

实验内容:

监视按键 K16(接在 P3.3 端口上,即 INT1),用发光二极管 L0(接在单片机 P0.0 端口上)显示开关状态。如果按住按键,则 L0 亮;松开按键,则 L0

熄灭。

开关状态的检测过程:单片机对开关状态的检测相对于单片机来说,是从单片机的 P3.3 端口输入信号,而输入的信号只有高电平和低电平两种,当松开按键 K16 ,即输入端口悬空为高电平当按住按键 K16 ,按键被接到地,即输入低电平单片机可以采用 JB BIT,REL 或者是 JNB BIT,REL 指令来完成对开关状态的检测即可。

源程序如下:

ORG 0000H

LJMP START

ORG 0100H

START:

CLR P3.7 ;选通 WS系列实验板的 LED 流水灯的电源控制端

CLR P2.7 ;由于 P0 口是 LED、数码管和液晶模块共用端口,所以实验前要先把液晶模块的

使能端置为 0

JB P3.3,LOOP ;检测按键,当 P3.3=1 则跳到 LOOP;当

P3.3=0 则往下执行

CLR P0.0 ;灯亮 SJMP START

LOOP: SETB P0.0 ;灯灭

SJMP START ;回到主程序循环检测按键

END

第二部分:机器人小车

内容简介:机器人小车完成如图规定的赛道,从规定的起点开始,记录完成赛道一圈的时间。必须在三分钟之内完成,超时无效。其中当小车整体都在赛道外时停止比赛,视为犯规, 小车不规定运动方向,顺时针和逆时针都可以采用,但都从规定的起点开始记录时间。

作品优点及应用前景:

可靠性高,编程简单单片机执行一条指令的时间是μs级,执行一个扫描周期的时间为几ms乃至几十ms。相对于电器的动作时间而言,扫描周期是短暂的,可以认为在一个扫描周期内输入端子的状态是不变的,而对其状态变化的采集和处理也是实时的,从而满足了实时控制的要求。 本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和控制核心,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶, 通过控制单片机进而控制小车,体现了智能化,通过使用不同的函数及设定不同的函数参数,能够在不同的要求下改变小车的前后轮转动方向以及转动速度,来完成不同的目的要求。在画正方形的同时能够完成四个1/4圆弧的制作。

可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。一些危险事故中,凭借其特殊的履带来保持行进的稳定性,进而完成由程序指导的规定动作。如在已知楼内布置的情况下,可以在小车上装上红外感应器来搜寻是否有遇难者留在楼中。

实验内容:

第一次实验内容:发放实验仪器、下装Keil uVision IDE 集成开发环境、SL ISP下载编程烧录软件、串口调试软件。简单的LED灯闪烁实验、两个按键控制LED灯亮灭实验、单键控制LED灯亮灭,中断控制的两灯闪烁实验等。

第二次实验内容:智能小车运动测试、传感器电路搭建。

第三次实验内容:智能小车循线测试。

第四次实验内容:智能小车循线测试。

循迹实验场地图:

传感器电路图:

源程序:

#include

sbit light1=P1^0;

sbit light2=P1^1;

sbit redlight=P3^4;//输出38.5kHz频率

sbit dianjipwmL=P1^2;//左侧电机pwm控制

sbit dianjipwmL_1=P3^2;//左侧电机1

sbit dianjipwmL_2=P3^3;//左侧电机2

sbit dianjipwmR=P1^3;//右侧电机pwm控制

sbit dianjipwmR_1=P3^0;//右侧电机1

sbit dianjipwmR_2=P3^1;//右侧电机2

sbit k1=P1^4;

sbit k2=P1^5;

sbit L1=P0^0;//左侧传感器

sbit R1=P0^1;//右侧传感器 unsigned char

dianjiL_hh,dianjiL_hl,dianjiR_hl,dianjiR_ll,dianjiR_hh,dianjiR_lh,dianjiL_ll,dianjiL_lh,flag=0;

/********************定时器0计时初始化函数**************************/

void timer0init()

{

TMOD=0x12;//定时器0工作方式2,定时器1工作方式1

IP=0x02;

TH0=256-13;

TL0=256-13;

EA=1; //开总中断

ET0=1; // 允许T2定时器中断

TR0=1; // 启动T2定时器

}

/*******************************************************************/

void timer0(void) interrupt 1 //定时器2中断服务子程序产生38.5kHz方波

{

redlight=!redlight;

}

/**********************电机L初始化*******************************/

void timer1init() //电机pwm频率1kHz

{

dianjiL_hh=(65536-200)/256; //所给数值为电机L占空比

dianjiL_hl=(65536-200)%256;

dianjiL_lh=(65536-800)/256;

dianjiL_ll=(65536-800)%256; TH1=dianjiL_hh;

TL1=dianjiL_hl;

ET1=1;

TR1=1;

}

/*******************************************************************/

/**********************电机L中断服务程序***************************/

void timer1(void) interrupt 3

{

if(dianjipwmL)

{TH1=dianjiL_lh;

TL1=dianjiL_ll;

dianjipwmL=!dianjipwmL;}

else

{TH1=dianjiL_hh;

TL1=dianjiL_hl;

dianjipwmL=!dianjipwmL;}

}

/*****************************************************************/

/********************电机R初始化函数****************************/

void timer2init()

{

T2CON=0x01; //十六位自动重装模式

dianjiR_hh=(65536-200)/256; //所给数值为电机L占空比

dianjiR_hl=(65536-200)%256;

dianjiR_lh=(65536-800)/256;