1. 引言
随着交通的发展,我们的生活里出现了有轨电车这样一种公共交通工具。有轨电车以电能作为驱动能源,在行驶过程中不会产生废气,是一种绿色的环保的公共交通工具 [1] 。有轨电车在建设方面无需在地下挖掘隧道,建造成本相对较低,可与路面车辆共同运行,但这需要依赖一个可靠的交通灯系统。目前使用的有轨电车交通灯系统的做法有两种,其一便是普通交通灯系统,不管行驶车辆种类全部遵循同一套系统,没有有轨电车优先;其二便是按钮式交通灯系统,平常一直保持单方向允许通行,按下按钮后才有短暂的变化。对于上述两种方案,我们仍然觉得有着不足,同一条道路上的交通灯应该拥有相同的要求,而且对于现在的状况来说需要手动切换工作方式的交通灯就显得格外笨拙,当然这也肯定不是最好的解决方案。我们的改进方案可以说是解决了大多数问题,通过车辆位置检测系统检测能准确识别有轨电车是否靠近;通过单片机控制为交通灯设计了两种工作模式,以应对路口可能出现的各种情况,也实现了各种路口交通灯的统一;通过外部中断实现工作方式的切换,从而实现有轨电车优先通过。
2. 当前有轨电车交通灯系统的不足
2.1. 十字路口处有轨电车的交通灯系统
当前在武汉使用的有轨电车交通灯系统在十字路口遵循着和普通车辆相同的交通灯指示(即有轨电车来到十字路口并没有优先原则,如果遇见红灯就必须停车,只有绿灯时才能前行)。虽说从普通交通的角度来讲,这是绝对公平和安全的,但是从有轨电车运行的角度来讲,这种方式却存在不足。首先有轨电车在十字路口遇到红灯停车会使有轨电车运行时间增加,就会出现晚点的情况,不过这一缺陷设计者已经通过网络实现数据实时更新解决。其次有轨电车在路口停车依然会消耗大量电量,一方面会出现能量的浪费,另一方面由于有轨电车充电是通过在站点停车上下乘客时完成的,每次所充电量不多,不排除会出现还未到站点电量消耗完的情况。
2.2. 人群穿梭处有轨电车的交通灯系统
有轨电车交通灯系统在人群穿梭处的设计思想是让有轨电车的轨道保持绿灯、人行道保持红灯的状况。当有行人需要穿过有轨电车轨道时,就可以按下见图1的行人过街按钮,随后有轨电车轨道的绿灯变为黄灯闪烁5秒后变为红灯,人行道的红绿灯由红变为绿,30秒后所有的红绿灯恢复最先的状况。这种设计虽然解决了行人过街的问题,但是也是存在不足。若是有人在有轨电车快来的时候按下行人过街按钮,系统会依据之前的设定将有轨电车的轨道上的红绿灯置为红灯,从而出现有轨电车无法及时通过人行横道的情况。
3. 有轨电车交通灯系统改进思路
在道路通行中我们希望有轨电车具有较高准时性,这就意味着在我们的交通灯系统中有轨电车的“运行优先级” [2] 要较高,为实现这一目的,我们考虑为交通灯设置两种工作方式。交通灯系统在平时无有轨电车时像普通的红绿灯一样,南北与东西的红绿灯交替变幻,而且它们同时拥有提示剩余行驶或等待时间的功能;当有有轨电车靠近想要经过十字路口或人行横道时,交通灯系统会迅速进行切换,先提示正在行驶的车辆迅速通过,并且在5秒的等待时间过后,将有轨电车轨道的红绿灯置为绿,一定时间后将系统中的红绿灯恢复正常。
3.1. 有轨电车检测与信号发送
我们首先确定一个有轨电车过来的确定位(假定有轨电车距离十字路口或人行横道100米处为确定位),在该位置的轨道上安装多地磁传感器车辆检测系统 [3] ,由于有轨电车是两路单方向行驶,所以只用在有轨电车行驶靠近十字路口或人行横道的确定位安装即可。
我们可以通过多地磁传感器车辆检测系统检测有轨电车是否通过以及行驶方向,并通过系统分析向交通灯的控制电路发出低电平信号,当多地磁传感器车辆检测系统检测有轨电车通过时将控制电路的低电平信号拉高。
3.2. 交通灯工作方式及流程
本系统中交通灯工作方式有两种,即“正常”与“突发”。
3.2.1. 交通灯的“平常”工作方式
当十字路口或人行横道无有轨电车通过时,交通灯的工作方式为“平常”,其正常运行一个周期的时刻表见表1。(其中数字“1”代表该灯亮、“0”代表该灯灭,此处我们假设东西方向为有轨电车行驶方向)。
![](Images/Table_Tmp.jpg)
Table 1. Operating period timetable of traffic light under “Normal” working mode
表1. 交通灯“平常”工作方式下运行周期时刻表
表1中,在一个周期里,前0~30 s,南北绿灯和东西红灯亮,南北方向行驶,东西方向等待;在30~35 s,南北黄灯和东西红灯亮,提醒南北行驶的车辆或行人剩余时间不足;在35~65 s,南北红灯和东西绿灯亮,南北方向等待,东西方向行驶;在65~70 s,东西黄灯和南北红灯亮,提醒东西行驶的车辆或行人剩余时间不足。
3.2.2. 交通灯的“突发”工作方式
当十字路口或人行横道有有轨电车通过时,交通灯的工作方式为“突发”,其正常运行一个周期的时刻表见表2。
![](Images/Table_Tmp.jpg)
Table 2. Operating period timetable of traffic light under “Sudden” working mode
表2. 交通灯“突发”工作方式下运行周期时刻表
表2中,在一个周期里,前0~5 s,南北方向和东西方向均亮黄灯,提醒南北方向行驶的车辆或行人,剩余时间不足,同时也提醒有轨电车和东西方向车辆留意过往行人及车辆;在5~20 s,南北方向黄灯灭红灯亮、东西方向黄灯灭绿灯亮,南北方向等待,东西方向行驶。
在两种工作方式里,我们都在程序对应添加了计时功能,能通过LED灯等硬件设备显示行驶或等待的剩余时间。
4. 硬件设计
交通灯控制电路硬件设计见图2 (在模拟电路中,我们使用数码管模拟交通灯LED显示数字,用BTN1按键模拟多地磁传感器车辆检测系统发出的信号,当有轨电车需要通过十字路口或人行横道时,我们按下BTN1按键开关来模拟车辆检测系统产生的低电平信号)。
图中AT80C51单片机是整个核心,通过P0、P1、P2.6、P2.7共18根引脚,分别控制四个方向的数码管的示数,其中还使用了两个74HC573八进制三态非反转透明锁存器 [4] ,以确保单片机的P0和P1引脚的数据精确的传递到数码管中;通过P2.0~P2.5六个引脚控制四个方向红绿灯的变换;通过P3.3引脚接收多地磁传感器车辆检测系统发出的信号,实现交通灯工作方式的切换。
![](//html.hanspub.org/file/20-1541474x11_hanspub.png)
Figure 2. Traffic light control circuit schematic diagram
图2. 交通灯控制电路原理图
5. 硬件设计
5.1. 程序设计整体思路
交通灯控制通过将控制程序烧录到AT80C51单片机,然后单片机内部程序执行每个引脚高低电平的输入输出。本控制程序的核心是使用定时器中断 [5] 实现交通灯的时间控制切换以及数码管示数的更新和使用外部中断与定时器中断交互实现交通灯两种工作方式的转变。具体程序设计思路框图见图3。
![](//html.hanspub.org/file/20-1541474x12_hanspub.png)
Figure 3. Traffic light program design block diagram
图3. 交通灯程序设计思路框图
图中主体部分为通过定时器1中断函数辅助zcgc函数完成交通灯“平常”工作方式下的时间检测以及红绿灯的切换和数码管剩余时间的显示。我们需要通过while (1)语句使交通灯一直运行主代码。当有轨电车需要通过时,我们通过外部中断1和定时器0中断函数辅助wbzd1函数实现。外部中断函数将交通灯的工作方式切换,而定时器0中断则为“突发”工作状态提供时间更新与记录。
5.2. 定时器中断数据的配置
在交通灯的“平常”工作方式下,我们使用定时器1中断;在交通灯的“突发”工作方式下,我们使用定时器0中断;(由于定时器1中断优先级低于外部中断以及定时器0中断,所以在“平常”工作方式下使用定时器1中断不会影响模式切换时的外部中断以及定时器中断)。
我们可以编写定时器中断开启和定时器中断的函数,当定时器中断需要打开时,调用相应的函数即可。
5.2.1. 定时器中断开启的函数
由于定时器1中断与定时器0中断的开启函数大致相同,所以在此以定时器1中断开启函数为例:
void Time1init()
{ TMOD|=0x10;
TH1=0xFC;
TL1=0x18;
ET1=1;
EA=1;
TR1=1;
}
其中,我们设定的时间为1ms,我们选择的定时器工作方式为方式1,所以初值的高八位为FCH,低八位为18H。
5.2.2. 定时器中断函数
对于定时器的中断函数,我们同样以定时器1中断函数为例:
void Time1() interrupt 3
{
TH1=0xFC;
TL1=0x18;
i++;
if(i==1000)
{
i=0;
TIME++;
}
}
TIME是全局变量,i通过计数达到1000,代表已经过去1s的时间,对 TIME加一并对自己清零,再次开始计数。我们可以通过TIME的值知道当前周期中的时刻,从而实现交通灯以及数码管的改变。(在定时器0中断函数中使用全局变量TIMEzd、j)
5.3. 外部中断数据的配置
本控制程序使用外部中断1,先通过在函数中对IT1、EX1、EA置1,开启外部中断1。对于外部中断的中断函数,我们需要的功能是能够关闭以及开启定时器1中断和定时器0中断、能够调用“突发工作”函数而实现交通灯控制系统工作方式的切换。中断函数如下所示。
void Int1() interrupt 2
{
if(CGQ==0)
{
ET1=0;TR1=0;TIME=0;i=0;
Time0init();
wbzd1(); //突发工作状态
ET0=0; TR0=0; TIMEzd=0; j=0;
Time1init();
}
}
在该函数中,我们通过CGQ的信号判断是否发生该中断。当我们进入中断后,先关闭定时器1中断同时开启定时器0中断,调用“突发工作”函数实现有轨电车通过。当通过一个工作周期后关闭定时器0中断同时开启定时器1中断,退出中断回到“平常工作”状态。
在中断函数调用的时候,会出现外部中断将定时器0中断函数中断的情况,使整个程序卡在图2中“wbzd1”函数中,一直做循环操作。对此我们提出了中断优先级修改的方法。51单片机通过IP寄存器 [6] 配置各个中断优先级,IP寄存器各位含义见表3,第1位到第5位依次为外部中断0、定时/计数器T0、外部中断1、定时/计数器T1和串行口的优先级设定位。并且在51单片机中优先级只有两个,设定位置1为高优先级,置0为低优先级。
![](Images/Table_Tmp.jpg)
Table 3. Implications of IP register
表3. IP寄存器各位含义
我们想要实现在外部中断时能够触发定时器0中断就需要使定时器0的优先级高于外部中断1,在此便将PT1、PX1置0,PT0置1。我们可以通过在“main”函数中用使用“IP=0X02;”语句修改单片机中断优先级。
5.4. 交通灯工作方式函数
在交通灯工作函数中,我们通过全局变量TIME或TIMEzd判断当前工作周期的工作时长,再通过计算得出当前每个方向行驶或等待的剩余时间,并用数码管显示函数将数据显示在数码管上面。同时也通过全局变量TIME或TIMEzd判断当前处于工作周期的哪个阶段,并对应修改各个方向红绿灯的显示。见图4和图5,为两种工作方式函数的流程图。
6. 硬件设计
我们通过Proteus软件将交通灯控制程序烧录到单片机中进行调试。
6.1. 在“平常”工作状态
见图6、图7、图8、图9,分别为交通灯系统“平常”工作状态下一个工作周期的各个时间段的工作演示。
![](//html.hanspub.org/file/20-1541474x13_hanspub.png)
Figure 4. “Ordinary” work mode and procedure
图4. “平常”工作方式流程
![](//html.hanspub.org/file/20-1541474x14_hanspub.png)
Figure 5. “Sudden” working mode and process
图5. “突发”工作方式流程
![](//html.hanspub.org/file/20-1541474x16_hanspub.png)
Figure 7. The second stage of “Normal”
图7. “平常”第二阶段
![](//html.hanspub.org/file/20-1541474x18_hanspub.png)
Figure 9. The fourth stage of “Normal”
图9. “平常”第四阶段
图6显示的是0~30 s时,南北方向通行,东西方向等待;图7显示的是30~35 s时,南北方向通行并且提示剩余时间不足,东西方向继续等待;图8显示的是35~65 s时,南北方向等待,东西方向通行;图9显示的是65~70 s时,东西方向通行并且提示剩余时间不足,南北方向继续等待。当工作周期工作完成后系统将再次进入新的周期。
6.2. 在“突发”工作状态
见图10和图11,分别为交通灯系统“平常”工作状态下一个工作周期的各个时间段的工作演示。
图10显示的是0~5 s时,南北方向和东西方向都进入提示状态,一方面提示南北方向的车辆和行人快速通过,剩余时间不多,另一方面提示有轨电车小心前方的行人车辆;图11显示的是2~20 s时,南北方向禁止通行,东西方向允许通行。当一个工作周期运行完成后系统将跳回“平常”工作状态,恢复正常工作。
7. 总结
随着科学技术的提升,我们出行的交通工具愈发广泛,而随之而来的问题便是各种交通工具对公路的负担的增加。对于不同的交通工具我们不能以相同的规则去约束它,这就要求我们的交通灯系统拥有针对多种交通工具的工作方式。而就目前状况而言,交通灯系统往往无法实现灵活的协调各种交通工具的冲突。本文设计改进的交通灯系统针对于有轨电车的交通路线,与现今使用的交通灯系统相比,拥有不同于普通系统的两种工作方式,实现了交通灯的“平常”与“突发”两种工作方式的运行与切换,能更加合理的协调有轨电车与其他交通工具和行人通过的冲突。
NOTES
*通讯作者。