智能循迹小车说明书 - 图文

更新时间:2023-10-17 22:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业设计说明书

题 目:智能循迹小车 院 (部):机电工程学院 专 业: 班 级: 姓 名: 学 号: 指导教师: 完成日期:

1

山东建筑大学毕业设计说明书

目 录

摘 要 ..................................................................................................................................... 2 ABSTRACT ....................................................................................................................... 4

1.绪 论 ........................................................................................................................... - 1 -

1.1智能小车的作用和意义 ........................................................................................ - 1 - 1.2智能小车的现状 ...................................................................................................... - 2 -

2.方案设计与论证 ................................................................................................... - 3 -

2.1循迹模块 ................................................................................................................... - 3 - 2.2主控系统 ................................................................................................................... - 4 - 2.3电机驱动模块 .......................................................................................................... - 5 - 2.4机械系统 ................................................................................................................... - 7 - 2.5电源系统 ................................................................................................................... - 7 -

3.硬件设计 ................................................................................................................... - 8 -

3.1信号检测模块 .......................................................................................................... - 8 - 3.2主控电路 ................................................................................................................... - 8 - 3.3驱动电路 ................................................................................................................. - 11 - 3.4总体设计 ................................................................................................................. - 11 -

4.软件设计 ................................................................................................................. - 13 -

4.1总体结构框图 ........................................................................................................ - 13 - 4.2总体程序流程图 .................................................................................................... - 14 - 4.3总程序 ...................................................................................................................... - 14 - 4.4软件仿真 ................................................................................................................. - 38 -

5.安装和调试 ............................................................................................................ - 41 - 结束语 ............................................................................................................................ - 43 - 致 谢 .............................................................................................................................. - 44 - 参考文献 ...................................................................................................................... - 45 -

2

山东建筑大学毕业设计说明书

摘 要

本设计主要有三个模块包括信号检测模块、主控模块、电机驱动模块。信号检测模块采用红外光对管,用以对黑线进行检测。主控电路采用89C51单片机为控制芯片。电机驱动模块采用意法半导体的L298N 专用电机驱动芯片,单片控制与传统分立元件电路相比,使整个系统有很好的稳定性。信号检测模块将采集到的路况信号传入89C51单片机,经单片机处理过后对L298N 发出指令尽心相应的调整。小车速度由单片机输出的PWM 波控制。控制电动小车的速度及转向,从而实现自动循迹的功能。

关键词:智能循迹小车;红外光对管;89C51单片机;L298N

3 III

山东建筑大学毕业设计说明书

Intelligent tracking car

ABSTRACT

This design mainly has three modules including signal detection module, main

control module, motor driver module. Signal detection module USES infrared light to pipe, used to test the black line. The main control circuit using 89c51 microcontroller as the control chip. Motor drive module adopts the stmicroelectronics L298N dedicated motor driver chip, compared with the traditional discrete component circuit, single chip control the whole system has good stability. Signal detection module traffic signals were collected into the 89 c51, through the single chip microcomputer after the processing of L298N issue instructions with the corresponding adjustment. Vehicle speed is controlled by single chip microcomputer output PWM wave. Control the speed of the electric car and steering, so as to realize the function of automatic tracking.

Key Words: Intelligent tracking car;Infrared light to tube;STC89c51;L298N

I V

山东建筑大学毕业设计说明书

1.绪 论

1.1智能小车的作用和意义

自蒸汽机诞生,发生第一次工业革命以后,人类的社会生产力得到了极大的提高,从最基本的手工劳动转变为半手工劳动,人类的体力得到了极大的解放,人们的基本生活资料得到了极大的满足,生活质量得到了改善,整个社会的组织结构发生了改变,这种变化不仅影响了人们的日常生活习惯,也改变了人们对日常事物的看法,它的影响是延伸到人类社会的方方面面的,尤其是催生出了公司的诞生,使人类的各种生产资料得到了尽可能的利用,社会的创新与进取也随之而兴起,这种影响不仅体现在革命地英国,这种变革使得整个世界的关系结构发生翻天覆地的变化。

信息技术的产生,使得本来相对松散的生产资料与组织机构的联系更加密切,人们的联系更加方便,最重要的是使得原料、组织、产品、客户等等各种社会元素得到了更紧密的联系与配合,使得各个社会资源得到了极大的调动,使得人们的生活得到了进一步的满足。

在我看来,第二次工业革命与第一次工业革命的本质是一样的,那就是解放生产力与发展生产力,使得有限的资源得到无限的利用,第二次工业革命是第一次工业革命的延续与发展。然而资源总是有限的,人类的人口数却是逐渐的增长着的,经过历史的发展,人类的认识也在社会的发展中得到了发展,人们也从要物质满足进入了要到精神满足,这也与自然的客观物质上的有限性和人类认知发展的追求的脉络思路上是一致的。

真理道,没有调查就没有发言权,我发现现在我国社会的发展进入了一种不太协调的阶段,起码不太对称,其一我国的人口老龄化进入了高发期,社会劳动力进入萎靡阶段,这也是催生无人劳动化的时机;其二我国的国民发展出现了严重的不平衡,农民与市民,底层与中层、高层的生活状态出现了脱节,其体现在生活认知、生活质量、教育级别上等等,这就要将体力劳动的人们从双手中解放出来,不能将其继续困在千篇一律的种植上和流水线的单一动作上;其三,我国是社会主义国家,在每个人的发展上尽量营造一个相对公平的环境应该是国家工作的努力的一个方向。

凡属上面的种种,其解决都离不开一个指导思想,那就是进行劳动无人化,

- 1 -

山东建筑大学毕业设计说明书

将人们彻底从直接的体力劳动中解放出来,而其在现社会环境下的解决方案就是进行机械智能化,这种智能化不是单调地去指机器人,而是与人类所有劳动的上来说,当然现阶段焦点最主要集中农民与工人上,在这些智能机械里面,智能小车是集成度比较好的一个发展方向。

智能循迹小车是大学生在大学阶段做的比较火热的一个项目,机器人要实现自动导引功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。实现这个功能在整个小车的其他功能实现上也有一定的指导的意义。

1.2智能小车的现状

现智能小车发展很快,从智能玩具到其它各行业都有实质成果,其基本可实现循迹、避障、寻光、避崖、遥控、声控、视频传输等基本功能,比较出名的飞思卡尔智能小车更是走在前列,我此次的设计主要实现循迹功能。

- 2 -

山东建筑大学毕业设计说明书

2.方案设计与论证

根据要求,确定如下方案:在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。

2.1循迹模块

小车循迹原理是小车在贴有黑胶带的地板上行驶,由于黑色和白色对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。

红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。

图2-1 红外光对管原理图

- 3 -

山东建筑大学毕业设计说明书

图 2-2 TCRT5000 红外光对管

2.2主控系统

根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。据此,拟定了以下两种方案并进行了综合的比较论证,具体有如下两种方案:

1.采用PLC 作为主控系统,PLC 虽然性能稳定但是价格昂贵,为此,我们不采用该种方案,进而提出了第二种设想。

2.采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。

针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O 口和程序存储器的小体积单片机,D/A、A/D 功能也不必选用。根据这些分析,我选定了89C51 单片机作为本设计的主控装置,51系列单片机具有功能强大的位操作指令,I/O 口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余。

- 4 -

山东建筑大学毕业设计说明书

在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用一片单片机,充分利用89C51单片机的资源。

图2-3 89C51引脚图

2.3电机驱动模块

电机驱动模块拟用两种解决方案,分别如下:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。

采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。

- 5 -

山东建筑大学毕业设计说明书

图2-4 H桥式电路

在实际应用中,需要能够有稳定的电压和电流,而L7805CV是三端正电源稳压电路,它的封装形式为T0-220,它有一系列固定的电压输出,应用非常的广泛。每种类型由于内部电流的限制,以及过热保护和安全工作区的保护,使它基本上不会损坏。如果能够提供足够的散热片,它们就能够提供大于1.5A的输出电流。虽然是按照固定值设计的,但是当接入适当的外部器件后,就能获得各种不同的电压和电流。

- 6 -

山东建筑大学毕业设计说明书

图2-5 L7805CV

2.4机械系统

本题目要求小车的机械系统稳定、灵活、简单,因此采用后驱,前轮采用舵机转向。小车上装有电池、电机、电子器件等,使得电机负担较重。为使小车能够顺利启动,且运动平稳,在直流电机和轮车轴之间加装了一级减速齿轮。

2.5电源系统

采用3节普通4V干电池单电源供电,但12V的电压不能同时给单机与与电机供电。电机在运行过程中产生的反向电动势可能会影响单片机的正常工作[9]。所以决定独立供电,即单片机控制系统和光对管与电机用保护型电路设计分开供电。由于单片机为低功耗元件而可采用普通4v 电池(共3节)供电。

图 2-6 三合一干电池

- 7 -

山东建筑大学毕业设计说明书

3.硬件设计

3.1信号检测模块

为了防止因传感器太少引起的误动作,因而在车体前段安装了7个红外光对管,有效的减小了误动作的发生,减小了小车冲出跑道的几率。

图3-1 7路光对管

3.2主控电路

本模块主要是对采集信号进行分析,同时控制电机起停、正反转。该模块包括电源模块,串口电平转换模块,以及I/O口扩展模块。电源模块为系统提供稳定的电源,串口电平转换模块可以将电脑与单片机串口相连从而实现程序的下载以及串口打印debug调试功能。I/O扩展排针将单片机的管脚引出,可以实现灵活的扩展功能。

- 8 -

山东建筑大学毕业设计说明书

图3-2电源电路

图3-3最小系统

- 9 -

山东建筑大学毕业设计说明书

图3-4 I/O口排针

- 10 -

山东建筑大学毕业设计说明书

3.3驱动电路

本模块主要是对单片机传送过来的高低电平信号进行处理,控制电机起停、正反转。

图3-5驱动模块原理图

3.4总体设计

智能小车采后轮用一个电机驱驱动,调节它能够控制转速,前轮靠一个舵机控制转向,调制舵机的占空比与正反转从而达到控制转向角度和转向的目的。将循迹光对管分别装在车体下的左右。当车身下左边的传感器检测到黑线时,主控芯片控制舵机,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制舵机,车向右修正。由于系统采用模块化结构,各个模块之间采用杜邦线连接。

- 11 -

山东建筑大学毕业设计说明书

图3-6 总原理图

- 12 -

山东建筑大学毕业设计说明书

4.软件设计

4.1总体结构框图

对于整个辆车的设计到制造,其中的逻辑关系一定要清楚,因为缺少某一个元素,这其中就会出现错误,继而会造成不必要的经济与时间上的损失,对于制作控制的来说,画简易的结构框图是非常必要的。智能循迹小车的核心是51单片机,以循迹红外对管为信息的采集部分,而复位电路和时钟电路是单片机的外部控制信号的来源,也是基准信号的来源,电源的提供是必不可少的,而这所有的工作其实就是为了最后的对电机和舵机的控制,以期能够达到所能要实现的功能性运行。具体机构框图见下图:

电机驱动 舵机驱动

图 4-1 总体结构框图

- 13 -

山东建筑大学毕业设计说明书

4.2总体程序流程图

图 4-2 总体程序流程图

4.3总程序

//main.c

/*http://hailkj.taobao.com/ 欢迎您*/

/********************************************************* 功能说明:本程序可以测试如下内容

- 14 -

山东建筑大学毕业设计说明书

1、板载LED 2、板载beep 3、PWM功能 4、UART功能 5、5110显示 6、定时器中断 7、外部中断 8、舵机驱动 9、测速功能

10、PT2272接收功能 11、NRF功能

*********************************************************/ #include \#include /* 标准IO */ #include /* 标准库 */ #include \ /* 本地配置 */ #include \ /* 常用类型定义 */ #include \ /* 端口设置 */ #include \ /* 全局变量和类型定义 */ #include \#include \

//PWM模块

#include \

//car控制

//#include \

//5110驱动

#include \

//NRF驱动

#include \

//中断

#include \

/**********************************************************/ void sys_init(void); void io_init(void);

void global_var_init(void); void dis_init(void);

void nrf_init(nrf_dir_t nrf_dir);

- 15 -

山东建筑大学毕业设计说明书

void beep_test(void); void nrf_ctl(void); void xj_ctl(void);

/**********************************************************/ unsigned char dis_buf[15] = \ \

unsigned char car_cesu_start;

unsigned int car_speed_left_count, car_speed_right_count; //左右轮脉冲计数 unsigned int car_speed_left, car_speed_right; unsigned int car_speed_time;

unsigned char pt_value, key_value;

nrf_pkt_t nrf_pkt;

unsigned char nrf_buf[sizeof(nrf_pkt_t)]; nrf_dir_t nrf_dir_flag;

unsigned char nrf_init_flag = 0;

unsigned int duoji_pulse; unsigned char pwm0, pwm1;

unsigned char debug_5110; /*

main 主函数 */

int main(void) { sys_init(); while(1) { //nrf_ctl(); xj_ctl(); } return 0; }

void sys_init(void) { io_init(); global_var_init(); led_init(); //nrf_rx_mode_init(); //dis_init(); led_test(); pwm_init();

- 16 -

//厘米/秒 //时间计数

山东建筑大学毕业设计说明书

#include \#include \#include \#include \

#define KEY_DELAY 100

u8 key_scan(void){ if(!key1){ return 1; } if(!key2){ return 2; } if(!key3){ } return 0; }

//nrf24L01.c

#include \#include \#include \

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

uchar bdata sta; //状态标志 sbit RX_DR =sta^6; sbit TX_DS =sta^5; sbit MAX_RT =sta^4;

//*********************************************NRF24L01*************************************

#define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width

#define TX_PLOAD_WIDTH sizeof(nrf_pkt_t) // 32 uints TX payload #define RX_PLOAD_WIDTH sizeof(nrf_pkt_t) // 32 uints TX payload

//uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址

//uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址

//这里的地址可以任意改动 只需保证发送接收一致即可

uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x01,0x12,0x34,0x56,0x78}; //本地地址 uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x01,0x12,0x34,0x56,0x78}; //接收地

- 32 -

山东建筑大学毕业设计说明书

void nRF24L01_init(void) { CE=0; SCK=0; CSN=1; return; }

/************************************IO 口模拟SPI总线 代码************************************************/

uchar SPI_RW(uchar byte) { uchar bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) { MOSI=(byte&0x80); byte=(byte<<1); SCK=1; byte|=MISO; //delay(150); SCK=0; } return(byte); }

uchar SPI_RW_Reg (uchar reg,uchar value) // 向寄存器REG写一个字节,同时返回状态字节

{ uchar status; CSN=0; status=SPI_RW(reg); SPI_RW(value); CSN=1; return(status); }

uchar SPI_Read (uchar reg ) { uchar reg_val; CSN=0; SPI_RW(reg); reg_val=SPI_RW(0); CSN=1; return(reg_val); }

uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) {

- 33 -

山东建筑大学毕业设计说明书

uchar status,byte_ctr; CSN = 0; // Set CSN low, init SPI tranaction status = SPI_RW(reg); // Select register to write to and read status byte for(byte_ctr=0; byte_ctr

/*******************************发*****送*****模*****式*****代*****码*************************************/

void TX_Mode(void) { CE=0; SPI_RW_Reg(FLUSH_TX,0x00); SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...1a SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR

SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为2字节

SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); CE=1; delay_ms(100); }

unsigned char nRF24L01_TxPacket(unsigned char * tx_buf) { u8 status, retval; CE=0; //StandBy I模式 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址

SPI_RW_Reg(FLUSH_TX,0x00); SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送

CE=1; //置高CE,激发数据发送 delay_ms(150); status = SPI_Read(READ_REG + STATUS);

- 34 -

山东建筑大学毕业设计说明书

if(0x20 & status) { SPI_RW_Reg(WRITE_REG + STATUS,status); retval = 1; } else { SPI_RW_Reg(WRITE_REG + STATUS,status); retval = 0; } return retval; }

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

/*******************************接*****收*****模*****式*****代*****码********************************/

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

uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) { uchar status,uchar_ctr; CSN = 0; // Set CSN low, init SPI tranaction status = SPI_RW(reg); // Select register to write to and read status uchar for(uchar_ctr=0;uchar_ctr

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

/*函数:void SetRX_Mode(void) /*功能:数据接收配置

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

void SetRX_Mode(void) { CE=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收

CE = 1; delay_ms(10); }

- 35 -

山东建筑大学毕业设计说明书

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

/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) /*功能:数据读取后放如rx_buf接收缓冲区中

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

unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) { unsigned char revale=0; sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况 if(RX_DR) // 判断是否接收到数据 { CE = 0; //SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer

revale =1; //读取数据完成标志 } SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志

CE=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收

CE = 1; delay_ms(10); return revale; }

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

/*函数:void RX_Mode(void) /*功能:数据接收配置

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

void RX_Mode(void) { CE=0; SPI_RW_Reg(FLUSH_RX,0x00); //SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01

SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0

- 36 -

本文来源:https://www.bwwdw.com/article/hitf.html

Top