循迹控制

2024-10-02

循迹控制(共7篇)

循迹控制 篇1

0 概述

循迹机器人采用宏晶科技的STC12C5A60S2这一款单片机作为控制器。该单片机是高速/低功耗/超强抗干扰的新一代8051单片机, 指令代码完全兼容传统8051, 但速度快8~12倍, 单时钟/机器周期 (1T) , 2路PWM, 8路高速10位A/D转换, 针对电机控制, 强干扰场合, 增强型8051内核。

1 机器人的行走装置设计

机器人依靠底盘下面的两直流电机作为驱动源带动机器人作前进、后退、转弯等运动。两直流电机作相同方向且相近速度的转动可使得机器人前进或后退, 两直流电机同方向但不同速度可走出不同弧度的路径, 如果两直流电机的转动方向相反, 可实现转弯。循迹机器人控制其在不同的速度、不同方向下行走, 需要对行走的电机进行调速控制。STC12C5A60S2有两路PWM输出, 分别是单片机的第4 (P1.3) 、5 (P1.4) 两个引脚。可用这两路PWM对电机进行调速控制。

1.1 行走电机电路设计

行走电机的功率较大, 所需要的驱动电流也较大, 所以采用一种直流电机专用驱动芯片LM18200, 如图1所示。单片机的P1.3和P1.4分别与两个高速光耦6N136相连, 这两个光耦的输出端分别跟两个电机驱动芯片LM18200的PWM相连接, 作为调速控制端。P1.2和P1.5与光耦521-2相连, 其输出端与LM18200的方向端DIR相连, 以控制行走电机的方向。

LM18200内部继承了四个MOS管, 组成一个标准的H型驱动桥。通过充电泵电路为上桥臂的2个开关管提供栅极控制电压, 充电泵电路有一个300k Hz左右的工作频率。在引脚1、11外接电容形成第二个充电泵电路, 外接电容越大, 向开关管栅极输入的电容充电速度越快, 电压上升的时间越短, 工作频率可以更高。引脚2、10接直流电机电枢, 正转时电流的方向应该从2号引脚到10号引脚;反转时电流方向应该从引脚10号到引脚2号。引脚8号接一个对地电阻来检测电流。

图1电路中, LM18200的PWM引脚接收单片机的信号以控制电机的转速和启停, 转速取决于占空比, 如果该引脚处接收的是低电平, 则电机停止。DIR决定了直流电机的旋转方向, 若高电平使得电机正转则低电平使得电机反转。单片机的P1.3或P1.4输出高电平时, 通过高速光耦6N136输出低电平, 相当于将P1.3和P1.4这两个引脚输出的电平取反了, 光耦521-4将P1.2和P1.5输出的电平取反。P1.4和P1.5控制左轮, P1.3和P1.2控制右轮。对于行走电机方向控制就比较简单了, 只要通过程序控制P1.2和P1.5这两个引脚就可以了, 但是对于转速以及电机的启停控制, 是由引脚P1.3和P1.4输出的PWM控制, 因此我们就必须要了解PCA/PWM相关知识了。

1.2 PCA相关寄存器及脉宽调节模式PWM

STC12C5A60S2系列单片机集成了两路可编程计数器阵列 (PCA) 模块, 可用于软件定时器、高速输出以及脉宽调制 (PWM) 输出。脉宽调制 (PWM) 是一种使用程序来控制波形占空比、周期、相位波形的技术, STC12C5A60S2系列单片机的PCA模块可通过程序设定, 使其工作于8位PWM模式。PWM模式的结构图如图2所示。

图2中, 当enable为1时, 9位比较器开始作比较, 当 (0, CL) < (EPCn L, CCAPn L) 时, 输出低电平0, 当 (0, CL) ≥ (EPCn L, CCAPn L) 时输出高电平1。当CCON寄存器中的CR=1时, 起动PCA计数器开始计数, 此时的CL的值不断自加, 自加的频率取决于工作模式寄存器CMOD的设置, CL溢出时将EPC-n H和CCAPn H的值自动重载到EPCn L和CCAPn L中, 继续和 (0, CL) 中的值作比较, 这样就可以实现无干扰的更新PWM。要9位比较器能作比较, 必须enable为1, 这就要求CCAPMn中的ECOMn和PWMn同时为1。

如果想要输出50%占空比的PWM, 则应该对PWM相关的寄存器进行设置, 具体设置如下:

2 循迹机器人行走电机启停程序设计

由图1可知, 单片机的P1.2和P1.5是两个行走电机的方向控制端, 为0是正转, 为1则是反转;P1.3和P1.4是行走电机的速度控制端, 占空比越大速度越快。占空比可由CCAPn L和EPCn L的值决定, 而CCAPn L和EPCn L的值是在每次CL溢出时由EPCn H和CCPn H重载入的。单片机的P1.3和P1.4输出的PWM通过光耦6N136取反后送至电机驱动芯片LM18200的PWM端。LM18200的PWM端的正占空比等于单片机P1.3和P1.4脚输出的负占空比, 如果P1.3和P1.4输出的正占空比越大则电机速度越慢, 而占空比的大小有CCPn L的值决定, CCPn L值越大占空比就越小, 从而电机转速就越快。

当EPCn L为1时或者CCAPn L为255时, LM18200的PWM端为持续的高电平, 电机以最快的速度转动;当CCAPn L为0时, LM18200的PWM端为持续的低电平, 此时电机停止转动。根据分析, 我们可得出行走电机不同速度下正转反转及停止的子程序。

3 结语

以上程序可以实现机器人行走电机不同速、不同方向的控制以及起动停止控制, 以最快速度前进或后退则可以编写runmotor (r, f, 255) ;runmotor (l, f, 255) 则左右电机以最快的速度前进。

循迹控制 篇2

智能车辆作为智能交通系统的关键技术之一, 是许多高新技术综合集成的载体。它体现了车辆工程、人工智能、自动控制及计算机技术于一体的综合技术, 是未来汽车发展的趋势。本设计以MC9S12XS128为核心处理器, 通过光电传感器识别路面的黑色引导线, 根据道路前方黑色引线距车体中心线之间的偏差送出控制信号给转向舵机和电机驱动模块MC33886, 使小车沿着黑引线稳定地、流畅地前进。

2 系统整体方案设计

2.1 智能车功能设计

本次设计的智能车具有路径识别、状态检测、方向控制、速度控制等功能。系统的功能模块如图1所示。系统主要分为6个模块:MCU芯片, 采用飞思卡尔公司的16位单片机MC9S12DG128;路径识别模块 (光电传感器模块) ;速度检测模块;舵机控制模块;电机驱动模块;电源模块。单片机通过光电传感器采集道路信息, 根据算法分析得出此时的智能车与道路的偏离状况, 然后再据此采用一定的控制算法控制智能车的舵机转向和直流电机的速度, 从而实现智能车对路径的自动识别与循迹[1]。

2.2 MC9S12XS128单片机简介

飞思卡尔MC9S12XS128微控制器具有MCU核心系统, 支持串口调试下载, 具有扩展接口, 可进行2次开发, 支持μCOSⅡ。此开发板兼容性较高, 监控程序功能强大, 可提供各种基本的开发和调试功能, 如程序的下载和运行、断点设置、内存显示等。还可利用MC9S12XS128的Flash在线编程技术实现在线写入用户程序和随时修改Flash存储内容。同时在线实时仿真和监测自编程序。根据实际设计需要分配控制器内部单元[2]。

2.3 各功能模块的设计

智能车硬件系统主要包括电源、电机驱动、测速、舵机、路径识别与处理等部分。总电源采用一个7.2伏的镍铬电池供电, 其中微控制器、光电传感器的接收管以及测速传感器采用5伏的电源, 光电传感器的发射管采用2伏的电源, 舵机和直流电机则直接用7.2伏的电源。选择LM2940为5伏稳压芯片, LM2576为2伏的稳压芯片[3]。各芯片和电源的关系如图2所示。

电机驱动选用MC33886 H桥电机驱动芯片, MC33886的作用是将恒定的直流电源电压 (电池电压) 调制成频率一定、宽度可变的PWM脉冲电压序列, 从而改变输出平均电压的大小。MC9S12XS128单片机的PP3和PP5引脚输出的PWM脉冲经器件6N137光耦隔离后, 通过信号IN1和I N 2进入M C 3 3 8 8 6 H桥输入端, MC33886 H桥输出端OUT1和OUT2分别接电机电枢两端, 从而控制电机的四象限运行。

路径识别是体现智能车智能水平的一个重要标志, 而光电传感器是智能车进行路径识别的一个关键检测元件。路径识别结果与传感器的选择、传感器的数量有直接关系, 本文选择三只光电开关, 一只置于轨道中间, 两只置于轨道外侧, 当小车脱离轨道时, 即当置于中间的一只光电开关脱离轨道时, 等待外面任一只检测到黑线后, 做出相应的转向调整, 直到中间的光电开关重新检测到黑线 (即回到轨道) 再恢复正向行驶。为了使智能车在尽可能短的时间内跑完赛道, 小车必须达到两项标准: (1) 光电开关检测到黑线在正中心时, 判断当前赛道为直线, 此时小车应尽量升速, 在保证稳定的情况下使小车以最快的速度沿直线前行; (2) 光电开关检测到黑线在两旁时, 判断当前赛道为弯道, 此时转向舵机应作出相应的响应, 使小车转过一定的角度。这时车速应在短时间内迅速下降, 否则小车将冲出赛道。因此小车速度控制的响应时间和控制精度对小车性能的提高尤为重要。为此, 采用模糊控制对小车的速度进行控制, 由于模糊控制不需要建立精确的数学模型, 在未知环境下可仿效人的智能, 这样使小车快速、稳定、准确地沿着赛道行使。速度控制系统结构框图如图3所示。图中, E是小车相对于黑线的偏移角, U是两驱动轮的转速差。小车相对于黑线发生偏移时, 控制系统通过调整两驱动轮转速, 使小车纠正偏移回到正确的位置。因此, 选择小车相对于黑线的偏移角E作为模糊控制器的输入变量;选择两驱动轮的转速差U作为模糊控制器的输出变量。

在输入语言变量E的论域中, 取语言值:“NB” (严重左偏) 、“NS” (左偏) 、“Z” (没有偏移) 、“PS” (右偏) 、“PB” (严重右偏) ;同理, 在输出语言变量U的论域中, 取语言值:“NB” (左轮速度比右轮速度转速差较大) 、“NS” (左轮速度比右轮速度转速差较小) 、“Z” (左轮速度与右轮速度相等) 、“PS” (右轮速度比左轮速度转速差较小) 、“PB” (右轮速度比左轮速度转速差较大) ;设隶属函数分布为三角分布[5], 如图4所示。

控制规则是模糊控制器中模糊推理的依据, 控制规则的多少是根据输入及输出物理量数目及所需的控制精度而定, 根据智能车的运行特性及控制经验设计模糊控制器的隶属度函数的离散化表格和模糊规则如表1和表2所示。

采用CRI推理查表法, 即直接通过输入量偏转角与控制规则比较得出输出量转速差。然后采用重心法的方法进行清晰化。

3 结论

本文介绍了黑线循迹智能车的硬件系统实现方法, 小车的循线方案采用光电传感器, 速度控制采用模糊控制, 实验证明, 模糊控制不需要建立精确的数学模型, 在未知环境下可仿效人的智能, 实现对系统的控制, 从而使小车能自动纠正轨迹偏差, 能够以较快的速度平稳地行驶, 达到预期的效果。

摘要:以“飞思卡尔”杯智能车大赛为研究背景, 开发了一种以MC9S12DG128作为控制器的智能循迹小车。该小车采用光电传感器检测路径, 获得赛道信息, 求出小车与黑线间的偏差, 采用模糊控制对小车的速度进行控制, 使小车能够自动跟随直道和弯道。实践表明, 采用模糊控制的智能小车在路径识别的精准度, 稳定性, 及速度控制上具有明显优势。

关键词:智能车,MC9S12XS128单片机,模糊控制,自动循迹

参考文献

[1]段颖康.基于MC9S12XS128单片机的智能循迹小车的硬件设计[J].电子元器件应用.2010;12 (1) :33-35

[2]邵贝贝.单片机认识与实践[M].北京:北京航空航天出版社.2006

[3]梁业宗, 李波, 赵磊.基于路径识别算法的智能车控制系统的设计[J].自动化技术与应用.2009;28 (1) :121-124

[4]刘伟.基于MC9S12XS128微控制器的智能车硬件设计[J].电子设计工程.2010, 18 (1) :102-104

循迹控制 篇3

1 将车体模块化

1.1 避障模块

在小车两边放上一对集成红外线传感器 (光电开关) , 采用光电开关是因为它的灵敏度很好而且比较稳定, 同时外围电路也不复杂。红外光电开关的引线是三根, 其中电源上接两根, 一根是输出, 连接在单片机输入端。在初始情况下输出信号是高电平, 如果检测出障碍物就会变成低电平, 输出信号传送到单片机, 实现对小车的控制。

1.2 单片机控制模块

将单片机作为核心, 用Protel99SE来生成PCB3D图, 循迹电路的2个输出端和单片机一二号管脚相接, 铁片检测电路输出端接三号管脚, 而避障电路输出端则接四、五号管脚, 光源检测电路输出则接二十一至二十四号管脚, 运用C语言编程软件Keil u Vision3编写程序, 程序仿真合格后写进单片机。

1.3 电机驱动模块

小车电机是自带的直流电机, 驱动模块为L293D, 使用方便。电动机分压的调整运用的是数字电位器, 以便于更好地调速, 不过通常小电机的阻抗都不大而电流却正相反, 分压致使效率降低且难以实现;L293D的8号管脚输入一定电平值, 经过调整让电机两端电压的电机速度范围合理;单片机对端口的电平高低通过控制L293D来实现电机的转动, 让小车前进或者转弯。直流电机变向的原理是左转则左轮不动右轮转, 右转则正好相反, 而直行的话就是左右轮一起转。不过, L293D芯片的最大问题就是易发热。

1.4 寻光模块

光源探测模块的传感器是光敏二极管, 光敏二极管的内阻因为感光而出现大的变化, 并按照电路转化成电压变化。利用LM393比较器比较五个二极管输出电压, 光敏二极管造成的电压变化传输到比较器反相端和基准信号来比较, 然后在单片机中判断输入结果。如果想对此进行改进, 那么因为光线稳定性不好, 讨光要从五个呈圆弧型分布的光敏二极管上着手, 同时将之用黑胶带包住, 不然外部因素会对其造成很大影响。找到光的一个会对单片机输出信号, 从而让车的转向得到控制。对于LM393讨光电压比较电路来说, 基准电压输入端是它的二号管脚, 在二号管脚输入那些要比较的电压, 要是超过基准电压值, 那么高电平则存在于一号管脚上, 相反则是低电平。

1.5 循迹模块

元件使用的是反射式红外光电传感器ST188, ST188电路对黑色与白色的检测会让高低电平信号发生变化, 单片机接收其信号, 对电机左右转动进行控制, 让小车顺着黑线运动。它的原理就是一体化红外发射接收IRT中的发射二极管导通, 光敏接收管接收红外光线反射, 光敏接收管集电极发射极间电阻降低, 减少输入端电平, 而输出端是高电平, 三极管9013导通, 集电极是高电平, 把这个信号输入单片机, 再判断。按照实际情况进行改进, 具体来说就是把可调电位器和发光二极管正极进行连接, 传感器敏感度能够经由此端的电压来控制、调节;把施密特电路整形加到电路输出端;电容接到二极管基集B与发射机E上, 让电路“毛刺”减少, 提高抗干扰能力。

2 系统调试

电路的选择必须科学且应反复调试。事实上, 制作中传感器面对外界感应会有不一样的灵敏性, 因而需要让电路保持稳定, 按照灯光、障碍远近、光线明亮度等环境对电阻电容参数进行合理调试。对每个硬件模块进行调试, 然后整合出调试好的各电路模块。由于干扰问题常常出现, 因而运用“逐步综合”的方式把单个模块先综合再调试, 等待调试完成再进行下一步的综合, 如此一来, 就会更有效地分析综合过程中模块具体问题出现在哪一块。接下来就对PCB图进行制作, 要注意封装准确, 不然很容易出现焊接问题, 就算是极小的问题也会造成整个PCB板子报废。最后写程序时先把每个模块子程序写好, 再有序地综合成总的程序, 原因和模块综合原因差不多。也可以视情况运用protues软件仿真单片机, 让软件调试过程中不会出现反复插拔单片机和烧制的过程发生。

3 循迹壁障方案设计

本文论述的小车控制中心是AT89S52单片机, 对道路信息的采集是以脉冲调制的反射式红外发射接收器, 而对道路前面和左右放障碍的情况则以超声波与红外反射式传感器来进行采集。

(1) 道路信息是由脉冲调制反射式红外发射接收器, 也就是通常所说的黑线信息来采集。然后AT89S52单片机接收的信号是通过LM393比较器转化成的稳定电平信号接收到的, 同时在AT89S52单机片中处理信号, 例如中间传感器下是黑线的时候, 因为从光的反射能力角度来看黑色是最弱的, 所以单机片接收到的传感器返回的信号是高电平, 即1;两边都是白色, 单片机所接收到的返回信号是低电平, 即0, 这时候小车就会前进。而在其它的情况下, 小车对运行状态的调整是按照传感器信息来进行的, 从而能更加准确地沿着黑线前进。

(2) 中间超声波模块与左右两边红外传感器共同构成避障模块, 而且被测物体斜度是超声波模块制作必须考虑的, 红外对斜度虽然没有要求可是却对光线有规定。所以, 两者必须做好协同工作, 超声波对障碍的判断是依据测距来进行的, 只要距离比具体定值小, 小车就要转向, 同时考虑左右两侧红外传感器的信息, 以确定障碍物的信息, 实现小车的准确避障其中超声波利用AT89S52单片机的中断2对小车控制, 同时单片机查询左前右前方红外对管返同的信号, 确定小车应该采取的控制状态。

摘要:本文论述的小车控制中心是AT89S52单片机, 主要功能是把传感器信号传到单片机上进行处理并控制L293D电机驱动。按照小车每部分功能, 将电路小车硬件模块化, 让小车智能循迹、避让、显示声光、检测贴片, 对电路进行调试, 把调试好的模块有序地合成一个整体, 再通过软件编程调试直至完成、寻光。

关键词:智能,循迹壁障小车,单片机控制

参考文献

[1]金立, 贾存良, 王梅, 刘恩鹏.基于PIC单片机的智能循迹小车设计[J].工矿自动化, 2010 (08) :75.

循迹小车(下) 篇4

Q:K教授, 那么我们如何运用C语言进行编程呢?

K教授:我们刚开始写汇编的中断应用程序时, 曾经为出入堆栈的问题而困扰。C51扩展了函数的定义, 使它可以直接编写中断服务函数, 而可以不必考虑出入堆栈的问题, 从而提高了工作的效率。扩展的关键字是interrupt, 它是函数定义时的一个选项, 只要在一个函数定义后面加上这个选项, 那么这个函数就变成了中断服务函数。定义中断服务函数时可以用如下的形式。

函数类型函数名 (形式参数) interrupt n[using n]

中断函数不能通过形式参数进行参数传递, 也没有返回值。因此建议在定义中断函数时将其定义为viod类型, 以明确说明没有返回值。

interrupt关键字是不可缺少的, 它告诉编译器该函数是中断服务函数, 并由后面的n指明所使用的中断号。n的取值范围为0~31, 但具体的中断号要取决于芯片的型号, 像AT89S52实际上就使用0~4号中断。每个中断号都对应一个中断向量, 具体地址为8n+3, 中断源响应后处理器会跳转到中断向量所处的地址执行程序, 编译器会在这地址上产生一个无条件跳转语句, 转到中断服务函数所在的地址执行程序。51芯片的中断向量和中断号, 如表1所示。

H:K柯教授, 那[using n]是做什么用的?

K教授:中断函数定义时, 后面还有一个选项using, 这个选项是指定选用51芯片内部4组工作寄存器中的哪一组。

为进行中断的现场保护, C51除采用堆栈技术外, 还独特地采用寄存器组的方式, 在C51中一共有4组名称均为R0-R7的工作寄存器, 中断产生时, 可以通过简单地设置RS0、RS1来切换工作寄存器组, 这使得保护工作非常简单和快速。使用汇编语言时, 内存的使用均由编程者设定, 编程时通过设置RS0、RS1来选择切换工作寄存器组, 但使用C语言编程时, 内存是由编译器分配的。因此, 我们不能简单地通过设置RS0、RS1来切换工作寄存器组, 但是可以不做工作寄存器设定, 而由编译器自动选择, 避免产生不必要的错误, 否则会造成内存使用的冲突。

在C51中, 寄存器组选择取决于特定的编译器指令, 即使用using n指定, 其中n的值是0-3, 对应使用四组工作寄存器。

例如void timer0 () interrupt1 using 2, 即表示在该中断程序中使用定时器/计数器0和第2组工作寄存器。

H:就这些吧?

K教授:不!使用中断服务函数时还应注意:1、任何情况下都不能直接调用中断函数, 否则会产生编译错误;2、在中断函数中调用其它函数, 那么两者所使用的寄存器组应该相同。

Q:K教授, 在C51语言中如何对某个引脚进行读写操作呢?

K教授:在C语言里, 如果直接写P1.0, C编译器并不能识别, 而且P1.0也不是一个合法的C语言变量名, 所以得给它另起一个名字, 比如起名为P1_0, 可是P1_0是不是就是P1.0呢?你可以这么认为, C编译器可不这么认为, 所以必须给它们建立联系, 这里使用了Keil C的关键字sbit来定义。sbit是C51中的一种扩充数据类型, 利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。

sbit的用法有三种:

第一种方法:sbit位变量名=地址值

第二种方法:sbit位变量名=SFR名称^变量位地址值

第三种方法:sbit位变量名=SFR地址值^变量位地址值

如定义PSW中的OV可以用以下三种方法:

(1) sbit OV=0xd2说明:0xd2是OV的位地址值, 这样是把位的绝对地址赋给位变量。sbit的位地址必须位于80H-FFH之间。

(2) sbit OV=PSW^2说明:其中PSW必须先用sfr定义好, 先定义一个特殊功能寄存器名再指定位变量名所在的位置, 当可寻址位位于特殊功能寄存器中时可采用这种方法。

(3) sbit OV=0xD0^2说明:0xD0就是PSW的地址值。

因此这里用sbit P1_0=P1^0就是定义用符号P1_0来表示P1.0引脚, 当然, 如果你愿意也可以用P10一类的名字, 只要下面程序中也随之更改就行了。同样我们可以用P1.1的地址去写, 如sbit P1_1=0x91;这样在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作了。

通常我们可以直接使用系统提供的预处理文件里面已定义好的各特殊功能寄存器的简单名字, 直接引用可以省去一点时间。当然您也可以自己写自己的定义文件, 用您认为好记的名字。

H:K教授, 我写了一个循迹小车的程序, 你看能行吗?

K教授:不错, 你都会用循环语句了。

循环结构

H:我在书上查的。在一个实用的程序中, 循环结构是必不可少的。循环是反复执行某一部分程序的操作。有两类循环结构:

(1) 当型循环, 即当给定的条件成立时, 执行循环体部分, 执行完毕回来再次判断条件, 如果条件成立继续循环, 否则退出循环。

(2) 直到型循环, 即先执行循环体, 然后判断给定的条件, 只要条件成立就继续循环, 直到判断出给定的条件不成立时退出循环。

Q:While语句就是“当型”循环结构, while在英语中的意思是“当……的时候……”, 在这里我们可以理解为“当条件为真的时候就执行后面的语句”, 它的语法是:

while (条件表达式) 语句;

当条件表达式为1 (真) 时, 它才执行后面的语句, 执行完后再次回到while执行条件判断, 为1 (真) 时重复执行语句, 为0 (假) 时退出循环体。其特点是:先判断表达式, 后执行语句。

这里我们用while (1) 来等待中断信号, 表达式使用了一个常数“1”, 条件总是满足, 语句总是会被执行, 构成了无限循环, 直到断电为止。

H:还有延时程序中我们使用了for循环语句。C语言中的for语句使用最为灵活, 不仅可以用于循环次数已经确定的情况, 而且可以用于循环次数不确定而只给出循环结束条件的情况。for语句的一般形式为:

for (循环变量初值表达式;循环条件表达式;循环变量增值表达式) 语句

如for (j=0;j<125;j++) {;}, 执行这条语句时, 首先执行j=0, 然后判断j是否小于125, 如果小于125则去执行循环体 (这里循环体没有做任何工作) , 然后执行j++, 即j+1, 执行完后再去判断j是否小于125……如此不断循环, 直到条件不满足 (j≥125) 为止, 结束循环。for语句的特点:先代入初值, 再判断条件是否为真, 条件满足时执行循环体并更新条件, 再判断条件是否为真……直到条件为假时, 退出循环。如果用while语句来改写, 应该这么写

可见, 在明确循环次数的情况下, for语句比其它循环语句都要方便简单。

语句中括号中的表达式是可选的, 如果变量初值在for语句前面赋值, 则for语句中的循环变量初值表达式应省略, 但其后的分号不能省略。其它表达式也可以省略, 但是同样不能省略其后的分号。如果省略循环条件表达式, 循环无终止地进行下去, 也就是认为表达式始终为真。三个表达式都省略, 即形成for (;;) 的形式, 它的作用相当于是while (1) , 即构成一个无限循环的过程。

另外循环可以嵌套, 如上次用的延时程序中就是两个for语句嵌套使用构成二重循环。

K教授:对了!现在我们的小车已经可以自己认路了, 我们也从中学到了单片机的中断系统的应用和C语言中循环语句的使用。

跳舞小车

K教授:接下来我们再看一个系统。现在我们想设计一个会跳舞的小车, 能够自己演奏音乐, 并按照音乐的节拍运动, 就像跳慢三一样。能行吗?

Q:我想想。

H:那不就是把循迹小车的眼睛去掉, 换上一副好嗓子吗?也就是加一个放大器和一个扬声器就行了。

(一会功夫, H就在电脑上画出了电路图, 如图1所示。)

Q:我们用P1.0和P1.1输出音乐信号, 经过三极管Q13的放大推动扬声器YS演奏音乐, 然后通过按照节奏控制电动机, 就完成了跳舞小车的任务。印刷板图也就出来了, 如图2所示。

H:但是我们怎么能够让小车一边延时运动, 一边演奏音乐呢?一心不能二用啊!

智能循迹小车设计 篇5

1 系统总体设计

系统主要由道路识别模块、速度传感器模块、主控模块、舵机驱动模块、电机驱动模块。框图如图1所示。

整个设计基于16位微控制器MC9S12XS128完成对采集数据的处理和各驱动的控制命令[1], 道路信息的采集为了使能够更多的采集到道路两边的赛道信息, 又要避免相邻激光管互相干扰, 于是采用两排各八对激光管且相邻激光管分时发光的方法来采集道路信息。为了能快速完成赛道又使小车能够始终不偏离赛道, 适应不同的赛道变化, 除了调整好舵机转角, 还应对速度采取闭环控制, 选择霍尔传感器能够较好的完成测量任务并采用PID控制算法使小车能够在较短的时间内, 快速达到设定值要求[2]。电机模块利用4个场效应管作H桥驱动[3]。

2 车体结构

智能小车为轮式结构, 机械部分主要为转向机械和驱动机械。转向机构主要由舵机, 转向架和两个前轮组成。转向机构的工作原理为:舵机根据转向信号正向或反向旋转一定角度。前轮为从动轮, 会根据转向角度的大小自动调节内外侧车轮的转速;驱动机构包括一个直流电机、减速装置和两个后轮。后轮为主动轮, 其转速由直流驱动电机控制, 不会根据转弯半径的变化而自动调节转速[4]。因此小车在转弯时, 控制系统在控制舵机的同时还需要根据转弯角度的大小控制驱动电机转速, 从而使转弯顺利进行。

3 硬件系统设计

3.1 测量模块设计

3.1.1 激光传感器

利用激光技术进行测量的传感器。它由激光器、激光检测器和测量电路组成[5]。激光反射式传感器阵列, 利用激光对管组成传感器阵列, 激光发光管发出激光光线, 光敏接收管接收地面的反射光, 接收管接收到的发射光强随地面反射物体的颜色不同而变化, 传感器输出的电压值也随之而变化。把每个激光传感器输出信号都量化成数字信号, 根据激光电管的排列位置, 识别出黑线的位置。传感器阵列中每个传感器输出的模拟电平通过特定的芯片转换为单片机IO口可用的数字信号, 通过多个光电管的组合排列, 经算法处理, 可以得知小车所在的位置[6]。传感器发射管与接收管电路图如图2所示。

3.1.2 霍尔传感器

霍尔器件是由半导体材料制成的一种薄片, 器件的长、宽、高分别为l、b、d。若在垂直于薄片平面 (沿厚度d) 方向施加外磁场B, 在沿l方向的两个端面加一外电场, 则有一定的电流流过。由于电子在磁场中运动, 所以将受到一个洛仑磁力, 这样使电子的运动轨迹发生偏移, 在霍尔元器件薄片的两个侧面分别产生电子积聚或电荷过剩, 形成霍尔电场, 霍尔元器件两个侧面间的电位差称为霍尔电压[7]。

若控制电流保持不变, 则霍尔感应电压将随外界磁场强度而变化, 根据这一原理, 可以将两块永久磁钢固定在电动机转轴上转盘的边沿, 转盘随被测轴旋转, 磁钢也将跟着同步旋转, 在转盘附近安装一个霍尔元件, 转盘随轴旋转时, 霍尔元件受到磁钢所产生的磁场影响, 输出脉冲信号。其频率和转速成正比, 测出脉冲的周期或频率即可计算出转速。

3.2 电机驱动模块

相比较驱动芯片、达林顿管驱动使用场效应管作为驱动管, 其导通电阻可以达到毫欧级, 且可以提供强大驱动电流。如图3所示, H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转, 必须导通对角线上的一对三极管。根据不同三极管对的导通情况, 电流可能会从左至右或从右至左流过电机, 从而控制电机的转向。

4 软件系统设计

4.1 PWM控制

PWM (脉冲宽度调制) 控制通常配合桥式驱动电路实现直流电机调速, 电机的转速与电机两端的电压成比例, 而电机两端的电压与控制波形的占空比成正比[8], 因此电机的速度与占空比成比例, 占空比越大, 电机转得越快, 当占空比α=1时, 电机转速最大。

智能车使用的单片机有PWM直接输出接口, 频率可调。BTS7960的INH引脚为高电平, 使能BTS7960。IN引脚用于确定哪个MOSFET导通。IN=1且INH=1时, 高边MOSFET导通, OUT引脚输出高电平;IN=0且INH=1时, 低边MOSFET导通, OUT引脚输出低电平。在BTS7960使能的情况下, 控制系统只要使用单片机的PWM输出口即可完成电机的正反转和调速功能。其中PWM部分程序:

4.2 程序算法实现

将小车从激光接收管测得的数据, 经过A/D转换使得八位接收管分别转换为8位的二进制数, 然后根据测得的数据与给定范围做比较从而来判断赛道信息。同时, 为了使小车能够顺利通过“圆弧”“S形”“十字形”等赛道的要求, 并且要成功检测到终点黑线而发出停车信号, 小车要能够准确判断出赛道信息, 于是选择记忆算法。对于赛道的信息进行存储, 设定标志位, 利用本次测得的数据与前几次的数据共同对赛道分析判断, 从而得到较为准确的赛道信息, 发出控制信息。

在长直道进入弯道时候, 由于长直道的速度较快, 在入弯的时候有冲出赛道的危险性, 所以在赛道末段应当进行快速制动, 将速度值降到期望过弯速度。采用PID算法控制, 能够使小车速度快速达到设定的期望值, 从而满足了小车更高速的要求。

5 结论

通过硬件电路的搭建与软件系统的配合实现, 并且通过不断地对参数进行整定和测试, 智能小车最终能够以较快的速度平稳地完成规定的赛道。

参考文献

基于图像的智能循迹小车设计 篇6

智能小车是机器人大家庭中的一员, 它是典型的机电一体化产品, 智能循迹小车具有环境感知、自主决策、自动行驶等功能[1], 汽车的高智能化是未来汽车领域发展的一个趋势, 同时它的发展也渗入到社会的各个领域。本文设计一种智能循迹小车, 采用Kinetis60单片机作为主处理器, 利用OV7620摄像头获取轨迹图像信息, 通过HSI双自适应阈值分割法处理轨迹图像, 经游程编码技术获取轨迹的中心坐标信息, 然后利用获取的信息, 结合增量式PID算法实现对舵机和电机的灵活控制, 从而让智能小车自主循迹行驶。

1 系统整体方案设计

该智能循迹小车的硬件系统主要由主控模块Kinetis60、电源模块、图像采集模块、舵机转向模块、电机驱动模块、无线通讯模块、车速检测模块等构成, 系统整体方案设计框图如图1所示。

图像采集模块通过OV7620摄像头获取轨迹图像信息, 然后采用HSI双自适应阈值分割法经主控模块处理, 利用游程编码技术可以获取一些用于对舵机和电机控制等有用的信息。该智能循迹小车采用舵机转向机构, 从而使智能循迹小车的转向更灵活, 通过车速检测模块检测电机转速, 采用增量式PID算法实现对电机的灵活控制, 从而让智能小车自主循迹行驶。

2 图像采集及处理

在视觉系统中, 大多采用CCD作为摄像输入系统, 该智能循迹小车采用OV7620摄像头采集轨迹图像信息, 该摄像头具有CMOS彩色/黑白图像传感器[2], 其典型的数据输出格式为RGB, 该方案采用CMOS黑白图像传感器, 这样可以避免处理器处理能力不足的问题。

2.1 图像分割

在对图像处理中, 广泛使用的色彩空间有HSI、YUV、RGB等, 若采用RGB颜色模型, 可以直接使用OV7620摄像头的输出值, 而不需再换算, 可以保证系统的实时性。然而, 由于RGB颜色值分布很分散且三个分量相关性较高, 造成不容易确定识别RGB的阈值范围, 导致对轨迹识别不准确[3]。

该方案采用色调和饱和度作为主要识别参数, 这样能够提升识别的准确性。由于亮度I决定了饱和度S, 那么根据亮度I的等级来对饱和度S的值进行动态调整, 调整后的值为S, 从而实现对图像的分割。因此, 该方案选用HSI模型作为轨迹识别处理的基础, 选取其中的参数色调H和饱和度S作为轨迹识别处理判断依据[4]。满足下列约束条件的即为目标轨迹的像素:

Hmin为色调的下阈值;Hmax为色调的上阈值。

Smin为饱和度的下阈值;Smax为饱和度的上阈值;S'的值由I的等级确定。

2.2 提取引导线

经过上述方式提取到轨迹图像的目标像素后, 采用游程编码技术对目标像素进行区域融合, 其过程分为三个阶段, 如图2所示。

经过区域融合的三个阶段, 计算得出了目标图像的中心即引导线的中心坐标信息, 引导线的中心坐标计算公式如公式1和公式2所示:

公式1和公式2中的l表示每个游程长度, n表示区域融合后游程的数量, 公式1中的a表示游程的起始的像素坐标值, 公式2中的h表示游程的起始的像素纵坐标。

3 舵机转向控制

针对舵机转向的控制, 采用公式3作为舵机转向的控制依据:

上式中x表示引导线中心的横坐标, xm表示采集到的图像的中心横坐标, △x表示引导线中心横坐标与图像中心横坐标的偏差值, 当△x大于零时, 控制舵机右转向行驶, 当△x小于零时, 控制舵机左转向行驶, 当△x等于零时, 舵机方向不变化。

然而, 舵机的转向角度是通过Kinetis60单片机控制模块, 调节脉冲宽度来实现的, 舵机转向脉冲宽度调节值公式如公式4所示:

上式中pm表示引导线位于智能小车中心位置时的脉冲宽度调节值, pr表示舵机处于右转最大位置时的脉冲宽度调节值, pl表示舵机处于左转最大位置时的脉冲宽度调节值, ymax为目标图像的最大纵坐标值, ymin为目标图像的最小纵坐标值, △x为引导线中心横坐标与图像中心横坐标的偏差值。

4 电机转动控制

根据实际情况, 智能小车循迹行驶在直道、入弯道前、入弯道后, 行驶速度应该有所不同, 这样才能使智能小车稳定有效快速地循迹行驶, 该方案对电机的运动控制采用增量式PID算法, 实现对电机的闭环控制, 将速度的偏差作为控制电机脉冲宽度调节信号占空比增值的输入量[5], 脉冲宽度调节信号占空比增值由公式5计算得出。

上式中p表示第n次脉冲宽度调节信号占空比增值;vn、vn-1、vn-2等分别表示第n、n-1、n-2次速度差值;kp、ki、kd等的值, 依据满足智能小车运行稳定的需要, 从而确定合适的值。

5 系统软件总体设计

该系统软件采用C语言进行编写, 系统软件整体设计流程图如图3所示, 对图像的处理以及按照控制策略对舵机和电机的控制是该软件设计核心的部分。

6 总结

本文设计一种智能循迹小车, 通过HSI双自适应阈值分割法处理轨迹图像, 经游程编码技术获取轨迹的中心坐标信息, 利用增量式PID算法实现对智能循迹小车的灵活控制, 经验证, 该方案能使小车稳定快速行驶, 对研究智能车辆有一定的参考价值和意义。

摘要:设计一种智能循迹小车, 采用Kinetis60单片机作为主处理器, 利用OV7620摄像头获取轨迹图像信息, 通过HSI双自适应阈值分割法处理轨迹图像, 经游程编码技术得到轨迹的中心坐标信息, 获取引导线。然后利用获取的信息, 结合增量式PID算法实现对舵机和电机的灵活控制, 从而让智能小车循迹行驶。

关键词:Kinetis60单片机,HSI双自适应阈值分割法,游程编码,PID算法,舵机

参考文献

[1]Saeed B.Niku.机器人学导论-分析、系统及应用[M].孙富春, 朱纪洪, 刘国栋, 译.北京:电子工业出版社, 2004.

[2]闫熙, 韩媞, 高波, 等.摄像头智能循迹小车设计与实现[J].电子设计工程, 2014, 5 (3) :181-183.

[3]欧宗瑛, 袁野, 张艳珍.基于颜色信息足球机器人视觉跟踪算法[J].大连理工大学学报, 2000 (6) :54-56.

[4]ZHAO shu shang, Liu bin, HAN jian hai, REN yan, Color Tracking Vision System for the Autonomous Robot[C].ICEMI’2009, 2009:3-182-184.

高可靠小车红外光循迹设计原则 篇7

历届全国大学生电子设计竞赛、全国职业院校大学生职业技能竞赛、飞思卡尔杯全国大学生智能车竞赛几乎都包含小车类的赛题。小车类赛题大部分又都有循迹的要求。循迹的方法一般可分为光控循迹、摄像循迹控两类。光控循迹成本低、软件设计较为简单,设计制作周期短;摄像控循迹则相反:成本高,软件设计复杂,设计制作周期长。光控循迹的弱点也是显而易见的:一是容易受环境光线的影响而照成误判;另一点是由于光衍射现象的存在又容易被相邻的光敏管接收而造成误判。以下就此两点不足提出解决办法。

1 传统光循迹小车电路结构

1.1 小车循迹简介

所谓小车循迹,就是在白纸上画出黑色的线条,称为赛道;小车沿着赛道按要求(可以做一些指定的任务)行进时,能自动识别赛道并按赛道线条行走,称为小车循迹。如图1所示,该赛道是2010年全国职业院校大学生职业技能竞赛月球车竞赛项目湖南赛区赛道图。

一般的,小车底部安装一排(或几排)红外光发射、接收阵列用于检测赛道,从而控制小车能沿线行走。光发射、接收阵列要与赛道成十字交叉排放,有的也做成弧形或倒“V”字型排放[1]。这一排红外光发射、接收阵列的数量越多越密,控制小车跑起来越稳,但编程时算法越复杂。一般少则四、五个,多则十来个,如图2所示。也可以采用双排[2]甚至多排设计。

1.2 传统循迹小车红外光发射、接收电路

传统的红外光发射、接收电路[3]的发射部分用直流电流驱动,接收部分采用比较器。比较器的一个比较点用电位器调整直流电位,另一个比较点接光敏管的输出端,这种简易做法往往也能满足简单比赛要求。但抗干扰能力较差。

一路传统简易循迹电路图如图3所示。

采用红外光作发射接收的目的是为了减少环境光线的干扰,但若不采取辅助措施,当环境光线较强时,并不能很好的克服环境光线的干扰;另外,还需采取措施克服相邻收发对管的光衍射干扰。

2 红外光循迹设计原则

2.1 选择合适的光发射驱动电流

一般应将发射电流设计在发光二极管的最大正向电流允许值IF上。发射的红外光线强度提高了以后,环境光的红外成份占总光线的比例就减小了,可以克服一部分环境光干扰。但是,过于提高发射光电流,会产生较大的热量,使发射管光衰现象加剧。

要想既提高发射电流,又使发射管安全工作,则可以采用低占空比脉冲调制发射。

2.2 脉冲调制式红外发射和红外接收效果分析

环境光中的红外成份表现出来的是直流分量,采取调制式[4]红外发射措施后,调制接收电路接收的是调制信号,可以将环境光中的直流分量滤除。

2.3 采取低占空比脉冲调制红外光发射的优势

红外光敏三极管接收灵敏度并不因红外发光二极管发射信号的占空比降低而降低。降低红外发光二极管发射信号占空比后,可以在红外发光二极管上施加较大电流,甚至可以大大超过红外发光二极管的最大允许正向电流IF,而不会损坏红外发光二极管。增加的那部分电流相当于红外发光二极管的发光强度大大加强了,则抗干扰能力也进一步加强。

2.4 采取稳定的38.5 kHz频率调制发射的红外光

红外调制光信号在调制频率为38.5 kHz时,红外光敏接收灵敏度最高。

为获得较稳定的38.5 kHz的调制频率,应避免用电阻、电容和电感等分立元件配合非线性器件组成振荡电路作调制信号[5],应采用晶体振荡器或有源晶体振荡器配合非线性元器件作振荡电路。

用晶体振荡器作MCU的外部晶体,用编程的方法启动38.5 kHz/10%~20%占空比的PWM信号作调制振荡信号;也可以用晶体振荡器配合非线性器件进行振荡、分频后获得38.5 kHz/10%~20%频率和占空比。

2.5 采用交流放大电路作红外接收放大器

即使调制光受到环境光的淹没,但是调制光并没有因此而消失。接收信号后送交流放大器放大,被淹没的调制光信号仍可得到复原,而直流成份的环境光被交流放大器阻挡,这就有效还原出了被淹没的有效红外光,克服了强环境光的干扰。

2.6 采用巡回开通某一路发射接收克服光衍射

压线的那一路原本不应该接收到信号,而相邻没压线的那一路还在继续发光。由于光衍射,相邻没压线那一路发出的红外光很容易衍射到压线的那一路红外接收管,导致判断失误,从而引起干扰。

当巡回开通某一路时,任何时候只一路发光,检测电路也仅接收这一路的信号,即使这时候发光的那一路衍射到压线的接收电路,但MCU并不去读取被衍射的那一路。这就克服了相邻通道的衍射干扰。这时要注意软件设计时采集一个巡回的周期时间要恰当。

3 高可靠红外光循迹电路设计

3.1 低占空比脉冲波38.5 kHz/10%~20%脉冲波形成

遵循2.4节设计原则,第一种方法采用具有PWM外设的单片机启动PWM模块产生脉冲波,不建议用纯软件产生该脉冲波。产生的波形应满足图4所示的时间参数要求。

第二种方法采用有源晶振(可省去振荡电路,简化电路设计)1.544 MHz(经2级二分频)或11.059 2 MHz(经5级二分频)后,分别产生386 kHz或345.6 kHz方波,后接十进制计数/分配器或九进制计数/分配器,从Q0~Q7任意引脚即可产生38.6 kHz/10%或38.4 kHz/11%占空比的脉冲波(脉冲频率均误差0.1 kHz,占空比一个是10%,一个是11%)。电路图如图5所示。

3.2 红外光发射控制电路设计

小车红外光循迹电路采用8路[6]已经可以满足较复杂竞赛的要求。按照设计原则2.6,矩形脉冲最好不要同时驱动光发射电路,需要一路一路轮流发送并保持一段时间。

采用两个74HC4081四与门控制脉冲信号传送给ULN2803八反向OC驱动器驱动红外发光二极管,每一路可输出500 mA。74HC4081与门的另一个输入端接MCU控制选通。如图6所示。

红外发射接收采用一体化封装的TCRT5000对管,电流传输系数>20%,发射管最大持续允许电流IF为60 mA,脉冲电流在1μs/1%占空比时允许3 A。脉冲信号经红外发光管发射后,经地面反射,送到光敏三极管从发射极输出。如果地面为白色,绝大部分信号(脉冲)都能传递给光敏三极管;如果地面为黑色,光线被吸收,则几乎没有信号能传递给光敏三极管。

控制每一路持续工作的时间应保证让红外发光二极管发出10~20个脉冲,使后续解调器能可靠解调。可以算出循环一周共8路所需时间:

3.3 放大器电路设计

由于有8个光发送接收对管,图6中仅显示出1路,如果只想用一个放大器和后续的一个脉冲频率解调器,则需要模拟开关来一一选通。为了和图6共用选通信号,采用两片74HC4066(也可以用一片74HC4051,但这时就不能共用74HC4081选通信号了,既浪费了MCU的IO口,编程也较为复杂些)。

按2.5节所述要采用交流放大器的原则,这里采用零漂移双运算放大器AD8552,一个单元接成反向比例运算电路,另一个单元实现输出中点电位给放大电路作参考“地”。电路如图7所示。可通过反馈电阻调整其放大倍数。

3.4 信号解调

信号解调采用标准38.5 kHz解调器CXA20106,装置中增益控制和中心频率控制用的电容器尽量采用精密低损耗无极性电容器,最好采用CBB电容器。电路结构图如图8所示。

4 结语

按照本文所介绍的红外光循迹设计原则所设计、装配的电路,可以满足绝大多数较复杂竞赛现场的需求。现场竞赛时抗干扰能力较传统电路相比大大加强了,既克服了环境光线的干扰,也克服了临近红外循迹发光管的衍射干扰。电路调整比传统电路更加简单:仅需调整放大器的放大倍数这一项,且一次性调好可以满足各种环境光线的应用。避免了传统设计繁琐的调试工作量(传统设计需要各自独立调节每一路的比较点电位,且每一个竞赛现场的光线不同都要重复调整)。

由于任一时刻只需发出一路强红外光,并且还是低占空比的调制光,所以不但不会因为采用强红外光造成成车体电池供电不足,相反的,若干个循迹发射二极管轮回通电比传统的循迹电路一组多个一直通电的情况更省电。

摘要:小车采用传统光循迹电路有两点不足:一是容易受环境光线的影响而造成误判;二是光衍射现象又容易被相邻的光敏管接收也造成误判。针对这两点不足,提出设计原则是采用低占空比强红外光调制发射能克服环境光线的干扰;再对光接收信号进行交流放大后解调能进一步克服环境干扰;采用逐个循环发射、接收能克服光衍射对相邻光敏管的干扰。最后对改进型的方案予以设计,给出电路结构框图及部分电路图。

关键词:高可靠,小车循迹,光调制,光解调,光衍射

参考文献

[1]单以才,李奇林,秦剑华,等.基于红外传感器的自主循迹小车控制算法设计与实现[J].机床与液压,2010(14):125-127.

[2]苏培华,纪养龙,纪卫峰.浅谈电动小车循迹的基本设计原理[J].中国新技术新产品,2011(8):127-128.

[3]陈广祥,张治斌.基于红外反射式传感器的循迹车系统设计[J].单片机与嵌入式系统应用,2010(9):56-57.

[4]刘松,姜连志,李旭辉.红外反射式传感器在天车防撞设备中的应用[J].辽宁科技学院学报,2006,8(4):1-2.

[5]孙在信,全志云,丁镇生.环境对555红外线发射系统的影响[J].大连交通大学学报,2007(2):92-94.

上一篇:高中数学思维训练下一篇:个体就业