《机器人控制技术基础》报告Word格式.docx
- 文档编号:3855578
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:13
- 大小:79.34KB
《机器人控制技术基础》报告Word格式.docx
《《机器人控制技术基础》报告Word格式.docx》由会员分享,可在线阅读,更多相关《《机器人控制技术基础》报告Word格式.docx(13页珍藏版)》请在冰点文库上搜索。
源程序如下:
ORG0000H;
CPU上电复位后,从0000H开始执行
LJMPMAIN;
跳转到MAIN主程序
ORG0100H;
主程序从0100H开始,避开中断入口区地址
MAIN:
CLRP3.7;
选通LED的电源供应三极管
CLRP2.7;
由于P0口是LED、数码管和液晶模块共用端口,所以实验前要先把液晶模
块的使能端置为0
MOVP0,#0FFH;
把P0口置一,熄灭8个发光二极管
LOOP:
CLRP0.0;
把P0.0清零,低电平点亮L0
LCALLDELAY;
调用延时子程序
SETBP0.0;
把P0.0置1,高电平熄灭L0
LJMPLOOP;
回到LOOP,不断的循环执行程序
;
延时子程序,改变R5、R6、R7的值,可以改变延时的时间,从而改变LED的闪烁速度速度
DELAY:
MOVR5,#40
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
实验二:
按键控制的LED灯亮灭实验
掌握简单的按键检测编程方法
监视按键K16(接在P3.3端口上,即INT1),用发光二极管L0(接在单片机P0.0端口上)显示开关状态。
如果按住按键,则L0亮;
松开按键,则L0熄灭。
开关状态的检测过程:
单片机对开关状态的检测相对于单片机来说,是从单片机的P3.3端口输入信号,而输入的信号只有高电平和低电平两种,当松开按键K16,即输入端口悬空为高电平当按住按键K16,按键被接到地,即输入低电平单片机可以采用JBBIT,REL或者是JNBBIT,REL指令来完成对开关状态的检测即可。
ORG0000H
LJMPSTART
ORG0100H
START:
CLRP3.7;
选通WS系列实验板的LED流水灯的电源控制端
CLRP2.7;
由于P0口是LED、数码管和液晶模块共用端口,所以实验前要先把液晶模块的
使能端置为0
JBP3.3,LOOP;
检测按键,当P3.3=1则跳到LOOP;
当P3.3=0则往下执行
CLRP0.0;
灯亮
SJMPSTART
灯灭
SJMPSTART;
回到主程序循环检测按键
第二部分:
机器人小车
内容简介:
机器人小车完成如图规定的赛道,从规定的起点开始,记录完成赛道一圈的时间。
必须在三分钟之内完成,超时无效。
其中当小车整体都在赛道外时停止比赛,视为犯规,小车不规定运动方向,顺时针和逆时针都可以采用,但都从规定的起点开始记录时间。
作品优点及应用前景:
可靠性高,编程简单单片机执行一条指令的时间是μs级,执行一个扫描周期的时间为几ms乃至几十ms。
相对于电器的动作时间而言,扫描周期是短暂的,可以认为在一个扫描周期内输入端子的状态是不变的,而对其状态变化的采集和处理也是实时的,从而满足了实时控制的要求。
本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和控制核心,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,通过控制单片机进而控制小车,体现了智能化,通过使用不同的函数及设定不同的函数参数,能够在不同的要求下改变小车的前后轮转动方向以及转动速度,来完成不同的目的要求。
在画正方形的同时能够完成四个1/4圆弧的制作。
可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
一些危险事故中,凭借其特殊的履带来保持行进的稳定性,进而完成由程序指导的规定动作。
如在已知楼内布置的情况下,可以在小车上装上红外感应器来搜寻是否有遇难者留在楼中。
第一次实验内容:
发放实验仪器、下装KeiluVisionIDE集成开发环境、SLISP下载编程烧录软件、串口调试软件。
简单的LED灯闪烁实验、两个按键控制LED灯亮灭实验、单键控制LED灯亮灭,中断控制的两灯闪烁实验等。
第二次实验内容:
智能小车运动测试、传感器电路搭建。
第三次实验内容:
智能小车循线测试。
第四次实验内容:
循迹实验场地图:
传感器电路图:
源程序:
#include<
reg52.h>
sbitlight1=P1^0;
sbitlight2=P1^1;
sbitredlight=P3^4;
//输出38.5kHz频率
sbitdianjipwmL=P1^2;
//左侧电机pwm控制
sbitdianjipwmL_1=P3^2;
//左侧电机1
sbitdianjipwmL_2=P3^3;
//左侧电机2
sbitdianjipwmR=P1^3;
//右侧电机pwm控制
sbitdianjipwmR_1=P3^0;
//右侧电机1
sbitdianjipwmR_2=P3^1;
//右侧电机2
sbitk1=P1^4;
sbitk2=P1^5;
sbitL1=P0^0;
//左侧传感器
sbitR1=P0^1;
//右侧传感器
unsignedchardianjiL_hh,dianjiL_hl,dianjiR_hl,dianjiR_ll,dianjiR_hh,dianjiR_lh,dianjiL_ll,dianjiL_lh,flag=0;
/********************定时器0计时初始化函数**************************/
voidtimer0init()
{
TMOD=0x12;
//定时器0工作方式2,定时器1工作方式1
IP=0x02;
TH0=256-13;
TL0=256-13;
EA=1;
//开总中断
ET0=1;
//允许T2定时器中断
TR0=1;
//启动T2定时器
}
/*******************************************************************/
voidtimer0(void)interrupt1//定时器2中断服务子程序产生38.5kHz方波
redlight=!
redlight;
/**********************电机L初始化*******************************/
voidtimer1init()//电机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中断服务程序***************************/
voidtimer1(void)interrupt3
if(dianjipwmL)
{TH1=dianjiL_lh;
TL1=dianjiL_ll;
dianjipwmL=!
dianjipwmL;
else
{TH1=dianjiL_hh;
}
/*****************************************************************/
/********************电机R初始化函数****************************/
voidtimer2init()
T2CON=0x01;
//十六位自动重装模式
dianjiR_hh=(65536-200)/256;
dianjiR_hl=(65536-200)%256;
dianjiR_lh=(65536-800)/256;
dianjiR_ll=(65536-800)%256;
TH2=dianjiR_hh;
//T2定时器初值
TL2=dianjiR_hl;
ET2=1;
TR2=1;
//启动T2定时器
/******************************************************************/
voidtimer2(void)interrupt5
TF2=0;
//中断溢出位清零
TR2=0;
//关定时器2
if(dianjipwmR)
{TH2=dianjiR_lh;
TL2=dianjiR_ll;
dianjipwmR=!
dianjipwmR;
{TH2=dianjiR_hh;
}
/*****************赛道检测函数***********************************/
voidflag_test(void)
if(!
L1&
&
R1)
flag=1;
elseif(L1&
!
flag=2;
flag=0;
/******************电机系数赋值函数L********************************/
voiddianjiL_set(intb)
{dianjiL_lh=(65536-1000+b)/256;
dianjiL_ll=(65536-1000+b)%256;
dianjiL_hh=(65536-b)/256;
dianjiL_hl=(65536-b)%256;
/******************电机系数赋值函数R********************************/
voiddianjiR_set(intb)
{dianjiR_lh=(65536-1000+b)/256;
dianjiR_ll=(65536-1000+b)%256;
dianjiR_hh=(65536-b)/256;
dianjiR_hl=(65536-b)%256;
voidmain()
{light1=0;
//指示灯亮,检测主函数是否已执行。
timer0init();
timer1init();
timer2init();
dianjipwmL_1=1;
dianjipwmR_1=0;
dianjipwmL_2=0;
dianjipwmR_2=1;
while
(1)
{
light2=0;
//指示灯亮,检测是否进入循环
flag_test();
switch(flag)
{
case1:
//左转
dianjiR_set(250);
//电机输出功率,最大为1000.dianjiL_set(55);
break;
case2:
//右转
dianjiR_set(100);
dianjiL_set(260);
default:
}
第三部分:
心得体会、合理性建议或意见
1.工程素质和技能归纳:
C51系列单片机KeiluVisionIDE(集成开发环境)软件和ISP下载软件的下载和安装。
ZC-51Z教学板与计算机或者笔记本的连接。
如何在集成开发环境中创建目标工程文件,并添加和编辑C语言源程序。
C语言程序的编译和下载。
串口调试终端的使用。
C语言基本知识:
基本数据类型、常量、变量、运算符、表达式。
51单片机定时器的多路使用。
2.科学精神的培养:
查阅参考书,了解其他数据类型、算术运算符和定时器的知识。
3.团队合作能力的锻炼:
在做车的过程中,遇到困难在所难免,特别是电路板的焊接调试,大家各司其职相互合作,最终完成了比赛。
4.本次试验将传统的学习单片机原理与应用(即先理论讲解,然后实验验证)的模式,改变为先实验和实践如何应用,然后再归纳单片机原理(即先实践,后归纳)的模式,并以智能小车作为贯穿实践过程的典型工程对象,使整个学习过程充满挑战和乐趣,大大提高学习效率。
同时在学习和实践的过程中,还可以培养我们系统的世界观和方法论。
通过本课程的学和实践,让我们领略到了信息技术世界和机器人世界的神奇。
建议:
1,、小车的制作可以适当放宽对传感器型号及数量的限制,这样可以更加拓宽大家的思路,让大家掌握更多的技术,而且很大程度上可以提高小车的速度。
2,、每年的比赛都更换跑道,并适当修改比赛规则,因为随着近两年小车的制作,大家会逐渐产生一种固定思路,小车会逐渐的千篇一律。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人控制技术基础 机器人 控制 技术 基础 报告