微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于μC/OS-Ⅱ系统的智能寻迹模型车的设计与实现

基于μC/OS-Ⅱ系统的智能寻迹模型车的设计与实现

时间:11-02 来源:作者:刘红蕾 张键洋 郝宁 周立超 许雪梅 点击:
  0 引 言

  智能车辆是当今车辆工程领域研究的前沿,它体现了车辆工程、人工智能、自动控制、计算机等多个学科领域理论技术的交叉和综合,是未来汽车发展的趋势。以往智能小车在软件设计上多采用单程序控制,不利于智能车在外部环境改变时做出快速反应,为使智能车系统反应更为快速,该智能车应用μC/OS-Ⅱ系统,该系统适合小型控制系统,具有执行效率高、占用空间小、实时性能优良等特点。且选用功耗较低、资源更为丰富的AVR系列ATmega16单片机作为核心控制单元。

  采用红外探测法实现寻迹功能,即将红外光电传感器固定在底盘前沿,利用其在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。并在后轮上粘上均匀分布的黑白条纹,根据光电反射原理,测量车速。为保证智能车在行驶过程具有良好的操稳性和平顺性,控制系统对直流电机驱动控制提出了较为理想的解决方案。

  1 硬件系统的设计及实现

  智能车的硬件部分以AVR系列ATmega 16单片机为核心控制器,由核心控制单元、电源管理模块、路径识别模块、转向控制模块、电机驱动模块和速度及路程检测模块等组成。智能车控制系统总体结构如图1所示。

  1.1 核心控制单元

  智能车采用ATmage 16型单片机作为主控CPU其主要特点为高性能、低功耗、高性价比,资源丰富,并且支持高级语言编程,在运行速度。内存容量,内部功能模块集成化等诸多方面比MCS-51系列先进。在智能车系统设计中,单片机的I/O资源分配如下:PB3,PD7为伺服电动机的PWM控制信号输出引脚;PD0~PD3为驱动电机正反转引脚;路径识别系统经排线由PA0~PA6输入至单片机。

  1.2 电源管理模块

  为避免电机等器件对系统产生干扰,智能车的各功能模块单独供电。采用12 V蓄电池为直流电机供电,将12 V电压降压、稳压后给单片机系统和其他芯片供电。相对于其他类型的电源,蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。考虑到蓄电池的体积大,在车体设计时留出了足够的空间。

  在稳压时,采用两片7812芯片将电压稳压至12 V后给直流电机供电,然后采用2576将电压稳至5 V。2576的输出电流最大可到3 A,完全满足系统要求。

  1.3 路径识别模块

  智能车采用红外探测法实现小车在黑色地板上循白线行走,为了提高控制精度,要求传感器排列紧密,越近越好。但传感器排列紧密,传感器发射管的光线可能会从地面反射进入临近传感器的接收管。为消除传感器之间互相干扰,传感器共分为7组,由PA0~PA6这7个I/O口直接供MCU读取传感器数据。利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在智能车行驶过程中传感器不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光(原理图为图2所示)。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。

  1.4 电机驱动模块

  在电机驱动方面,采用运用L298作为电机驱动芯片,A,B两个电机分别控制左面和右面各两个轮。通过调节两轮的转速来实现智能车的转向,即由单片机控制进行PWM变频调速,通过程序设计改变脉冲调宽波形的占空比,从而实现调速。转向角度不同,则两电动机的转速差异不同。当小车处于较大的偏离状态时,需把一个电机的速度调至极低,另一电机全速运行,从而在较短时间内完成路线的调整。

  通过设定电机的正转和反转来控制智能车的前进和后退。这种电路设计简易高效,并能确保前后两轮同步。

  1.5 车速检测模块

  智能车系统通过车速检测模块来读取实时车速。采用在后轮上粘贴均匀分布有黑白条纹的方法。利用图3的检测电路来对车轮上的黑白条纹进行检测。根据光电反射原理,在车轮转动时,红外接收管接收到反射光强弱高低变化,就会产生与车轮转速相对应的脉冲信号,将该脉冲信号进行放大整形后输入单片机的输入捕获引脚 PA7,记录单位时间内所得到的脉冲数,就能够表示出当前车速,同时通过累加可以计算出小车所行走的路程。

  2 软件系统设计与实现

  为使智能车在环境改变时做出更为及时准确的响应,在程序设计时应用μC/OS-Ⅱ系统。μC/OS-Ⅱ适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2 KB。μC/OS-Ⅱ的代码是用C语言编写,可以直接移植到有C语言编译器的处理器上。移植主要都集中在多任务切换的实现上,由于这部分代码用于保存和恢复CPU现场(即写/读相关寄存器),不能用C语言,只能使用汇编语言完成,即编写OS CPU A.S文件。另外还需要修改体系结构相关的OS CPU.H文件和用户规定任务栈初始化结构的OS CPU C.C文件。

  μC/OS-Ⅱ是采用的可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。μC/OS-Ⅱ中最多可以支持64个任务,分别对应优先级0~63,其中0为最高优先级。在该系统设计中,共应用了7个优先级,其中,操作系统建立任务,即Task Start()的优先级最高。调度工作可以分为两部分:最高优先级任务的寻找和任务切换。

  在该系统中,共定义了路径识别、光电转盘检测等7个任务,控制器任务划分及说明如表1所示。其调度和通信实现流程如下:系统执行Task Start(),在初始化任务执行完成后,利用μC/OS-Ⅱ的OSTaskDel()函数将这个任务返回并处于休眠状态。此时,Task Po-sition Check()成为优先级最高的任务,将会一直执行。当Task Position Check()检测到路径有所改变,通过邮箱传送数据到Task Control(),并由TaskControl()控制PWM波输出的改变。任务Task Op-tical_Wheel()的优先级稍低,同样会一直执行,即当任务Task_Optical_Wheel()检测到黑白跳变时,任务中的变量加 1,Task_Optical_Wheel()每隔1 s向任务Task_Path_Calculate()和Task_Speed_Calculate()发送1次消息,分别计算速度和已走的累加路程,控制器任务关系图如图4所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top