搜档网
当前位置:搜档网 › 循迹小车(程序)

循迹小车(程序)

循迹小车(程序)
循迹小车(程序)

附录程序

目录

一、前言------------------------------------------------------------

二、小车功能------------------------------------------------------

三、元器件选择--------------------------------------------------

四、I/O分配及硬件连接简图---------------------------------

五、相关模块、算法---------------------------------------------

六、系统框图------------------------------------------------------

七、调试过程------------------------------------------------------

八、小车图片资料---------------------------------------------------

九、讲座所感------------------------------------------------------

十、实习总结------------------------------------------------------

一、前言

感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。

之前我们本来商量是不是可以拿往年电子设计大赛的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。在网上选购单片机最小系统的时候,发现有一家商铺的最小系统上集成了红外模块,就想着不要浪费了,就萌生了做遥控车的想法,这样系统可以实现两个功能一个是类似于“光影魔术手”一样的物体追踪功能,一个是遥控运行功能。

组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始熟悉开发环境keil uvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。

二、小车具体功能

1、小车系统功能简述

接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。

控制系统方框图:

超声波测距追踪:

三、元器件选择

我们做的小车所用到的器件模块除了7805芯片稳压和一些基本的开关电路,主要的模块如单片机最小系统(含红外、数码管、LED电路)、超声波模块、电机驱动模块均是从网上购买。

主要原因是我们电路设计能力还不足,现在还不是拥有设计电路能力的那个人,那如果是找到别人设计好的电路图然后自己买元件焊接,那么硬件电路其实就是一个体力活,失去了创新的意义。

尽管硬件的焊接、调试其实也是一个比较有意思的过程,但是围着一个已经验证过功能电路团团转没有太大价值,而且我们这次生产实习的时间只有一个周多些,而且实验条件太有限,没有固定的实验室,甚至连示波器、直流电源、万用表、焊枪、螺丝刀等基本的实验条件都不能保证。

我们要在短时间内实现更高的功能,就必须向硬件电路“借力”,把主要的经历放在软件调试上,硬件是“死”的,而可以把更多的想法诸如到软件中让单片机执行,以实现我们所要的功能,享受其中的乐趣。

从经济方面考虑,最后算起来反而是购买比较便宜,量产的PCB电路有时是相当实惠的。如果单买单片机、面包板、LED、数码管、和一些诸如RS232 电平转换芯片、红外发射器、接收管等等。在按照电路图焊接的过程中相当费时费力费神,购置上述器件的花费也在30块钱以上,有些器件如电阻电容很便宜,不能单个购买,但是买多了又很浪费。而网购的最小系统板花费40元(虽然我们原来只想要最简单的有下载口的最小系统,发现了这个之后觉得划算就买了),上面已经将单片机(可插拔)、LED、数码管、红外模块集成,而且做好了USB下载口,并赠送了开发环境和相关例程、下载线。

电机驱动模块更给力。我们本打算用两片7960芯片自己焊接驱动模块,然后用2576给单片机和超声波模块做稳压电源,这样的花费是相当大的,一片7960就要15块钱,2576的价格也在5元左右,这样整个下来就得50块钱左右,我们在网上发现了这个用L298N制作的电机驱动模块,它不但可以同时驱动两个伺服电机,还拥有一个5v稳压输出,还有PWM和全整流两种工作模式,价格是35元,所以我们果断买下了。

超声波模块就没有疑问了,就算知道硬件电路图,买了器件其实在缺少相关设备的情况下调试起来也是非常困难的,我们经过货比三家,选了一个实用又比较实惠的模块。

这样硬件电路置备妥当购置完备了,最小系统板、超声波模块、电机驱动模块、7805稳压芯片、4节干电池盒、由于资金限制,我们向智能汽车实验室借用了一个废旧电池(7v左右,与干电池串联使用)、电子设计留下的废旧车底盘。

最小系统板可以兼容MCS-51系列单片机里的多种型号,我们没用自带的52RC而是采用了其中比较高端的STC12C5A60S2,(其实也就10块钱)它的指令执行周期更短,有AD、PCA

模块(可以工作在PWM 方式)、而且定时器、中断等与传统的8051基本兼容,非常容易掌握,也很适合小车的实时控制。

小车本来我们想用三楼智能小车实验室废弃的小车底座,就是一个小车底座加上电机,只能简单的实现车的直线前进后退。后来偶然在创新实验室发现了另外一个小车,一试之下,发现这个小车底盘非常好用,本来我们都没打算在遥控的时候能实现转弯功能,因为用PWM 控制的舵机太贵了,后来车上竟然发现了小的转向电机,我们眼前一亮,正好电机驱动可以驱动两路电机,就把ENB 输入与5v 短路,在用两个I/0直接控制这个简陋的“舵机”,阴差阳错的实现了遥控模式下的转弯功能。

但是由于电机驱动要求输入电压在7.2v-12v 之间,我们的旧电池很明显力不从心,导致出现了很多意外问题,耽误了不少进度,后来用旧电池与干电池串联供电,单片机采用7805单独稳压供电,虽然问题有点缓解,还是显得不够给力,新电池又比较贵,我们及将就着用了,这也是系统设计的一大遗憾。

另一个遗憾就是没有实现物体的全方位追踪,只能实现前后方向的直线追踪,因为要实现转弯,超声波传感器就要求有多个,而且要求有能精确控制角度的PWM 舵机,所借的小车转向角度不能控制,如果购置躲个超声波传感器和一个PWM 舵机,花费就在300以上,所以我们考虑了一下就放弃了。

四、I/O 分配及硬件连接简图 1、 I/O 分配如下: IO 功能

头文件定义

IO 功能

头文件定义

P1^1

超声波发送使能端口

TX P0^0

电机正反转控制

In1 P1^2 超声波接收检测端口 RX P0^1

电机正反转控制 In2 P1^3 PWM 输出 无 P0^2 转向控制 In3 P1^0 正转标志位 zheng P0^3 转向控制 In4 P1^7 反转标志位

Fan

P1^4 剎停标志位

Ting

P0

数码管数据端口

无 P1^5

左右转向标志位、系统开关标志位 无 P2^0-3 数码管驱动

P1^6

同上

(注:最小系统板上P1口连接了LED )

2、系统硬件连接简图:

五、相关模块、算法

1.单片机最小系统:

型号STC12C5A60S2,选用此型号的重要原因是它自带PWM功能,不同占空比的方波给L298N驱动芯片后能对电机实现调速。

本系统使用的STC12C5A60S2功能模块有:

定时器0红外解码用

定时器1超声波测距用

PWM 电机调速用

P0口数码管数据位

P2_0 P2_1 P2_2 P2_3 数码管使能

P1口连接LED ,显示小车的不同状态

外部中断1红外解码用

2、PCA模块及其在系统中的应用

STC12C5A60S2内部集成了两路可编程计数器阵列(PCA),每个模块均有软件定时器、外

部脉冲捕捉、高速脉冲输出和PWM模块,也就是说这款单片机有两路PWM输出,分别在P1.3和P1.4。(我们只用了一路,P1^3).

3、定时器模块及其在系统当中的应用

STC12C5A60S2拥有4个定时器模块,其中定时器0和1与传统的8051完全兼容(意思就是不光用法,连相关寄存器的地址也一样,这样开发环境中的52RC的头文件还是可以使用的),每个模块均可工作在定时器和计数器模式(通过P3^4,P3^5输入脉冲),定时器有四种工作方式:16位定时计数、13位定时计数、8位自动重装、两个8位计数。

与之相关的特殊功能寄存器有:控制寄存器TCON(其中比较重要的是TF和TR分别是中断标志和计数开关,很奇怪的外部中断的设置IE IT也在该寄存器中)。工作模式设置寄存器TMOD(可以设置定时器还是计数器,工作于哪个方式?)TL,TH中装着当前计数值,非常重要。AUXR可以设置定时器方式下计数频率是等于系统时钟还是等于1/12系统时钟。

系统中用到了定时器0和1,定时器0用于红外模块,通过外部中断测定信号周期(TL0/TH0)以确定其携带的信息是0还是1。定时器1用于超声波模块,测定从发出超声波到超声波返回之间经过的时间,乘以声速除以2来得到距离值。

4、中断模块及其在系统中的应用

中断是CPU处理外界紧急事件的机制,STC12C5A60S2拥有10个中断源,它们有规定好的优先级,有中断嵌套机制,可以对中断进行允许和屏蔽。中断采用两级控制模式,有总开关EA和寄存器中IE单独的开关(默认是0,即禁止)。10个中断中常用的是:定时器0、1;两个外部中断(P3^2/P3^3)、AD中断、串口中断,他们都有规定好的中断向量地址,使用那个中断就将总开关打开,在IE中将专用开关打开,对应中断号interrupt x编写中断服务子程序(不用声明)。

系统中红外模块用到了外部中断INT0(下降沿触发),其原理是红外发射器将按键码按0和1调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。

5、IO模块及其在系统中的应用。

STC12C5A60S2比传统的8051增添了P4和P5两个端口,系统中均未对IO口进行初始化,即工作在默认的双向模式。2v以上为高电平,0.8v一下为低电平,每个口的驱动能力都在20mA 以上,但要求总体不超过120mA.因为P1口接了LED所以被当作标志位用的较多。P0口是数码管的数据端口,P20-3是数码管数据端口,详细内容参见上文中的I/O分配图。(数码管的使用是先用P0口发送8位译码数据,然后用P2口发送4位控制信号,点亮四个数码管中的一个,LED与P1口直接连接,低电平的时候点亮LED,而且具有自保持功能)。

6、超声波模块

超声波模块有TX,RX,VCC,两个GND共计5个端口,使用5V电压供电,系统中使用最小系统板上的5v电压输出。工作时:当TX端口收到一个持续时间在10us以上的脉冲,超声波

模块将发射一组特定超声波,并RX置1超声波遇到障碍物反射回来,当接收装置收到反射回来的信号,将RX置0。系统设计中我们将TX与RX分别与I0口连接,用I0口发送10us 以上脉冲,同时将定时器打开,并开始检测RX,当RX为0时停止计数,取出计数值并计算距离。

7、电机驱动模块(含PWM算法)

电机驱动模块采用L298N元件,输入电压为7.2-12v,同时IN1和IN2可以控制out1和Out2所接电机的正反转,IN3和IN4可以控制out3和ou4所接电机的正反转。10为正转,01为反转,00停止,11剎停。其中ena和enb可以控制输出的电流大小,若用短路帽与+5v短接,则是全整流,若与PWM线连接则使用占空比整流。系统中,IN1和IN2控制电机,并用PWM (P1^3)控制电流以调速。IN3和IN4控制转向电机,使用ENB和5v短接。

PWM就是脉宽调制,就是可以通过设置参数,输出任意占空比的方波,这些高电平时间不一的方波经过电机驱动电路(双桥整流)可以输出大小的不同的电流,用于电机调速。

PCA模块的时钟源可以选择是来自于系统时钟的几分频还是来源于定时器,系统中采用了1/12的系统时钟源频率。因为PWM是8位的,所以PWM输出的波形频率是PCA时钟/256。

PWM的占空比调节是比较器的作用,当计数值CL小于设定值CCAPnL时(单片机的计数与定时器均是加计数)输出为低电平,当计数值超过时,输出高电平,所以我们可以通过设置CCAPnL来改变占空比。(因为每次溢出均需要重新赋值,所以同时给CCPAnH赋相同的值)。

与之相关的特殊功能寄存器寄存器有CCON、COMD、CCAPM0、CCAP0L、CCAP0H.。

系统中用pwminit();对该模块进行初始化,程序中改变占空比用pwm_set()给CCAP0H和CCAP0L赋不同值,用于驱动电机。

PWM模块的工作原理图如下。

8、红外解码遥控模块

红外遥控中我们买的遥控器采用HT6221遥控器芯片

解码的关键是如何识别0、1,从位的定义我们可以发现0、1均以0.56ms的低电平开始,不同的是高电平的宽度不同,0为0.56ms, 1为1.68ms,所以必须根据高电平的宽度区别0和1,如果从0.56ms低电平过后开始,延时0.56ms以后若读到的电平为低说明该位为0,反之则为1。

为了可靠起见延时必须比0.56ms长些但又不能超过1.12ms,否则如果该位为0。读到的已是下一位的高电平因此取1.12ms+0.56ms /2=0.84ms最为可靠一般取0.84ms左右均可。

根据码的格式应该等待9ms的起始码和4.5ms的结果码完成后才能读码。

红外发射器将按键码按0和1调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。发送的信息中包括前导码、识别码、用户码、用户反码(用于校验),其中信息接收完毕且正确后(IROK=1),32位信息均存储在IM数组中,我们需要的码值在IM【2】中,取出来判断要进行的操作即可。

其中我们用到的键码有:

按键功能键码按键功能键码

开机系统开0x09 右箭头右转0x1e

声音开关系统关0x03 Ok键舵机摆正0x05

上箭头前进0x0e 左三角红外模式0x0c

下箭头后退0x1a 右三角物体追踪0x02

左箭头左转0x0a Pause键剎停0x54

9、PID算法

1.标准的直接计算法公式:

Pout(t)=Kp*e(t)+Ki*Σe(t)+Kd*(e(t)-e(t-1));

2. 基本偏差e(t),表示当前测量值与设定目标间的差,设定目标是被减数,结果可以是正或负,正数表示还没有达到,负数表示已经超过了设定值。这是面向比例项用的变动数据。

3. 累计偏差Σ(e)= e(t)+e(t-1)+e(t-2)+…e(1),这是我们每一次测量到的偏差值的总和,这是代数和,考虑到他的正负符号的运算的,这是面向积分项用的一个变动数据。

4. 基本偏差的相对偏差e(t)-e(t-1),用本次的基本偏差减去上一次的基本偏差,用于考察当前控制的对象的趋势,作为快速反应的重要依据,这是面向微分项的一个变动数据。

5. 三个基本参数:Kp,Ki,Kd.为比例常数、积分常数和微分常数

6.积分的处理

本程序所用的积分没有把之前时刻所有的误差都考虑在内,而是用了一个10维的数组err[10],每次测量距离得到当前误差之后就会更新一次数组(在下面的程序中有具体体现),将最新的误差数据置入err[0],然后利用循环语句把数组求和,最后乘以积分常数得到积分部分的输出。

7.微分的处理

本程序中的微分所具有的特色是把在第二点中提到的err[10]数组中前5个和后5个分别求和,之后再做减运算,最后乘以微分常数得到微分部分输出。

六、系统框图

七、调试过程

从上周三下午在图书馆讨论室熟悉编程环境开始,一直到这周二上午解决最后一个小问题,完成最终的调试,全程历时7天,工作时间大概在4天左右。

周一上午在智能小车实验室找到了一个废弃的小车底座带发动机,下午在淘宝上购置元器件,周三元器件上午到货,下午大家一起熟悉编程环境Keil uvision3和烧录工具Stc_Isp,周四大家一起研读单片机STC12C5A60S2的技术文档,然后分配任务,王威负责-电机驱动&PWM模块,裴夏青&陈如峰-超声波测距模块,我负责红外解码模块,周四晚上各自模块调试完毕。周五晚上王威完成超声波模式的整合,试车成功。周六上午大家一起调PID算法,由简单的P控制改成PID控制,消除了余差,减小了超调量,增快了反应速度。超声波模式调试完工,工作进度45%。

周日上午找到另外一辆带有电机的车底座,居然还带舵机!于是我们换上了新的车底座,将原来的简单控制小车直线前进后退改为前后左右共9种模式,有了超声波模式编程的经验,红外遥控模式的编程变得相当顺利,大家一起群策群力,王威主写程序、调试,程序写完编译完毕后却在试车时遇到了巨大的困难,车总是在电机转然后再让舵机转是停车、单片机死机,将前面的简单程序烧录后却又没有问题,几经分析之后依然一筹莫展。在用万用表依次测量各部件电压之后,锁定原因--单片机输入电压不够,借来的旧电池严重不给力啊。最后我们决定串联四节干电池给大电池,并且给单片机用7805稳压(直接接电池电压)供电,问题得到基本解决。晚上红外遥控模式正式调试完毕。而后裴夏青提议将两种模式定义成两个函数,在主程序中调用即可,这样主程序变得非常简洁清晰,大家一致通过。由于超声波检测跟踪以及红外遥控模式的程序是分开写的,头文件中许多定义地址重复,需要大量的删改,十分繁琐,晚上王威完成了两种模式的整合,工作进度90%。

周一早晨王威带着编译无误的程序过来烧录到单片机里,小车却出现诸多问题:只能进入红外遥控模式,不能进入超声波测距跟踪模式,当然两个模式也不能自由切换了;在红外模式下退出模式后不能重新选择,陷入死机状态,按暂停键和退出键效果相同,陷入死机状态。上午暂停键调试完毕,工作进度95%。下午王威缺席,夏青分析程序后觉得可能是每次判断按键码标志位Irok没有清零,我和夏青尝试性的在所有判断按键码后将Irok清零,结果成功进入超声波模式并能实现超声波/红外模式的自由切换,基本完工,仅剩下一个小问题--超

声波模式下舵机乱摆,暂且放下。工作进度99.9%。

周二早晨我早早到了实验室,被放假一天的峰哥也来了,闲着没事于是我俩分析并且调试其程序起来,我在超声波测距每次判断距离误差后将舵机转向控制口In3、In4口清零,烧录之后试车发现在超声波模式下舵机不再乱摆,最后一个问题得以解决,大功告成!工作进度100%!!!

在调试的过程当中在一些小错误中学到了不少零碎的知识,如:复用引脚第二功能优先、LED自保持、IO口不如不初始化直接工作在双向模式、在各个模块连接的时候一定要共地,在开发环境下中断服务子程序的写法、超声波由于IO端口问题问题不能数码管显示距离(P2口换到P1口)、舵机在超声波模式剧烈震动(在每次判断误差时让IN3/IN4归零)、在PID 运算中加入微分之后,震荡更加厉害(数组求差值求反了)、单片机头文件的写法等。一些小问题的解决比如头文件缺少、复杂,PWM赋值函数适应PID,当然有时也犯诸如线忘了插、键值写错的很低级的错误,但是经过一步步排查总能找出来。调试过程中耗时长、并且当时百思不得其解的问题有:

1单片机在工作的过程当中总是死机?必须重启才能工作,而且死机更加频繁

在超声波模块调试过程中我们发现了这个问题,我们首先从程序中查找错误,用了之前已经调试通过的简单程序,工作一段时间后还是会死机,我们把注意力转移到硬件上,在反复排查后,我们把问题锁定在了单片机电压上,经过测试,我们发现电机工作一段时间后,由电机驱动输送给单片机的电压降到了3.5V以下,单片机复位,停止工作。我们的解决方法是用了三节干电池串联主电池。问题暂时得到解决。当我们加上红外遥控,两个电机一起工作的时候,同样的问题再次出现,我们决定串联四节干电池,并且给单片机用7805稳压(直接接电池电压),问题得到基本解决。因为7805要求电压在5v以上,所以在系统长时间工作的情况下单片机还是会复位。

2、系统不能进行功能切换,而且在一个模式下工作极不稳定

在开始进行两个模块的程序整合的时候,总是不能相互切换,而且在红外模式下工作很不稳定,按关机键一次就可以彻底关机,经过排查,我们发现红外取值有效的标志位IROK=1之后,判断并执行完一步之后,没有清零,导致程序中一直读取IM【2】中的数据(乱码),而且关机键之后在IROK=1的情况下,数组中的0x03可以直接让系统停止工作。在每次键值判断之后都给IROK清零之后,问题得到了圆满的解决。

八、小车图片资料

整车图片

整车侧面图片

单片机最小系统板图片

超声波模块图片

红外线遥控器(采用HT6221遥控器芯片)

红外接收管图片

电机驱动模块图片

九、讲座所感

第一个报告是东方电子的刘总给我们做的,主要介绍物联网基础以及发展,主题为“物联网感知世界”。自从IBM提出“智慧地球”创想之后,物联网在全世界范围内蓬勃发展,RFID标签已经在全世界范围内得到广泛应用。在温总理在无锡考察提出我国要大力建设物联网之后,我国的物联网产业开始进入高速发展期,现在已经建成了较为完整的产业链。和其他电子产业一样,物联网技术的主导者为美国和日本,而我国在物联网产业标准、技术方面离世界一流尚有一定差距。刘总在介绍了物联网的基本原理之后重点介绍了RFID电子标签,RFID由于其非接触感知性、唯一性、稳固性使其已被广泛应用于各行各业,例如智能图书馆、智能高速路收费、服装业应用、婴儿放报错、动物饲养、汽车制造应用、电子支付、电子车票电力智能巡检系统、变电站运行检修人员安保定位系统等等。物联网产业中利润最大的两个环节为芯片制造以及系统集成。芯片制造的领跑者为美国以及日本,中国有两个科研所有所斩获但尚未量产根本无力竞争。烟台东方电子的强项为系统集成,下属子公司东方英伟达主要做系统集成,已经有很多成熟的的产品问世例如烟台港集装箱货运、张裕葡萄酒的电子标签、张裕博物馆门票等等。刘总谈东方电子的发展战略时提到中国研发的无奈,当你花费大量人力物力苦心孤诣研发出来一款产品,却发现已经远远落后于市场、收不回回报时,下次你做研发还会这么有勇气么?所以东方电子在芯片这方面不得不和微软、IBM、日立等等国际厂商合作,用他们已经成熟的芯片来占领市场,这也是中国厂商巨大的无奈吧。

第二个讲座由数学院的吴昭景博士所做,题目为《控制论及通才硕学》。吴老师在控制领域最高学术机构IEEE AC和IFAC上所办刊物上都发表了两篇论文,应该能代表烟大控制理论发展的最前沿。吴老师主要给我们介绍维纳、钱学森、陈翰馥、郭雷、彭实戈、朱位秋

等大家的成长历程,继而引出控制论是一门横断科学,横跨各学科,以前的大师们基本上都是横跨数学、物理、机械各学科的牛人。这就对立志要从事本专业我们提出了通才硕学的要求,要求我们视野要开阔、涉猎范围要广、所学要博。吴老师给我列举了好几十种控制算法,给我们举了个例子:假如你设计好一个控制系统,你就需要了解诸多控制方法然后才能择优取之,这对你的学识就提出了极高的要求,不博学不行。吴老师表现得非常诚恳,他最后讲述自己人生经历也给了我很大的启发。“人可以波折,但必须站起来”,两次高考失利导致吴老师颓废不已、混沌度日,师范毕业后被分配到老家的乡村中学教书,极度失意。在教书7年后吴老师走出雾霭,决定考研,2年后考上研究生,然后研究生提前毕业,考上东北大学博士研究生,继而至烟大教学,在烟大教学、科研成果斐然。这绝对是发生在我们身边的现实版励志故事。吴老师最后给了我们一些建议:年轻人要有理想,有抱负,有求知欲,善于归纳,勤于思辨,面对现实,在应试中提高学习能力,适应社会,努力实现自身抱负和价值。

最后一个讲座请来了东方电子工程部门出身的刘总。刘总的讲座实用性非常强。首先以东方电子给企业做的几个系统为例给我们介绍了工业控制系统。刘总从底层讲起、按层次依次将各个元件进行介绍,让我们实实在在见识到了控制网络是怎么样由一个个部件组成起来的。刘总给了我们一种整体的、全局的理念,将来进企业或者做研发你非常可能只是从事其中很小的一个环节,但你必须有整体意识,善于分析,把握全局,这样才能真真正正将自己的工作完成到优秀并且脱颖而出。作为招聘的领导,刘总给我们提了一些要求和建议,一定要善于总结、见多识广,不能仅仅知道课本上的一些知识,课本上的知识很可能是过时的、小众的,而你必须与时俱进,统揽全局。

十、实习总结

这是我第一次做专业方面的比较大型的设计,比较幸运的我加入了一个相当强悍的队伍,然后完成了一个感觉还比较成功的作品,所学的知识也得到了相当多的应用。从大一的C语言、大二的微机原理、单片机、大三的嵌入式中关于定时/计数器、I/O口、串/并行通讯、中断等等各模块的介绍,大二模拟电子技术到这学期过程控制课程刚学的PID算法,都得到了应用,也相当于将所学知识进行了一次小小的整合和综合性应用吧。看我们的自己小车功能越来越多,跑得越来越流畅,真真切切的感觉到什么叫“知识就是力量”。

首先感谢老师的指导和支持,给我们这次实现自己想法的机会,并给我们提供了实验室和必要的实验条件。感谢创新实验室里的同学们以及我们的特别技术顾问--来自计092-3的梁陈同学,帮我们找到了带有舵机的小车底座,帮我们顺手焊了一个7805稳压电路,给我们提供电池盒、杜邦线以及各种小器件--多谢你的支持!最后一定要提的是我们精诚合作齐心协力的队伍,大家群策群力完成主程序后,最后时刻由于各种原因各种缺席,居然是不同的人员组合完成了不同的纠错、调试任务,不同的组合将程序从90%、95%推进到99.9%以及最后的100%,大家一起见证了最后小车的流畅运行。感谢我强大的队员们:王威--我们队伍当之无愧的核心,将我们各自的模块组合起来以及完成了最后繁琐的两种控制模式的结合;夏青--经常抬头望天进行云计算的才女,几乎分析出了所有出现故障时的前因后果,不得不佩服你的专业基础;峰哥--张飞也能绣花,粗犷的外表下却有着一双灵巧的双手,细腻程度令人惊叹!这次实习因为有你们而格外美丽!O(∩_∩)O~

附:系统程序:

//******************************系统功能说明************************************************

/*接通电源后,按下开机键,单片机进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与

物体始终保持设定的距离,按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停

在两个模式下按关机键,可以终止当前模式,重新选择功能,此时按关机键,直接关机,必须按开机键才能重新选择*/

//1111**************************IO分配详细说明**********************************************

//系统IO分配

//p1_1、p1-2,超声波模块发送和接受信号线tx rx

//p1_3,pwm输出线

//p1_0、p1_7,电机正反转的标志位zheng fan

//p0数码管数据口

//p2_0/1/2/3数码管驱动

//p0_0、p0_1电机驱动正反转控制

//p0_1、p0_2转向电机(舵机)正反转控制位

//p1_4剎停标志位

//p1_5、p1_6左右方向标志位,红外功能开关标志位

//2222****************************头文件区***************************************************

#include //系统头文件

#include //IO口、定时器、中断、串口等相关特殊寄存器头文件

#include //自定义功能IO头文件

#include //自编stc12csa60s的pwm模块头文件

//AT89X51.H中除了IO口和中断的定义,其余的都与reg52.h的定义重合。

//3333****************************公共变量区**************************************************

//下面是关于红外遥控模块的公共变量区

unsigned char f; //找到起始码开始取值的标志

#define Imax 14000 //此处为晶振为11.0592时的取值,

#define Imin 8000 // 用来识别起始码

#define Inum1 1450 //周期取值范围,代表0 和1

#define Inum2 700

#define Inum3 3000 //不同的周期所对应的计数值,代表不同的信息

unsigned char Im[4]={0x00,0x00,0x00,0x00}; //起始码、用户码、校验码的存储数组

unsigned long m,Tc; //位计数、信号周期计数值

unsigned char IrOK; //读码有效标志位

//下面是关于超声波模块的公共数据

#define SETVALUE 15 //设定值为15厘米

#define P 15

#define I 0.5

#define D 10

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管的0-9译码值

long S=0; //获取距离值(当前值)

int OFFSET=0; //偏差

int pwm_kong=0;//PID运算后的占空比控制因子0-255

int SUM_OFFSET=0; //上一次的偏差

int err[10];

int I_OFFSET=0;

int qian_sum=0;

int hou_sum=0;

int D_OFFSET=0;

智能循迹小车程序

#include #define uchar unsigned char #define uint unsigned int //D0-D7:f,b,a,e,d,h,c,g 共阴依次编码 //74LS04反相器驱动数码管 uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7}; uchar i = 0; //用于0-3数码管轮流显示 uint j = 0; //计时的次数 uint time=0; //计时 uint pwm=16; //占空比 uint speed; //调制PWM波的当前的值 sbit R=P3^2; //右边传感器P3^2 sbit L=P3^3; //左边传感器P3^3 //电机驱动口定义 sbit E NB=P1^0; //前轮电机停止控制使能 sbit E NA=P1^1; //后轮控制调速控制端口 sbit I N1=P1^2; //前轮 sbit I N2=P1^3; //前轮 sbit I N3=P1^4; //后轮 sbit I N4=P1^5; //后轮 void Init() { TMOD = 0x12; //定时器0用方式2,定时器1用方式1 TH0=(256-200)/256; //pwm TL0=(256-200)/256; TH1 = 0x0F8; //定时2ms TL1 = 0x30; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } void tim0(void) interrupt 1 //产生PWM { speed ++; if(speed <= pwm) //pwm 就相当于占100的比例 { ENA = 1; } else if(speed < 100) { ENA = 0; }

智能循迹小车详细制作过程

(穿山乙工作室)三天三十元做出智能车 基本设计思路: 1.基本车架(两个电机一体轮子+一 个万向轮) 2.单片机主控模块 3.电机驱动模块(内置5V电源输出) 4.黑白线循迹模块 0.准备所需基本元器件 1).基本二驱车体一台。(本课以穿山乙推出的基本车体为 例讲解) 2).5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红 色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40 个。 3).5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一 个;双孔接线柱三个、10u电解电容2个、排针12个、9110 驱动芯片2个。 4).5x7cm洞洞板、LM324比较器芯片各一个;红外对管三 对、4.7K电阻3个、330电阻三个、红色3mmLED三个。 一、组装车体

(图中显示的很清晰吧,照着上螺丝就行了) 二、制作单片机控制模块 材料:5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。 电路图如下,主要目的是把单片机的各个引脚用排针引出来,便于使用。我们也有焊接好的实物图供你参考。(如果你选用的是STC98系列的单片机在这里可以省掉复位电路不焊,仍能正常工作。我实物图中就没焊复位)

三、制作电机驱动模块 材料:5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。 电路图如下,这里我们把电源模块与驱动模块含在了同一个电路板上。因为电机驱动模块所需的电压是+9V左右(6—15V 均可),而单片机主控和循迹模块所需电压均为+5V。 这里用了一个7805稳压芯片将+9V电压稳出+5V电压。

智能循迹小车总体设计方案

智能循迹小车总体设计方案 1.1 整体设计方案 本系统采用简单明了的设计方案。通过高发射功率红外光电二极管和高灵敏度光电晶体管组成的传感器循迹模块黑线路经,然后由AT89S52通过IO口控制L298N驱动模块改变两个直流电机的工作状态,最后实现小车循迹。 1.2系统设计步骤 (1)根据设计要求,确定控制方案; (2)将各个模块进行组装并进行简单调试; (3)画出程序流程图,使用C语言进行编程; (4)将程序烧录到单片机内; (5)进行调试以实现控制功能。 1.2.1系统基本组成 智能循迹小车主要由AT89S52单片机电路、循迹模块、L298N驱动模块、直流电机、小车底板、电源模块等组成。 (1)单片机电路:采用AT89S52芯片作为控制单元。AT89S52单片机具有低成本、高性能、抗干扰能力强、超低功耗、低电磁干扰,并且与传统的8051单片机程序兼容,无需改变硬件,支持在系统编程技术。使用ISP可不用编程器直接在PCB板上烧录程序,修改、调速都方便。 (2)循迹模块:采用脉冲调制反射红外发射接收器作为循迹传感器,调制信号带有交流分量,可减少外界的大量干扰。信号采集部分就相

当于智能循迹小车的眼睛,有它完成黑线识别并产生高、低平信号传送到控制单元,然后单片机生成指令来控制驱动模块来控制两个直流电机的工作状态,来完成自动循迹。 (3)L298N驱动模块:采用L298N作为点击驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便、稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。

循迹小车基本思路

循迹小车基本思路 1)基本车架:两个直流减速电动机;万向轮一个;模板一块; 2)基本模块:7.2V电源一块;输出为5V的稳压模块一个;单片机最小系统主控模块;L298电机驱动;光电传感器4个。 3)黑线循迹。 4)组装车型: 5)L298驱动内部电路: 6)调试程序:另附~。 #include 7)#define uchar unsigned char

8)#define uint unsigned int 9)sbit PWM1=P1^0; //电机使能10)sbit PWM2=P1^1; 11)sbit IN1=P1^2; //电机输入控制12)sbit IN2=P1^3; 13)sbit IN3=P1^4; 14)sbit IN4=P1^5; 15)sbit RP1=P2^0; //传感器管脚声明16)sbit RP2=P2^1; 17)sbit RP3=P2^2; 18)sbit RP4=P2^3; 19)int num1,num2,s1,s2; 20) 21)void init() 22){ 23)TMOD=0x01; 24)TH0=(65536-1000)/256; 25)TL0=(65536-1000)%256; 26)ET0=1; 27)EA=1; 28)TR0=1; 29)}

30)void delay(uint z) 31){ 32)uint x,y; 33)for(x=z;x>0;x--) 34){for(y=110;y>0;y--);} 35)} 36)void forward1()//电机前进37){ 38)IN1=0; 39)IN2=1; 40)} 41)void forward2() 42){ 43)IN3=0; 44)IN4=1; 45)} 46)void back1() //电机后退47){ 48)IN1=1; 49)IN2=0; 50)} 51)void back2()

PWM调速+循迹__智能小车程序

//T0产生双路PWM信号,L298N为直流电机调速,接L298N时相应的管脚上最好接上10K 的上拉电阻。 /* 晶振采用12M,产生的PWM的频率约为100Hz */ #include #include #define uchar unsigned char #define uint unsigned int sbit en1=P3^4; /* L298的Enable A */ sbit en2=P3^5; /* L298的Enable B */ sbit s1=P1^0; /* L298的Input 1 */ sbit s2=P1^1; /* L298的Input 2 */ sbit s3=P1^3; /* L298的Input 3 */ sbit s4=P1^2; /* L298的Input 4 */ sbit R=P2^0; sbit C=P2^1; sbit L=P2^2; sbit key=P1^4; uchar t=0; /* 中断计数器*/ uchar m1=0; /* 电机1速度值*/ uchar m2=0; /* 电机2速度值*/ uchar tmp1,tmp2; /* 电机当前速度值*/ /* 电机控制函数index-电机号(1,2); speed-电机速度(0-100) */ void motor(uchar index, char speed) { if(speed<=100) { if(index==1) /* 电机1的处理*/ { m1=abs(speed); /* 取速度的绝对值*/ s1=1; s2=0; } if(index==2) /* 电机2的处理*/ { m2=abs(speed); /* 电机2的速度控制*/ s3=1; s4=0; } } } void Back(void) {

循迹小车Arduino 程序

//循迹小车Arduino 程序: // R是右(right),L是左(left) 小车对着自己看时分的左右int MotorRight1=14; //A0 IN1 int MotorRight2=15; //A1 IN2 int MotorLeft1=16; //A2 IN3 int MotorLeft2=17; //A3 IN4 int MotorRPWM=5; //PWM 5 int MotorLPWM=3; //PWM 3 const int SensorLeft = 2; //左感測器輸入腳 const int SensorRight = 6; //右感測器輸入腳 int SL; //左感測器狀態 int SR; //右感測器狀態 void setup() { Serial.begin(9600); pinMode(MotorRight1, OUTPUT); // 腳位 14 (PWM) pinMode(MotorRight2, OUTPUT); // 腳位 15 (PWM) pinMode(MotorLeft1, OUTPUT); // 腳位 16 (PWM) pinMode(MotorLeft2, OUTPUT); // 腳位 17 (PWM) pinMode(MotorLPWM, OUTPUT); // 腳位 3 (PWM) pinMode(MotorRPWM, OUTPUT); // 腳位 5 (PWM)

pinMode(SensorLeft, INPUT); //定義左感測器 pinMode(SensorRight, INPUT); //定義右感測器 } void loop() { SL = digitalRead(SensorLeft); SR = digitalRead(SensorRight); if (SL == LOW&&SR==LOW)// 前進 { digitalWrite(MotorRight1,LOW);//IN1 右电机高电平反转 digitalWrite(MotorRight2,HIGH);//IN2 右电机高电平正转 analogWrite(MotorRPWM,130); //0---100--250 digitalWrite(MotorLeft1,LOW);//IN3 左电机高电平正转 digitalWrite(MotorLeft2,HIGH);//IN4 左电机高电平反转 analogWrite(MotorLPWM,130); } else // R是右(right),L是左(left) 小车对着自己看时分的左右 { if (SL == HIGH & SR == LOW)// 左白右黑, 快速左轉 { delay(1);

智能小车系统设计(循迹超声波遥控)

<<计算机控制技术综合训练>>任务书

附录: 电信学院课程设计报告要求 1、设计题目; 2、目录; 3、本设计的基本原理; 4、简要说明本设计内容、用途及特点; 5、本设计达到的性能指标; 6、设计方案的选择; 7、写出各部分设计过程、工作原理、元器件选择; 8、绘制图纸(手绘2号图纸); 9、设计参考文献; 10、附录; 11、设计总结体会; 12、设计说明书不得少于10000字。

智能小车运行图 显示速度,距离,超声波探测距离

经过调试,小车完美实现了如下功能 1.小车具有无线遥控功能,小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移。 2.小车具有循迹及避障功能,实现了舵机转动下的超声波壁障功能,并且可以正确有序显示小车位移、速度及与前方障碍物距离。 3.与其它组的小车模型配合可以完成交替领跑任务。 4.小车所有模式切换均由遥控器控制。 流程图

硬件原理图

附件一:智能小车系统程序 #include #include sbit AA=P3^0; sbit DD=P3^1; sbit BB=P3^2; sbit CC=P2^2; sbit LCM_RW=P2^4; //定义LCD引脚 sbit LCM_RS=P2^3; #define RX P2_0 #define TX P2_1 #define LCM_E P2_5 #define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度#define LCM_Data P0 #define Busy 0x80 //用于检测LCM状态字中的Busy标识 #define Left_1_led P3_7 //P3_7接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 #define XUNJI_left_led P3_6 //P3_6接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 #define XUNJI_right_led P3_5 //P3_5接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 #define Right_2_led P3_4 //P3_4接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 #define Left_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //左边两个电机向前走 #define Left_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //左边两个电机向后转 #define Left_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //左边两个电机停转 #define Right_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //右边两个电机向前走 #define Right_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //右边两个电机向后走 #define Right_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //右边两个电机停转 void LCMInit(void); //LCD初始化函数 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //LCD显示一个字符函数 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串函数 void Delay5Ms(void); //延时5毫秒函数

智能循迹小车设计

智能循迹/避障小车研究 工作报告 一、智能循迹小车程序结构框图 二、Proteus仿真图 三、软件程序设计

一、智能循迹小车程序结构框图 经过几天在网上的查找,对智能循迹/避障小车有了大致的了 解, 一般有三个模块: 1、最基本的小车驱动模块,使用两个二相四线步进电机对小车的两个后轮分别进行驱动,前轮最好用万向轮,能使小车更好地转弯; 2、小车循迹模块,在小车底部有三个并排安装的红外对管,对黑色与白色的反射信号不同,经单片机处理后对小车进行相应处理; 3、避障模块,我写的程序中对于避障模块是用中断来处理的(即安装在小车车头的红外对管检测到有障碍物后,就会向单片机的P3_2口输出一个高电平或是低电平,这时中断程序将对小车进行预先设定好的避障处理),但是在程序结构框图中,我不太会表示中断处理方式,所以就用查询的方式画了。

N Y N Y 二、Proteus 仿真图 我用Proteus 大概地仿真了小车的运行状态。图中的两个二相四线步进电机就代表小车的左右轮(假定步进电机顺时针转动方向为小车前进方向),网上有很多种驱动芯片,在仿真时我只使用L298N 芯

片来驱动步进电机。用三个单刀双制开关模拟用于小车循迹的三个红外对管的输出信号,经一个与门与三极管开关连接到P3_3口,中断程序对P1_0, P1_1, P1_2三个口进行检测,并做出相应处理。同时因为避障模块的优先级高于循迹模块,所以将外部中断0用于避障,外部中断1用于循迹。P1_3口则用于检测小车是否到达终点。 1、小车驱动模块: 使用一片298芯片驱动一个二相四线步进电机,电机的电压为12V。

智能循迹小车实训报告

实训报告课程名称:单片机实训 完成日期:2014 年 7 月 10 日

任务书 实训(习)题目: 智能小车的功能设计与实现 实训(习)目的: (1)、巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力; (2)培养针对课程需要。锻炼学生查阅有关手册、图标及文献资料的自学能力,提高组成系统、编程、调试的动手能力; (3)对课程的方案分析、选择、比较、熟悉单片机系统开发、研制的过程,软硬件设计的方法、内容及步骤。 实训(习)内容: 安装智能小车及相关功能设计、调试 实训(习)要求: 1. 本实训要求由一个团队完成,团队人员不超过8个人。 2. 通过所学知识并利用智能小车、计算机、 keil软件、烧写软件等完成实训项目,并拟定实训报告。 3. 能正确组装和调试智能小车。 4. 实训完成后,根据实训内容撰写实训报告书一份。 实训报告应包括的主要内容(参考) 1 系统硬件组成与工作原理 1.1 控制器与最小系统 1.2 显示模块与按键模块 1.3 报警模块 1.4 电机与驱动模块的工作原理与接口 1.5循迹模块的工作原理与接口 1.6 避障模块的工作原理与接口 2 功能方案及软件设计 2.1 功能设计 2.2 软件设计 (结合某一赛道、障碍设置说明程序设计思路,给出流程图、程序代码) 3功能调试与总结 3.1 功能调试 排版要求:正文小4宋体;段首缩进2字,行间距固定值18磅。内容展开可以

按3级标题形式,如:按1 ……、1.1 ……、1.1.1 形式(如果需要)。每个1级标题另起一页,1级标题三号黑体居中,题序和标题之间空两个空格,不加标点,段前、段后均为1行,固定值22磅。2级标题:四号黑体左起,四号黑体,段前、段后均为12磅。三级标题:小四号黑体左起,段前、段后均为6磅。 图名、表名五号黑体,英文、数字字体为Times New Roman 页边距:上、下、左3厘米,右2厘米,A4纸打印。 1系统硬件组成与工作原理 1.1.1控制器与最小系统 最小系统:要使一块单片机芯片工作起来最简陋的接线方式就是单片机的

智能循迹小车程序

智能循迹小车程序 Document number:BGCG-0857-BTDO-0089-2022

#include<> #define uchar unsigned char #define uint unsigned int //D0-D7:f,b,a,e,d,h,c,g 共阴依次编码 //74LS04反相器驱动数码管 uchar code table[10] = {0x5F,0x42,0x9E,0xD6,0xC3,0xD5,0xDD,0x46,0xDF,0xD7}; uchar i = 0; //用于0-3数码管轮流显示uint j = 0; //计时的次数 uint time=0; //计时 uint pwm=16; //占空比 uint speed; //调制PWM波的当前的值 sbit R=P3^2; //右边传感器 P3^2 sbit L=P3^3; //左边传感器 P3^3 //电机驱动口定义 sbit ENB=P1^0; //前轮电机停止控制使能 sbit ENA=P1^1; //后轮控制调速控制端口 sbit IN1=P1^2; //前轮 sbit IN2=P1^3; //前轮 sbit IN3=P1^4; //后轮

sbit IN4=P1^5; //后轮 void Init() { TMOD = 0x12; //定时器0用方式2,定时器1用方式1 TH0=(256-200)/256; //pwm TL0=(256-200)/256; TH1 = 0x0F8; //定时2ms TL1 = 0x30; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; } void tim0(void) interrupt 1 //产生PWM { speed ++; if(speed <= pwm) //pwm 就相当于占100的比例{ ENA = 1; }

智能循迹小车程序代码

/**************************************************************** ************ 硬件连接 P1_4接驱动模块ENA使能端,输入PWM信号调节速度 P1_5接驱动模块ENB使能端,输入PWM信号调节速度 P1_0 P1_1接IN1 IN2 当P1_0=1,P1_1=0; 时左电机正转驱动蓝色输出 端OUT1 OUT2接左电机 P1_0 P1_1接IN1 IN2 当P1_0=0,P1_1=1; 时左电机反转 P1_2 P1_3接IN3 IN4 当P1_2=1,P1_3=0; 时右电机正转驱动蓝色输出 端OUT3 OUT4接右电机 P1_2 P1_3接IN3 IN4 当P1_2=0,P1_3=1; 时右电机反转 P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1 P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2 P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3 P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4 八路寻迹传感器有信号(白线)为0 没有信号(黑线)为1 ***************************************************************** ***********/ #include #define Right_moto_pwm P1_4 //接驱动模块ENA使能端,输入PWM 信号调节速度 #define Left_moto_pwm P1_5 //接驱动模块ENB使能端,输入PWM 信号调节速度 #define Left_1_led P2_0 //四路寻迹模块接口第一路 #define Left_2_led P2_1 //四路寻迹模块接口第二路 #define Right_1_led P2_2 //四路寻迹模块接口第三路 #define Right_2_led P2_3 //四路寻迹模块接口第四路 #define Left_moto_go {P1_0=0,P1_1=1;} //左电机前进 #define Left_moto_back {P1_0=1,P1_1=0;} //左电机后退 #define Left_moto_stop {P1_0=1,P1_1=1;} //左电机停转 #define Right_moto_go {P1_2=0,P1_3=1;} //右电机前转

51单片机循迹小车程序

/*功能:寻迹小车 使用芯片:AT89S52或者STC89C52 或A T89S51 STC89C51 晶振:12MHZ 编译环境:Keil 作者:MH~?*/ #include <reg51、h>// 引用标准库得头文件 #include #define ucharunsignedchar #defineuintunsigned int //=================电机驱动===================== sbit dianji_r = P3^0;//右边电机控制口,低电平转? sbitdianji_l= P3^7;//左边电机控制口,低电平转 //=============循迹感应接口====================== sbit xjmk_r=P3^2;// 右边寻迹模块检测口INT0 sbit xjmk_l= P3^3;// 左边寻迹模块检测口INT1 void check_righet();//右边时候检测到黑线测试程序 voidcheck_left();//左边时候检测到黑线测试程序 void delay_50us(uint t); void delayms(uintMs); ucharr_count;//右边传感器检测到得次数计数单元 uchar l_count; uint time; //***********************主程序****************************** main() { time=50; dianji_r=0;//上电时右侧电机运行 dianji_l=0;//上电时左侧电机运行 EA=1; EX1=1; EX0=1; IT1=0; IT0=0; xjmk_r=1;//置IO为1,准备读取数据 xjmk_l=1; _nop_(); r_count=0; l_count=0; while(1) { _nop_(); //check_righet();//调用右边寻迹检测传感器 //check_left();//

智能循迹小车详细源代码程序MSPID

巡线车程序(完整版) 1 #ifndef _Macro.h_ 2 #define _Macro.h_ 3 #include 4 #include 5 #define uchar unsigned char 6 #define uint unsigned int 7 #define one 11.11 8 #define LMAX 1999 9 #define RMAX 3999 10 #define CPU_F ((double)8000000) 11 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 12 13 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 14 #define PC 20 // 比例放大系数 15 #define IC 0 //积分放大系数 16 #define DC 85 //大系数 17 #define LEFTOUT TACCR1 18 #define RIGHTOUT TACCR2 19 #define SensorIn P5IN 20 #define F 5000//5000hz 21 #define Period (8000000/F) 22 #define EnableLeftPos P3OUT|=BIT1 23 #define UnenableLeftPos P3OUT&=~BIT1 24 25 #define EnableLeftNeg P3OUT|=BIT0 26 #define UnenableLeftNeg P3OUT&=~BIT0 27 28 #define EnableRightPos P3OUT|=BIT2 29 #define UnenableRightPos P3OUT&=~BIT2 30 31 #define EnableRightNeg P3OUT|=BIT3 32 #define UnenableRightNeg P3OUT&=~BIT3 33 34 #define Basic_Left 100//百分之八十 35 #define Basic_Right 100//Basic_Left 36 #define MAX (100) 37 #define MIN (-100) 38 #define foreward 1 39 #define backward 0

智能循迹小车总体设计方案

智能循迹小车总体设计方案 整体设计方案 本系统采用简单明了的设计方案。通过高发射功率红外光电二极管和高灵敏度光电晶体管组成的传感器循迹模块黑线路经,然后由AT89S52通过IO口控制L298N驱动模块改变两个直流电机的工作状态,最后实现小车循迹。 系统设计步骤 (1)根据设计要求,确定控制方案; (2)将各个模块进行组装并进行简单调试; (3)画出程序流程图,使用C语言进行编程; (4)将程序烧录到单片机内; (5)进行调试以实现控制功能。 系统基本组成 智能循迹小车主要由AT89S52单片机电路、循迹模块、L298N驱动模块、直流电机、小车底板、电源模块等组成。 (1)单片机电路:采用AT89S52芯片作为控制单元。AT89S52单片机具有低成本、高性能、抗干扰能力强、超低功耗、低电磁干扰,并且与传统的8051单片机程序兼容,无需改变硬件,支持在系统编程技术。使用ISP可不用编程器直接在PCB板上烧录程序,修改、调速都

方便。 (2)循迹模块:采用脉冲调制反射红外发射接收器作为循迹传感器,调制信号带有交流分量,可减少外界的大量干扰。信号采集部分就相当于智能循迹小车的眼睛,有它完成黑线识别并产生高、低平信号传送到控制单元,然后单片机生成指令来控制驱动模块来控制两个直流电机的工作状态,来完成自动循迹。 (3)L298N驱动模块:采用L298N作为点击驱动芯片。L298N具有高电压、大电流、响应频率高的全桥驱动芯片,一片L298N可以分别控制两个直流电机,并且带有控制使能端。该电机驱动芯片驱动能力强、操作方便、稳定性好,性能优良。L298N的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。另外,L298N的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题。

智能寻迹小车以及程序

寻迹小车 在历届全国大学生电子设计竞赛中多次出现了集光、机、电于一体的简易智能小车题目。笔者通过论证、比较、实验之后,制作出了简易小车的寻迹电路系统。整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。 总体方案 整个电路系统分为检测、控制、驱动三个模块。首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。系统方案方框图如图1所示。 图1 智能小车寻迹系统框图 传感检测单元 小车循迹原理 该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。 红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。 传感器的选择 市场上用于红外探测法的器件较多,可以利用反射式传感器外接简单电路自制探头,也可以使用结构简单、工作性能可靠的集成式红外探头。ST系列集成红外探头价格便宜、体积小、使用方便、性能可靠、用途广泛,所以该系统中最终选择了ST168反射传感器作为红外光的发射和接收器件,其内部结构和外接电路均较为简单,如图2所示:

图2 ST168检测电路 ST168采用高发射功率红外光、电二极管和高灵敏光电晶体管组成,采用非接触式检测方式。ST168的检测距离很小,一般为8~15毫米,因为8毫米以下是它的检测盲区,而大于15毫米则很容易受干扰。笔者经过多次测试、比较,发现把传感器安装在距离检测物表面10毫米时,检测效果最好。 R1限制发射二极管的电流,发射管的电流和发射功率成正比,但受其极限输入正向电流50mA的影响,用R1=150的电阻作为限流电阻,Vcc=5V作为电源电压,测试发现发射功率完全能满足检测需要;可变电阻R2可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。因为传感器输出端得到的是模拟电压信号,所以在输出端增加了比较器,先将ST168输出电压与2.5V进行比较,再送给单片机处理和控制。 传感器的安装 正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好坏的一个重要因素。从简单、方便、可靠等角度出发,同时在底盘装设4个红外探测头,进行两级方向纠正控制,将大大提高其循迹的可靠性,具体位置分布如图3所示。

智能循迹小车详细制作过程

(穿山乙工作室) 三天三十元做出智能车 0.准备所需基本元器件 1).基本二驱车体一台。(本课以穿山乙推出的基本车体为例讲解) 2).5x7cm 洞洞板、单片机卡槽、51单片机、石英晶体、红色LED 、1K 电阻、10K 排阻各一个;2个瓷片电容、排针40个。 3).5x7cm 洞洞板、7805稳压芯片、红色LED 、1K 电阻各一个;双孔接线柱三个、10u 电解电容2个、排针12个、9110驱动芯片2个。 4).5x7cm 洞洞板、LM324比较器芯片各一个;红外对管三对、4.7K 电阻3个、330电阻三个、红色3mmLED 三个。 一、组装车体 基本设计思路: 1.基本车架(两个电机一体轮子+一个万向轮) 2.单片机主控模块 3.电机驱动模块(内置5V 电源输出) 4.黑白线循迹模块

(图中显示的很清晰吧,照着上螺丝就行了) 二、制作单片机控制模块 材料:5x7cm洞洞板、单片机卡槽、51单片机、石英晶体、红色LED、1K电阻、10K排阻各一个;2个瓷片电容、排针40个。 电路图如下,主要目的是把单片机的各个引脚用排针引出来,便于使用。我们也有焊接好的实物图供你参考。(如果你选用的是STC98系列的单片机在这里可以省掉复位电路不焊,仍能正常工作。我实物图中就没焊复位)

三、制作电机驱动模块 材料:5x7cm洞洞板、7805稳压芯片、红色LED、1K电阻各一个;双孔接线柱三个、10u电解电容2个、排针12个、9110驱动芯片2个。 电路图如下,这里我们把电源模块与驱动模块含在了同一个电路板上。因为电机驱动模块所需的电压是+9V左右(6—15V 均可),而单片机主控和循迹模块所需电压均为+5V。 这里用了一个7805稳压芯片将+9V电压稳出+5V电压。 +9V

智能循迹小车实验报告

简单电子系统设计报告 ---------智能循迹小车 学号201009130102 年级10 学院理学院 专业电子信息科学与技术 姓名马洪岳 指导教师刘怀强

摘要 本实验完成采用红外反射式传感器的自寻迹小车的设计与实现。采用与白色地面色差很大的黑色路线引导小车按照既定路线前进,在意外偏离引导线的情况下自动回位。 本设计采用单片机STC89C51作为小车检测、控制、时间显示核心,以实验室给定的车架为车体,两直流机为主驱动,附加相应的电源电路下载电路,显示电路构成整体电路。自动寻迹的功能采用红外传感器,通过检测高低电平将信号送给单片机,由单片机通过控制驱动芯片L298N驱动电动小车的电机,实现小车的动作。 关键词:STC89C51单片机;L298N;红外传感器;寻迹 一、设计目的 通过设计进一步掌握51单片机的应用,特别是在控制系统中的应用。进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。 二、设计要求 该智能车采用红外传感器对赛道进行道路检测,单片机根据采集到的信号的不同状态判断小车当前状态,通过电机驱动芯片L298N发出控制命令,控制电机的工作状态以实现对小车姿态的控制,绕跑到行驶一周。 三、软硬件设计 硬件电路的设计 1、最小系统:

小车采用atmel公司的AT89C52单片机作为控制芯片,图1是其最小系统电路。主要包括:时钟电路、电源电路、复位电路。其中各个部分的功能如下: (1)、电源电路:给单片机提供5V电源。 (2)、复位电路:在电压达到正常值时给单片机一个复位信号。 图1 单片机最小系统原理图 2、电源电路设计: 模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。在本设计中,51单片机使用5V电源,电机及舵机使用5V电源。考虑到电源为电池组,额定电压为4.5V,实际充满电后电压则为4-4.5V,所以单片机及传感器模块采用最小系统模块稳压后的5V电源供电,舵机及电机直接由电池供电。 3、传感器电路:

智能循迹小车C程序(完美-详尽)

-----------------------小车运行主程序------------------- -------------------------------------------------------- 简介:@模块组成:红外对管检测模块----五组对管,五个信号采集端口 直流电机驱动模块----驱动两个直流电机,另一个轮子用万向轮 单片机最小系统------用于烧写程序,控制智能小车运动 @功能简介:在白色地面或皮质上用黑色胶带粘贴出路线路径宽度微大于相邻检测管间距。 这样小车便可在其上循迹运行。 @补充说明:该程序采取“右优先”的原则: 即右边有黑线向右转, 若无,前方有黑线,向前走, 若无,左边有黑线,向左转, 若全无,从右方向后转。 程序开头定义的变量的取值是根据我的小车所调试选择好的, 如果采用本程序,请自行调试适合自己小车的合适参数值。 编者:陈尧,黄永刚(江苏大学电气学院二年级,三年级) 1.假定:IN1=1,IN3=1时电机正向转动,必须保证本条件 2.假定:遇到白线输出0,遇到黑线输出1; 如果实际电路是:遇到白线输出1,遇到黑线输出0, 这种情况下只需要将第四,第五句改成: #define m0 1 #define m1 0 即可。 3.说明1:直行---------------速度full_speed_left,full_speed_right. 转弯,调头速度------correct_speed_left,correct_speed_right. 微小校正时---------高速轮full_speed_left,full_speed_right; 低速轮correct_speed. 可以通过调节第六,七,八,九,十条程序,改变各个状态 下的占空比(Duty cycle ),以求达到合适的转弯,直行速度 4.lenth----------length检测到黑线到启动转动的时间间隔 5.width----------mid3在黑线上到脱离黑线的时间差 6.mid3-----------作为判断中心位置是否进入黑线的标志,由于运行的粗糙性和惯性, 常取其他对管的输出信号作为判断条件 7.check_right----若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延

循迹小车(程序)

附录程序 目录 一、前言------------------------------------------------------------ 二、小车功能------------------------------------------------------ 三、元器件选择-------------------------------------------------- 四、I/O分配及硬件连接简图--------------------------------- 五、相关模块、算法--------------------------------------------- 六、系统框图------------------------------------------------------ 七、调试过程------------------------------------------------------ 八、小车图片资料--------------------------------------------------- 九、讲座所感------------------------------------------------------ 十、实习总结------------------------------------------------------

一、前言 感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。 之前我们本来商量是不是可以拿往年电子设计大赛的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。在网上选购单片机最小系统的时候,发现有一家商铺的最小系统上集成了红外模块,就想着不要浪费了,就萌生了做遥控车的想法,这样系统可以实现两个功能一个是类似于“光影魔术手”一样的物体追踪功能,一个是遥控运行功能。 组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始熟悉开发环境keil uvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。 二、小车具体功能 1、小车系统功能简述 接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。 控制系统方框图: 超声波测距追踪:

相关主题