基于单片机的智能小车
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分全书内容概括
第一章引言和介绍
《C51单片机与应用与C语言程序设计》,介绍如何应用AT89S52作为机器人的大脑制作一款机器人,并用C语言对AT89S52进行编程,使机器人实现下述4个基本任务。
(1)安装传感器以探测周边环境;
(2)基于传感器信息做出决定;
(3)控制机器人运动(通过操作带动轮子旋转的电机);
(4)与用户交换信息。
第二章单片机AT89S52
2.1内容概述:
AT89S52单片机是控制单元的核心。起着控制小车所有运行状态的作用。使用该芯片很容易实现对其他模块的控制。通过对单片机AT89S52写入程序,可以方便的用软件来控制整个过程.
(1)AT89S52单片机最小系统包括了一路复位开关,用于小车复位。
◆P1.0输出PWM信号,
◆P1.1~P1.5分别控制电机驱动。
◆其他P口用外接控制小车的各种控制开关,
◆P0口外接10K的上拉电阻,可用于外接LCD1602。
(2)AT89S52 单片机介绍:
AT89S52 是一种低功耗、高性能CMOS8位微控制器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
其引脚排列如下:
AT89S52引脚排列图
2.2 主要性能
●与MCS-51单片机产品兼容;
● 8K字节在系统可编程Flash存储器;
● 1000次擦写周期;
●全静态操作:0Hz~33Hz;
●三级加密程序存储器;
● 32个可编程I/O口线;
●三个16位定时器/计数器;
●全双工UART串行通道;
●低功耗空闲和掉电模式;
●掉电后中断可唤醒;
●看门狗定时器;
●双数据指针;
●掉电标识符。
第三章所用软件
(1) Keil uVision2 IDE集成开发环境
(2) stc-isp-v3.97软件下载工具
(3)串口调试工具
第四章智能机器人各部分功能实现
4.1伺服电机
4.1.1运转速度
实现:高电平持续时间
描述:1)通过让单片机的输入输出口来输出不同的脉冲序列来实现控制机器人伺服电机以不同速度运动,51系列单片机有4个8位的并行
I/O口:P0、P1、P2和P3.这四个接口,既可以作为输入,也可以
作为输出,这里主要用P1口来完成机器人伺服电机的控制。
2)当高电平持续时间为1.3ms时,电机顺时针全速旋转,当高电平持续时间1.7ms时,电机逆时针全速旋转。
3)P1_0引脚的控制输出用来控制右的伺服电机,而P1_1则用来控制左边的伺服电机。
原理图如下:
4.1.2所用函数
(1)延时函数
要生成伺服电机的控制信号,就需要用另一个延时函数delay_nus这个函数
可以实现更小的延时,它的延时单位是微秒,即千分之一毫秒,参数n为延
时微秒数。
(2)举例:程序片断(目的:让连接到P1_0脚的伺服电机轮子全速旋转) while(1)
{
P1_0=1; //P1_0输出高电平
delay_nus(1700); //延时1.7ms
P1_0=0; //P1_0输出低电平
delay_nus(20000); //延时20ms
}
4.2控制运行时间或距离
4.2.1描述:
让微控制器不断发出控制指令,用到以while(1)开头的死循环(即永不
结束的循环)。要求机器人运动一段给定的距离或者一段固定的时间。需
要控制代码执行的次数,用到for函数。
4.2.2实现函数
(1)for 函数
for(表达式1;表达式2;表达式3) 语句
它的执行过程如下:
1) 先求解表达式1
2) 求解表达式2,若其值为真(非0),则执行for语句中指定的内
嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,
转到第5)步
3) 求解表达式3
4) 转回上面第2)步继续执行
5) 循环结束,执行for语句下面的一个语句
for语句最简单的应用形式也就是最易理解的形式如下:
for(循环变量赋初值;循环条件;循环变量增/减值) 语句
(2)举例(目的使电机运行几秒钟)
for(Counter=1;Counter<=100;i++)
{
P1_1=1;
delay_nus(1700);
P1_1=0;
delay_nms(20);
}
第五章简单巡航控制
5.1描述:
对单片机编程可以使机器人完成各种巡航动作,本章机器人在无感觉的情况
下巡航。
5.2基本巡航动作
(1)向前训航
发给单片机控制引脚的高电平持续时间决定了伺服电机旋转的速度和方
向。for循环的参数控制了发送给电机的脉冲数量。由于每个脉冲的时间
是相同的,因而for循环的参数也控制了伺服电机运行的时间
(2)向后走,原地转弯和绕轴旋转
将delay_nus函数的参数n以不同的值组合就可以使机器人以其它的方式
运行
5.3匀加速/减速运动
(1) for循环
示例(匀加速运动程序片段):
for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1)
{
P1_1=1;
delay_nus(1500+pulseCount);
P1_1=0;
P1_0=1;
delay_nus(1500-pulseCount);
P1_0=0;
delay_nms(20);
}
(2)分析解释:
使机器人的速度由停止到全速。循环每重复执行一次,变量pulseCount 就增加1:第一次循环时,变量pulseCount的值是10,此时发给P1_1、
P1_0的脉冲的宽度分别为1.51ms、1.49ms;第二次循环时,变量pulseCount
的值是11,此时发给P1_1、P1_0的脉冲的宽度分别为1.511ms、1.489ms。
随着变量pulseCount值的增加,电机的速度也在逐渐增加。到执行第190
次循环时,变量pulseCount的值是200,此时发给P1_1、P1_0的脉冲的
宽度分别为1.7ms、1.3ms,电机全速运转。
5.4函数分类
(1)从函数定义的角度来看,函数有两种
◆标准函数,即库函数。
◆用户定义函数,以解决你的专门需要
(2)从有无返回值角度来看,函数又分为以下两种:
◆有返回值函数:函数被调用执行完后将向调用者返回一个执行结果,称
为函数返回值。
◆无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不
向调用者返回函数值
(3)从主调函数和被调函数之间数据传送的角度看又可分为两种:
◆无参函数:函数定义、说明及调用中均不带参数。
◆有参函数:在函数定义及说明时都有参数,称为形式参数
5.5函数定义
类型标识符函数名(形式参数列表)
{
声明部分
语句
}