当前位置:文档之家› 声音导引系统(运动控制部分)毕业论文(终稿)

声音导引系统(运动控制部分)毕业论文(终稿)

韶关学院毕业设计

毕业设计题目:声音导引系统

—运动控制部分

学生姓名:陈锦儒

学号:061101424012

系(院):物理与机电工程学院

专业:电子信息科学与技术

班级:2006级

指导教师姓名及职称:洪远泉实验师

起止时间:2009年09月—2010年5月

声音导引系统

—运动控制部分

摘要:本设计采用两片ATmega128L单片机作为系统的控制核心处理芯片,利用声音发射与接收模块、无线数据传输模块以及直流减速电机驱动电路模块组合实现电动小车的声音导引系统。在系统启动后,下位机发送音频信号与启动计时信号。声音传感器接收到声音信号后,计时器停止计时,上位机通过处理接收到的信号时间差来计算出电动小车当前坐标值。通过无线传输模块将其坐标值发送到下位机。下位机根据电动小车当前的坐标值来控制直流减速电机,实现小车的定位停车。

关键词:ATmega128L 声音发射与接收模块无线数据传输模块直流减速电机

Sound Conduct System

—Moving Control Part Abstract: At this design,we use two Atmega128L as the core control processing chip.and plus sound generate module,sound receive module,wireless transmission module and DC Geared motor drive module.Our electronic car leading by sound make up by this modules and ATmega128L.when system boot,lower computer send sound signal and start count down signal.after sound sensor receive the signal,timer stop count down,upper computer calculate the coordinate by the signal time difference,and send to lower computer through the wireless transmission module.lower computer control the DC geared motor by current coordinate to implement position parking.

Keyword: ATmega128L、 plus sound generate module,sound receive module、

wireless transmission module、 the DC geared motor

目录

1 引言 ------------------------------------------------------ 4

1.1本课题的研究意义----------------------------------------- 5

1.2设计任务与要求-------------------------------------------- 5

1.3 技术要求-------------------------------------------------6

2 系统方案选择与论证-----------------------------------------6

2.1 系统基本实现方案------------------------------------------ 6

2.2 各模块方案选择和论证 ------------------------------------- 7

3 运动控制部分设计 ---------------------------------------- 11

3.1理论分析与计算 ----------------------------------------- 11

3.2 软件设计与实现 -----------------------------------------12

4 系统测试 ----------------------------------------------- 27 4.1测试方法-----------------------------------------------27 4.2测试仪器 -----------------------------------------------27 4.3测试数据------------------------------------------------27 4.4测试结果分----------------------------------------------28结论 ------------------------------------------------------ 28致谢:-------------------------------------------------------29参考文献:---------------------------------------------------29

声音导引系统

——运动控制部分

专业班级:电子信息科学与技术 06级(1)班陈锦儒 061101424012

指导老师:洪远泉实验师

1 引言

21世纪是信息化的世纪,各种新技术推动了人类文明的巨大进步。机器人作为人类21世纪最伟大的发明之一,在短短的几十年内发生了日新月异的变化。近几年机器人已成为高技术领域内具有代表性的战略目标。机器人技术的出现和发展,不但使传统的工业生产面貌发生根本性变化,而且将对人类社会产生深远的影响。随着社会生产技术的飞速发展,机器人的应用领域不断扩展。从自动化生产线到海洋资源的探索,乃至太空作业等领域,机器人可谓是无处不在。目前机器已经走进人们的生活与工作,机器人已经在很多的领域代替着人类的劳动,发挥着越来越重要的作用,人们已经越来越离不开机器人帮助。机器人工程是一门复杂的学科,它集工程力学、机械制造、电子技术、技术科学、自动控制等为一体。目前对机器人的研究已经呈现出专业化和系统化,一些信息学、电子学方面的先进技术正越来越多地应用于机器人领域。

实现智能化离不开运算和控制单元,本系统采用MCU(ATmega128L )作为主控器件,单片机应用系统由硬件和软件组成。硬件由单片机扩展的存储器、输入/出设备以及各种实现单片机系统控制要求的接口电路和有关的外围电路芯片或部件组成;软件由单片机应用系统实现其特定控制功能的各种工作程序和管理程序组成。在单片机应用系统开发的过程中,应不断调整软、硬件,协调地进行软、硬件设计,以提高工作效率,当系统硬件和软件紧密配合、协调一致,就可以组成高性能的单片机应用系统。本课题完成了单片机应用系统的总体设计、硬件设计、软件设计和系统调试。MCU 与各个芯片和模块的接口、各项标准都严格遵循国家有关标准,为以后的产品化提供了良好的基础。

1.1本课题的研究意义

随着数字技术的发展越来越快,单片机作为控制领域最典型的嵌入式系统在现代电子系统中得以空前的应用和发展。单片机在家用电器、仪器仪表、自动化设备、通讯产品等领域成为最重要的智能化工具。而本次研究的课题是声音导引系统,声音导引是当前智能控制定位领域中一个重要组成部分,通过声音传播的速度来确定声源的位置,为将来在定位控制技术发展中提供一种新的途径。

1.2设计任务与要求

设计并制作一声音导引系统,示意图如图1所示。

图1 系统示意图

图1中,AB与AC垂直,Ox是AB的中垂线,O'y是AC的中垂线,W是Ox和O'y 的交点。声音导引系统有一个可移动声源S,三个声音接收器A、B和C,声音接收器之间可以有线连接。声音接收器能利用可移动声源和接收器之间的不同距离,产生一个可移动声源离Ox线(或O'y线)的误差信号,并用无线方式将此误差信号传输至可移动声源,引导其运动。可移动声源运动的起始点必须在Ox线右侧,位置可以任意指定。

1.3 技术要求

1.3.1基本要求

(1)制作可移动的声源。可移动声源产生的信号为周期性音频脉冲信号,如图2所示,声音信号频率不限,脉冲周期不限。

图2 信号波形示意图

(2)可移动声源发出声音后开始运动,到达Ox线并停止,这段运动时间为响应时间,测量响应时间,用下列公式计算出响应的平均速度,要求平均速度大于 5cm/s。(3)可移动声源停止后的位置与Ox线之间的距离为定位误差,定位误差小于3cm。(4)可移动声源在运动过程中任意时刻超过Ox线左侧的距离小于5cm。

(5)可移动声源到达Ox线后,必须有明显的光和声指示。

(6)功耗低,性价比高。

1.3.2 发挥部分

(1)将可移动声源转向180度(可手动调整发声器件方向),能够重复基本要求。(2)平均速度大于10cm/s。

(3)定位误差小于1cm。

(4)可移动声源在运动过程中任意时刻超过Ox线左侧距离小于2cm。

(5)在完成基本要求部分移动到Ox线上后,可移动声源在原地停止5s~10s,然后利用接收器A和C,使可移动声源运动到W点,到达W点以后,必须有明显的光和声指示并停止,此时声源距离W的直线距离小于1cm。

(6)其他。

2 系统方案选择与论证

2.1 系统基本实现方案

根据题目要求,整个系统将通过声源的发送与接收产生的时间差来计算当前电动车的坐标值,通过MCU对坐标值的比较运算,确定电动车的运动状态,再通过直流减速电机控制小车,实现小车的精确定位运动。

我们认为此系统的实现有三个重要的方面。

第一方面,由于题目中要求必须采用组委会提供的电机控制ASSP 芯片(型号MMC-1)实现可移动声源的运动,ASSP 芯片的控制必须通过串行方式,包括UART 方式与SPI 方式。而题目中,要求误差信号采用无线方式传输,这也就要求MCU 必须要控制两个串口方式数据的传送。

第二方面,本设计要求中,移动声源位置的坐标是通过3个误差信号确定的。其中将涉及到大运算量的数据处理,而本系统中还要进行无线数据传送、音频信号处理、电机控制等,因此,系统对MCU 的内存、运算速率要求较高。

第三方面,系统是通过检测声音传感器的响应时间差来决定小车运动状态,而在现实生活环境中,生活噪声对声音传感器的干扰较大,因此如何消除干扰以及确保声音传感器工作稳定性,是本题的重点之一。

为了完成相应功能,系统可以划分为下面几个基本模块:控制模块、电机驱动模块、声音发射与接收模块、无线数据传输模块,其系统框图如图3所示。

无线传输

模块

声音传感模块

控制模块

声源模块

电机驱动

电机

图3 系统框图

2.2 各模块方案选择和论证

2.2.1 控制器模块

根据题目要求,控制器主要用于控制电机,处理声音发射与接受模块的时间差以及控制无线数据传输模块的发射与接收。故对于控制器的选择主要有以下三个方案。

方案一:采用ATMEL公司的AT89S52单片机作为系统的控制器。该单片机运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,方案二:采用FPGA作为系统的控制器。FPGA可以实现各种复杂的逻辑功能,规模大,密度高,它将所有器件集成在一场芯片上,减小了体积,提高了稳定性,并且可应用EDA软件仿真、调试,易于进行功能扩展。FPGA采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模实时系统的控制核心。但由于本设计对数据的要求不是非常高,FPGA的调整处理的优势得不到充分的体现,并且由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物硬件电路板布线复杂,加重了电路设计和实际焊接的工作。

方案三:采用ATmega128L单片机,其算术运算功能强,运算速度快,软件编程灵活、自由度大。同时该单片机有功能强大的通讯接口,自身带有两个串行通信接口。在该设计中,需要用到两个串行通信接口,这样大大减少编程的复杂度以及整个系统运行的稳定度。同时该单片机拥有丰富的IO口以及中断口,对整个系统中需要多个中断来控制小车运动状态以及多个IO口来处理数据跟其他各模块的流向,总体上该单片机完全达到了设计要求。

因此本系统采用方案三。

2.2.2 电机选择

本系统为智能电动车领域,对于电动车来说,驱动电机的选择就显得十分重要。由于系统要求实现对位置的准确定位,我们综合考虑了以下两个方案。

方案一:采用步进电机作为系统的驱动电机。由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,但步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。经过综合考虑,我们放弃了此方案。

方案二:采用直流减速电机。直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速齿轮组,可以产生较大扭力。

我们选用的直流减速电机减速后电机的转速为170r/min。我们的车轮直径为

6cm,因此我们的小车的最大速度可以达到

V=2*3.14*0.03*170/60=0.534m/s

能较好的满足系统的要求,因此我们选择此方案。

2.2.3 电机驱动模块

方案一:直接采用L298电机驱动芯片设计电机驱动电路,该芯片内含两个H 桥式电机控制电路。该芯片为电机驱动专门设计,可以分别控制两个直流电机,而且还带有控制使能端,且驱动电流大,操作方便,稳定性好,性能优良。

方案二:用三极管和与门等简单的元器件设计H桥式电机控制电路。该方案涉及的元器件简单,设计方便,然而其通断速率可能受到元器件反映速率的影响,且不能提供较大的驱动电流,工作性能不够稳定。

因此我们选择方案一。

2.2.4 无线模块

方案一:采用无线集成模块NRF24L01。此模块价格便宜,传输距离大,可满足系统要求。但在测试中,数据传输不稳定,调试较为繁琐;其驱动程序大,占内存较多,影响单片机的运行速度。

方案二:采用带驱动的无线集成模块XL02-232AP1。此模块内部集成传输驱动,具有传输速度快,控制简单,传输稳定的优点,便于短期开发设计。

因此我们选择方案二。

2.2.5 电源模块

方案一:采用12V蓄电池供电,将12V电压降压、稳压后给单片机系统和小车直流电机供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。

但是蓄电池的体积过于庞大,在小型电动车上使用极为不方便。因此我们放弃了这种方案。

方案二:采用12V的开关电源作为电源供电,直接把电压给直流减速电机和经过5V电压降压后给单片机系统供电。采用12V的干电池经过5V电压降压后给

无线收发模块供电。12V的干电池的电量比较足,而且无线收发模块耗电不多。因此,这种方案比较可行。并且车上预留的空间刚好可以装上干电池。

因此我们选择方案二。

2.2.6 声音传感模块

此模块在本系统中具有重要的应用,为了稳定接收音频信号,我们将采用驻极体话筒与放大电路、全波整流电路、电压比较电路组成的电路作为声音接收电路。

2.2.7 声源模块

本设计中,声源的要求为周期性音频脉冲信号。我们将选用音频集成功放芯片LM386组成的电路作为声源。该芯片具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。

2.2.8 状态标志模块

考虑到电路的简易程序,功耗和电源的因素,系统采用了高亮发光二极管跟有源蜂鸣器,当电动车到了要定位的为止时高亮显示以及蜂鸣器报警。

2.3 最终方案小结

经过仔细的分析与比较,我们决定系统各个模块的最终方案如下:控制模块:采用ATmega128L单片机*2双CPU控制。

电机选择:采用自带编码盘直流电机。

驱动电路:采用L298专用电机驱动电路。

无线传输模块:采用带集成驱动的XL02-232AP1模块。

声音发射与接受模块:采用喇叭跟驻极体话筒通过放大等电路组成的模块。

电源模块:12V开关电源+LM7805稳压电路+12V电池。

状态标志:高亮二极管+有源蜂鸣器。

采用上位机、下位机控制方式,下位机处理声音接收时的时间差,计算电动车的坐标(X,Y)。而上位机主要接收下位机发送过来的数据与预先设定的数据比较,判断电动车的运动状态。系统的总体方案如下:

采用两片ATmega128L作为核心控制模块,分为主、从机两部分。主机部分由ATmega128L、声源产生模块、电机驱动电路、无线接发模块等组成,实现小车运动的控制;从机部分包括另一片ATmega128L、声音接收传感器模块、无线接发模块等,实现检测小车当前位置的功能。ATmega128是AVR系列的8位高速微处理器,它运算速率很高,其内部具有128K的系统内可编程Flash。尤其是ATmega128具有两个可编程串行USART,可满足本系统的设计要求,避免了使用单片机的SPI通信的软件编程的复杂性,大大减少了设计开发的时间。声音接收传感器模块是由MIC话筒与其放大比较电路搭建而成,单片机根据声音接收传感器接收到的声音时间差来进行运算来确定移动声源的当前位置并使用带驱动的无线模块XL02-232AP1作为数据的传输,把数据传回小车处理。此方案系统框图如图4所示。

声源模块

电机驱动

NEC公司

电机控制

ASSP芯片

MMC-1

主机

Atmega

128

电机

XL02-

232AP1

从机

Atmega

128

声音

传感器XL02-

232AP1

图4 系统总体方案

3、运动控制部分设计

3.1理论分析与计算

当小车启动后,发出音频信号,这时从机开始工作,A 、B 、C 这三个声音传感器同时启动。当其中某个声音传感器接收到音频信号后,经过放大、整流、比较电路,输出低电平信号引起从机的中断。得到音频信号到A 、B 、C 三个接收器的时间分别为错误!未找到引用源。、错误!未找到引用源。、错误!未找到引用源。。下图为小车运动的数学建模示意图5。

1m

W

y

x

S

x`

y`

1m

S a

S b

S c

x i

y i

接收器C

接收器B

接收器A

D

中点O`

中点O

S`

图5 小车运动的数学建模示意

假设接收点A 为原点,以A 到B 方向为x`轴,以A 到C 方向为y`轴。设小车

运动到S`点,从机得到声音信号 到A 、B 、C 的时间错误!未找到引用源。、错误!未找到引用源。、错误!未找到引用源。。

这时可以得到,小车到A 接收器的距离错误!未找到引用源。=错误!未找到引用源。*340m/s(常温下音速约为340m/s)。同样的,可得:错误!未找到引用源。=错误!未找到引用源。*340m/s 。

根据勾股定理,错误!未找到引用源。 =错误!未找到引用源。-错误!未找到引用源。,错误!未找到引用源。=错误!未找到引用源。-错误!未找到引用源。

即得,错误!未找到引用源。-错误!未找到引用源。=错误!未找到引用源。-错误!未找到引用源。,简化后就可以得到小车当前所处的X坐标错误!未找到引用源。的值。

同理,可以得到小车的错误!未找到引用源。的值。这时,从机已经确定小车的坐标,通过无线传输模块,发送坐标信号,即误差信号。

3.2 软件设计与实现

3.2.1 系统控制总流程图

由于整个系统是分开来控制的,故由上位机跟下位机之分。上位机只要负责声音处理,计算电动小车当前所在的坐标值,再把坐标值发送给下位机。下位机主要负责产生一个频率的声音源以及接收上位机发送过来的坐标值对电动小车进行运动控制。

系统控制的总流程图如图6所示。

下位机

开始

初始化

发送开始信号打开声源

接收到

坐标信号?

关闭声源

到达OX轴?发送结束信号

停止运动,

打开

声光指示N

Y

N

Y

上位机

开始

初始化

收到

开始信号?

打开单片机内部

定时器,声音传

感器响应到

音频信号?

AVR处理

发送

坐标信号

收到

结束信号?

结束

Y

Y

N

N

Y

N 图6 系统控制总流程图

上位机的控制程序分为两部分,第一部分就是上位机处理声音信号并计算出坐标值另一部分是上位机与下位机之间的通信程序设计与实现。

无线传输模块XL02-232AP1 的通信信道是半双工的,可以用于点对点通信,使用简单,在对串口的编程时,只要记住其为半双工通信方式,时刻注意收发的来回时序就可以了。

//上位机处理声音信号程序

void main(void)

driver();

lcd_port_init();

init_lcd();

while(1)

{

if(r_data[1]==0x07)

{

r_data[1]=0x00;

TIMSK|=BIT(0); //产生一个启动定时器的起始信号 TIMSK|=BIT(6);

}

if(dnt0==1 && dnt1==1) //等待两个中断发生完成

{

uart0_send();

cnt0=0; //清零,等待下一次调用重新计数 cnt1=0; //清零,等待下一次调用重新计数 driver();

}

}

}

//上位机与下位机通信的程序

//串口初始化

void uart0_init(void)

{

CLI();

UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00;

UCSR0C = 0x06; //字符长度为8个字符,1个停止位

UBRR0L = 0x2f; //设置波特率为9600

UBRR0H = 0x00; //设置波特率

UCSR0B = 0x98; //接收、发送使能,接收中断使能

SEI(); //开全局中断;

}

//发送一个字节

void uart0_sendB(uchar data)

{

while(!(UCSR0A&(BIT(UDRE0))));

UDR0=data;

while(!(UCSR0A&(BIT(TXC0))));

UCSR0A|=BIT(TXC0);

}

//发送整个数组

void uart0_send(void)

uchar i;

for(i=0;i<9;i++)

{

uart0_sendB(t_data[i]);

}

}

//接收数据

#pragma interrupt_handler uart0_rx:19

void uart0_rx()

{

check_flag=0;

if((UDR0=='%')&&(r_flag==1)&&(r_count==0)) //数据包的开始字节,提示开始接收

{

r_flag=0; //开始接收,接收未完时r_flag为0

}

else if((r_flag==0)&&(r_count<9)) //接收开始字节后面的字节存放在数组的1~9中

{

r_data[r_count]=UDR0;

r_count++;

}

if(r_count==10) //接收完毕,接收计数r_count清零,

{

r_flag=1; //表示接收完毕,等待下次接收

r_count=0;

}

UCSR0B|=BIT(RXCIE0); //uart has received a character in UDR

}

下位机的控制程序分为三部分,第一部分就是发送一个启动信号给上位机,让上位机开始计时工作,第二部分就是接收上位机传送过来的坐标值,最后一部分是根据坐标值来控制电动小车。

由于无线模块的特点,下位机跟上位机的通信的程序跟上位机跟下位机的通信程序是一样的。

//下位机的主程序

void main(void)

uint a=0;

uint b=0;

uint temp;

DDRG|=BIT(0); //接到达中垂线的指示灯

DDRG|=BIT(1); //接到达中垂线的蜂鸣器

DDRG|=BIT(3); //设置声音源的端口

uart1_init(); //初始化串口1

t_data[1]=0x07; //启动定时器的起始信号

while(1)

{

Dingwei();

}

}

//下位机通信部分程序设计

//发送一个字节

void uart0_sendB(uchar data)

{

while(!(UCSR0A&(BIT(UDRE0))));

UDR0=data;

while(!(UCSR0A&(BIT(TXC0))));

UCSR0A|=BIT(TXC0);

}

//接收数据

#pragma interrupt_handler uart0_rx:19

void uart0_rx()

{

check_flag=0;

if((UDR0=='%')&&(r_flag==1)&&(r_count==0)) //数据包的开始字节,提示开始接收 {

r_flag=0; //开始接收,接收未完时r_flag为0

}

else if((r_flag==0)&&(r_count<9)) //接收开始字节后面的字节存放在数组的1~9中 {

r_data[r_count]=UDR0;

r_count++;

}

if(r_count==10) //接收完毕,接收计数r_count清零,

{

r_flag=1; //表示接收完毕,等待下次接收

r_count=0;

}

UCSR0B|=BIT(RXCIE0); //uart has received a character in UDR

}

3.2.2 小车的定位控制的软件设计与实现

当声源开始工作时,下位机不断接收从上位机发送过来的坐标值。通过接收到的数据与预先设定的数值作比较,来控制电动小车的运动状态。数值比较,是通过对在运行之前测量的两组重要数据(X轴:X1,X2,X3)、(Y轴:Y1,Y2,Y3)作比较的。

电动小车定位到X轴的中垂线上的程序设计与实现:

(1)当当前值X大于预先设定值X1时,证明小车离X轴的中垂线的距离很大,此时便要使车采用高速模式,以使小车能很快的进入下一个模

式。

(2)当当前值X小于预先设定值X1大于X2时,证明小车离X轴的中垂线的距离不远了,此时便要使车采用中速模式,以使小车能稳定的进入

下一个模式,防止小车超过中垂线。

(3)当当前值X小于预先设定值X2大于X3时,证明小车已经靠近了X轴的中垂线了,此时便要使车采用低速模式,以使小车能及时停车。

(4)当当前值X小于预先设定值X3时,证明小车已经到达X轴的中垂线了,由于电机的惯性,下车会在中垂线下停留下来。

电动小车定位到Y轴的中垂线上的程序设计与实现:

(5)当当前值Y大于预先设定值Y1时,证明小车离Y轴的中垂线的距离很大,此时便要使车采用高速模式,以使小车能很快的进入下一个模

式。

(6)当当前值Y小于预先设定值Y1大于Y2时,证明小车离Y轴的中垂线的距离不远了,此时便要使车采用中速模式,以使小车能稳定的进入

下一个模式,防止小车超过中垂线。

(7)当当前值Y小于预先设定值Y2大于Y3时,证明小车已经靠近了Y轴

的中垂线了,此时便要使车采用低速模式,以使小车能及时停车。

(8) 当当前值Y 小于预先设定值Y3时,证明小车已经到达Y 轴的中垂线

了,由于电机的惯性,下车会在中垂线下停留下来。

其控制流程见下图7。

开始

等待无线传输接收到的坐标

值X

当前值 > X1

X1 > 当前值

> X2

X2> 当前值

> X3

当前值 < X3

高速模式

中速模式

低速模式

停车,开指

等待无线传输接收到的坐标

值Y

当前值 > Y1

Y1 > 当前值

> Y2

Y2> 当前值

> Y3

当前值 < Y3

高速模式

中速模式

低速模式

停车,开指

结束

N

N

N

Y

Y

Y

Y

N

N

N

N

Y

Y

Y

Y

N

N

图7 小车控制流程

图中,x的比较值的单位为mm。由于题目对系统的行驶速度有大于5cm/s的要求。在路程的前半段,离停止位距离较远,小车采用较快行驶速度;当小车行驶到路程的中间区域,采用中速行驶,保证行驶稳定;当小车行驶至距离停止线5cm时,采用缓慢行驶速度,以实现小车准确停车。

软件设计如下:

定位X轴上的中垂线

void dingwei_x(void) //比较距离差来进行定位

{

uart1_send(); //发送一个起始信号,使接收点开始计时

PORTG |= BIT(3); //打开声音源,测量当前小车的坐标

delay_nms(500); //一个短延时,等待接收数据

a = r_data[1]<<8 | r_data[2]; //得到X轴的坐标

b = r_data[3]<<8 | r_data[4]; //得到X轴的坐标

PORTG &=~ BIT(3); //关闭声音源,测量当前小车的坐标

temp = a - b;

if(temp>100)

{

car_contl(0xc0,90,0xe0,90); //左右电机同步,同速运行速度减少

}

else if(temp>50 && temp<=100)

{

car_contl(0xc0,60,0xe0,60); //左右电机同步,同速运行速度减少

}

else if(temp>10 && temp<=50)

{

car_contl(0xc0,45,0xe0,45); //左右电机同步,同速运行速度减少

}

else if((temp>=0 && temp<=10)

{

car_contl(0x60,1,0x60,1); //停机

delay_nms(100);

PORTG &=~ BIT(0); //低电平时,发光二极管亮

PORTG |= BIT(1); //高电平时,蜂鸣器鸣叫

delay_nms(1000);

PORTG |= BIT(0); //高电平时,发光二极管亮

PORTG &=~ BIT(1); //低电平时,蜂鸣器停止鸣叫

PORTG &=~ BIT(3); //关闭声音源,测量当前小车的坐标

}

else

{

相关主题
文本预览
相关文档 最新文档