第五章 软件设计
推荐给好友
打印
加入收藏
更新于2008-07-31 15:08:53

5.1设计原理
        根据比赛要求,允许小车跑两圈,取赛跑时间最短的一次。于是讨论采用记忆算法。因为舵机和电机具有一定的反应时间,而且前面传感器的前瞻性具有一定限制,所以赛车要争分夺秒,争取以最快的速度过弯,以最短的时间跑完全程,达到比赛要求,获得比赛成绩。于是小车跑分两部分: 
        (1)第一圈以合适的匀速跑完全程,需要完成的是,准确的沿着赛道跑,识别出直道和弯道,车轮上装有车轮计数器,当识别到状态改变的时候记下小车当前行驶的位置; 
        (2)第二圈根据第一圈记录的赛道情况,当小车快要行驶到记录好的状态点就以最好的转向角度和最快的速度来通过,这样就可以保证小车以最短的时间通过第二圈,并取得赛车好成绩。 
        整个软件逻辑可以划分为以下几个基本模块,如图5.1所示:

5.1.1赛车第一圈流程

        第一圈小车以均匀的速度跑完全程。选取合适的速度,使小车能转过曲率半径为50cm最小的弯,因为弯越小,要求小车的速度就越小,这样小车才不至于跑出赛道。合适的速度使传感器识别黑色引导线正确,采样进来的数据通过软件计算出黑线的位置,然后经过控制算法控制舵机转向。在第一圈识别的过程中,判断舵机的转向角度,转向角度大,超过了一定的阈值则判断为弯道,舵机小角度的摆动则判断为直道。在状态转换的点,把小车行驶的位置记下,并记下赛道状态特征,以便小车在第二圈快速改变动作,以最快的速度跑完第二圈。

5.1.2赛车第二圈流程

        当小车再次识别的起点位置时,第二圈开始了。查询第一圈已经记录好的并分析处理过的执行表在快要状态切换的位置上,及时调整好要经过下一个状态的角度和最大极限速度。一个状态到一个状态依次切换,知道小车跑到终点。调整的角度和最大极限速度即是准备工作时测量和计算的经验值。
5.2设计模块
5.2.1系统、时钟模块 
        单片机是一片超大规模集成电路,要让单片机工作,要供给电源、时钟,要有能和人沟通的接口。这些是构成单片机最小系统的基本辅助硬件。让系统能工作,软件上要对系统进行初始化,对单片机内部的各控制寄存器进行配置,来满足系统的功能要求。系统初始化的过程就是建立单片机运行环境的过程,具体完成: 
        1.选择工作模式 
        工作模式通过软件和硬件结合的方式选定为普通单片工作模式,即不使用MEBI接口连接外设。 
        2.资源映射 
        对内部地址资源的分配采用普通单片工作模式初始化时默认的配置,0000到0400为寄存器地址空间,0400到07FF为EEPROM地址空间,2000到3FFF为内部RAM地址空间,4000到7FFF为一块固定的Flash EEPROM地址空间,8000到BFFF为页面Flash EEPROM地址空间,C000到FFFF为一块固定的Flash EEPROM地址空间,其中FF00到FFFF为中断向量地址空间。 
        3.配置时钟 
        设置单片机内部的总线频率为24MHz,CPU单元工作频率是总线频率的2倍为48MHz。时钟的初始化要通过对几个寄存器的读写来实现。具体实现框图见图5.4。其中REFDV,SYNR与外部晶振频率(OSCCLK)、锁相环时钟频率(PLLCLK)关系为: 

        图5.4中的判断作用是使锁相环稳定后选择锁相环时钟为系统时钟。

        实际使用的外部晶振为16MHz,因此选择SYNR为2,REFDV为1,就可以使时钟频率达到24MHz,接近上限频率25MHz。
5.2.2普通I/O模块 
        配置PIM(复用I/O端口) 
        A端口为输出端口,用来作为第一个LED显示的数据输出; 
        H端口为输出端口,用来作为第二个LED显示的数据输出; 
        K端口为输出端口,用来作为主控板上各个模块的控制输出; 
        P端口被PWM模块占用; 
        T端口被ECT模块占用; 
        AD端口被ATD模块占用; 
        相关的寄存器有DDR、IO、RDR、PE。 
        它们的用处有:DRR用来设定IO的数据方向,是输入还是输出;IO用来设定输出的电平高低;RDR用来选择相应IO的驱动能力;PE中可以选择在IO口为输入端口时使用上拉电阻或下拉电阻。
5.2.3中断模块 
        通过设置寄存器,可以设定好中断触发方式,清中断标志方式,定时方式和溢出中断方式等等。设置好后,只要开中断,等待管脚上或者是的中断触发,即可进入中断服务程序。单片机中断形式丰富,图5.5列出了其中一部分的中断向量地址。

        要使用对应中断时,除了设置好中断的各种方式和开中断,最后还需要将中断向量地址和相应的中断服务程序对应起来。比如图5.6所示:

5.2.4 AD模块 
        S12芯片的AD模块具有如下特点: 
        可选的8位或10位分辨率 
        左/右对齐和有/无符号数的结果数据 
        外部触发器控制 
        灵活的1到8转换序列长度控制 
        多AD通道 
        AD模块的初始化同样是设置几个寄存器。通过分析,需要使用连续转换、快速清零的转换模式。程序中详细介绍了各寄存器的功能和所使用的功能。 
        由于初始化时将AD模块初始化为7通道序列转换,而且是快速清零模式,这样的模式工作流程是:当序列转换完成时将把序列转换完成标志位置位(也就是ATD0STAT0寄存器的SCF位),当该序列的AD结果寄存器的值被读出则相应的标志位会自动清零,并开始新的转换,因此获取AD结果的过程可以简单的表示为:标志位判断-读值,这样执行一次就把7路结果寄存器中的值读到片内RAM内了。
5.2.5 PWM 模块 
        PWM(Pulse Width Modulate)即脉宽调制,脉宽调制是一种可以用程序来控制波形占空比、周期、相位的方法。它在电机驱动、D/A变换等场合具有广泛应用。MC9S12芯片的PWM模块具有如下特点: 
        8个可编程控制周期和占空比的PWM通道 
        专用的PWM计数器 
        软件选择脉冲极性 
        周期和占空比的值双缓冲 
        高电平边沿或中心对称方式 
        8个8位通道,或是4个16位通道 
        4个时钟源(A、SA、B、SB),提供了很宽的范围的频率选择 
        紧急关闭 
        PWM信号要完成电机和舵机的控制。电机要求的极限频率为50KHz,占空比要求从0~100%变化,舵机要求的频率为50Hz,占空比要求从5~10%,为了使所有的控制在一个字节内可以完成,要仔细考虑分频系数的选择。 
        通过对PWM通道的几个寄存器的设置,单片机可以自动产生我们需要的特定频率和占空比的PWM信号来控制舵机和电机动作。如图4.9所示:

        由于转向伺服电机需要的PWM波的频率只有50HZ,而8位的PWM通道最小只能达到200HZ,所以只有采用16位的PWM通道,选择通道0和通道1组成16位的PWM通道。选择时钟A,频率为总线频率的1/16,而总线频率为24MHZ,这样算下来16位PWM通道的频率为1.5MHZ。而我们需要的PWM波的频率只有50HZ,PWM通道周期寄存器的初值为:1500000/50=30000,占空比在5%-10%之间,那么PWM通道占空比寄存器初值范围是1500—3000。速度控制所需要的PWM波的频率是20KHZ,所以我采用8位的PWM通道来产生20KHZ的PWM波。选择通道7,采用频率为总线频率的时钟B,按照前述的方法计算的得到PWM通道周期寄存器初值为200,占空比依照不同速度控制来设定。 
        单片机的PWM通道非常方便,只要通过PWMPER周期寄存器设置好周期,给PWMDTY占空比寄存器一定的值,就可以输出需要的PWM信号控制舵机和电机。在软件中,我们也是把不同占空比的PWMDTY值以表的形式列出,根据角的度数直接查表给PWMDTY赋值,得到我们需要的控制信号,具体设置如图4.10:

5.2.6 ECT模块 
        程序中的中断我们只使用了定时器功能和计数器功能以及脉冲累加计数功能,因此这里先对S12的定时器功能做个简单介绍。 
        S12的定时器功能非常强大,该定时器的核心是一个16位的可编程计数器,计数的频率可以通过分频来调整,可以用来测量输入的脉冲宽度或者产生脉冲波形。定时器具有如下特性: 
        用于4通道输入捕捉的16位缓冲寄存器 
        4个8位脉冲累加器或两个16位脉冲累加器 
        带有4位预分频的16位模数递减计数器 
        4个可选择的延迟计数器用以增强抗干扰能力 
        对速度的测量应当对应对输入波形频率的测量,因此应该使用定时器和脉冲累加计数功能。 
        对车行驶里程的记录,采用16位的脉冲累加器。从车遇到起点开始,由0一直累加,直到第二圈再次遇到起点清零,从新计数。 对舵机转向,电机加速、减速等动作,采用定时器中断逐步递进的方式。因为舵机大角度转向和电机猛然加速会影响赛跑的稳定性,所以采用定时中断逐步增加的方式。 
        对小车第二圈记忆回放,采用16位模数递减计数器。进入一个新的赛道状态时,把第一圈记录下的能反应此段状态路况长度的计数个数赋值给模数递减计数器,当计数快递减到0时,小车马上切换动作,为进入下一个路况提前做好准备。设置是通过ECT里的各种寄存器来设置定时、计数方式,触发中断方式,计数清零方式等。具体设置见附录程序。

第四章 硬件电路设计        第六章 调试过程及主要参数说明




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.