FPGA设计的太阳能交通信号灯控制器
2017-03-31聂明旺刘杰
聂明旺,刘杰
(福州大学 物理与信息工程学院,福州 351100)
FPGA设计的太阳能交通信号灯控制器
聂明旺,刘杰
(福州大学 物理与信息工程学院,福州 351100)
现在大多数太阳能交通信号灯控制器采用单片机设计,交通信号灯主控制器和从控制器采用无线传输的方式传输数据,但是经过交叉路口的车辆所带来的电子干扰会对无线传输线路带来一些影响。本文完全采用FPGA设计交通信号灯从控制器,主控制器与从控制器采用有线传输,接口电路使用FPGA和CAN传输线实现。采用FPGA实现的从控制器实质上相当于一个纯硬件电路的设计,传输接口采用CAN传输线,具有非常强的抗干扰性。最后仿真、制板、测试,实现了主控制器与从控制器之间的稳定传输。
太阳能;FPGA;交通信号灯;CAN传输线
引 言
随着国内道路的不断扩建,道路交通状况也逐渐变得复杂,市场需要不同种类的交通信号机制来应对不同路况。比如在一些城郊的交叉路口安装交通信号,由于铺设电缆很不方便,这时就需要采用其他能源供电。国内有很多公司设计了基于太阳能供电的交通信号灯控制器,有移动式的和固定式的。移动式太阳能交通信号灯控制器需要较多人力去维护,如果长期放在外面也易被盗窃或损坏。市场上出现的固定式太阳能交通信号灯控制器大多都是采用无线传输的方式传输信号亮灭数据,虽然很方便,但易受干扰。本文基于FPGA设计了一种太阳能交通信号灯控制器,传输可靠、安装位置固定,且机箱体积要比采用市电供电的信号灯小很多[1-2]。
1 硬件设计与结构组成
文中设计的信号灯控制器用在一些市电供电不方便的路口,从控制器由交通信号灯驱动电路、状态回读电路、通信接口电路、主控芯片等部分构成,主控制器则是由与从控制器通信的接口电路、串口等一些外部接口构成。主控制器留有接口与上位机通信,将当前交通信号灯和传输线路是否处于正常工作状态上的数据传输到终端,如有故障产生,及时维修。图1为从控制器的结构框图,图2为主控制器结构框图。本文主要介绍从控制器的电路设计以及通信接口的设计。
图1 交通信号灯从控制器结构图
图2 交通信号灯主控制器结构图
1.1 驱动与状态回读电路
由图1可知,从控制器通过FPGA的I/O口输出电平来控制交通信号灯的亮灭,再通过信号灯状态回读电路将当前信号灯亮灭状态数据输入到FPGA内部。文中FPGA采用XILINX的XC3S50芯片,该芯片价格低廉,且FPGA本身就具有比单片机功耗低的优势。信号灯驱动电路由场效应管和光耦构成,其电路如图3所示。图中U9和U23是型号为PC817的光耦,Q1是型号为RF840的场效应管[3]。首先FPGA的I/O口接U9的第二个引脚,即Led_out1,当该引脚输出0时,场效应管导通,为1时,不导通。场效应管标号为L1的一端接交通信号灯灯盘的负极,灯盘的正极接+12V电压。所以当Led_out1输出电平为0时,灯盘点亮,为1时则不亮。标号为U23的光耦用来读取交通信号灯状态,它的第二个引脚,即标号为RD1的一端,接在交通信号灯串并混合连接处。当灯处于不亮状态时,U23的1、2两引脚没有导通,引脚4则表现出逻辑电平1,即Data1逻辑电平是1,且该端输入到FPGA中。同理,当灯处于亮的状态时,Data1逻辑电平为0。该种连接方式可以保证如果灯盘与从控制器连接出现问题时,控制器自动判断线路出现问题。
图3 交通信号灯驱动与状态回读电路
1.2 通信接口电路
图1和图2的通信接口是采用CAN收发器设计。CAN传输线有2根信号线,分别为CANH与CANL,电平用显性和隐性表示。“显性”表示逻辑数值“0”,“隐性”表示逻辑数值“1”,显性时CANH与CANL之间的电压差较大,而隐性时,CANH与CANL之间电压差较小。CAN收发器通过检测这两端的电压差值来判断位码的“0”与“1”。总线电平是由显性电平决定,如果总线处于空闲状态时,保持隐性电平状态,这一特性成为了CAN总线协议的重要要素之一[4-6]。
在本设计中采用CTM8251T芯片,其电路如图4所示。由图1、图2可知,从控制器和主控制器的通信接口由两组CAN传输网络构成,一组传输时钟信号,另一组传输数据。图4是从控制器的通信接口电路,其中SCK用来接收主控制器发送过来的时钟信号,CAN_TXD输出电平为1。SDO用来接收主控制器发送过来的数据,SDI是从控制器向主控制器发送数据的端口。
图4 从控制器通信接口电路图
2 FPGA内部通信规则设计
由于本设计中,从控制器的通信接口采用CAN收发器设计,主控制器也需要有对应的CAN收发器设计的通信接口。从控制器的通信协议设计采用FPGA设计完成,为了使得整个通信更稳定,主控制器的通信协议设计也采用FPGA设计。因为使用FPGA设计,是完全基于一个硬件的设计,且FPGA设计在时序上是更敏感的,相比于采用单片机设计,通信会更稳定、可控。
2.1 主控制器通信规则设计
本文在物理层上采用CAN传输线传输数据,但是FPGA内部传输规则的实现是采用类似于SPI总线协议的方式。传统的SPI总线是通过片选信号线选择从机通信,本设计中不采用片选信号线,采用主控制器向从控制器寻址的方式来通信。图5是本设计中通信协议的数据帧格式,首先由主控制器发送数据,发送第一个字节,第一个字节的最高位规定为0,次高位为读写命令,当该位为1时,表示主控制器想要向从控制器写数据,如果该位为0,表示读取从控制器中的灯组状态数据。接下来的六位是地址,代表想要访问的从控制器地址。然后是传输有效数据,由于CAN传输线的特性,从控制器或者主控制器传输数据时只有一方能占用传输线,另外一方必须发送隐性电平。数据传输的最后一个字节的第二位为0,是从控制器判断有效数据接收结束的一个标志,第一位则是确认位(ACK),从控制器在该位发送逻辑电平0,主控制器在该位发送逻辑电平1,该位表示一帧数据传输完成[7]。
图5 数据帧格式
主控制器的通信接口设计分为4个模块:地址选择、数据发送、数据接收、时钟信号产生模块。地址选择模块是用来选择哪一个从控制器与主控制器通信,数据发送和数据接收模块用于数据传输处理。时钟信号产生模块用来产生时钟信号,传输过程中,主控制器和从控制器中数据的传输都是依靠此模块产生的时钟信号,在时钟信号的上升沿或者下降沿下发送、接收数据。图6是FPGA芯片经过XILINX公司软件ISE进行综合后的得到的一个内部电路之间的连接图,该图是信号机主控制器的通信接口内部实现结构图。
图6 主控制器通信接口结构图
图6中地址选择模块中的addr_count[1:0]是地址选择序列号,主控制器通过该数据选择与对应地址的从控制器通信。比如当addr_count等于0时选择某个地址,等于1时选择另外一个地址,等于2时又是不同的地址,依此类推。此处可以选择4个不同地址的从控制器,如果需要更多的选择,只需要将addr_count的位宽设大一点。r_or_w是读写位,当该位为0时,表示主控制器想要读取从控制器中的数据,为1则表示主控制器要向对应的从控制器中发送数据,然后将r_or_w位和6位地址组成8位的数据(最高位是0)输入到数据发送模块,具体数据帧格式如图5所示。
在时钟信号产生模块中,clk是输入时钟信号,由FPGA的外部晶振模块提供,SCK是经过分频后产生的信号。此处为了测试,设置了sck_command这个时钟产生控制位,当该位为0时产生SCK时钟,否则不产生。通信中,数据的接收和发送都是依靠SCK的上升沿或者下降沿,所以当sck_command为1时,传输失效。时钟信号产生模块中的SCK当作数据接收和数据发送模块中的输入引脚,由图6可知,就是这两个模块的clk输入引脚。数据发送模块中的addr_data[7:0]输入是地址选择模块中的输出addr_q[7:0],包含了地址和读写位信息。
在本设计中,数据发送模块的输出引脚是SDO,该引脚上的数据是在sck的下降沿发生变化。数据接收模块中的输入引脚是SDI,该引脚在sck的上升沿将数据送到数据接收模块的移位寄存器中。只有r_or_w为0且数据验证通过,数据接收模块才将所得到的数据放入到q[5:0]中保存。数据验证就是验证接收到的数据最后一位是否为0,如果不为0,则数据接收错误,通知数据发送模块重发,且此次接收的数据抛弃。
2.2 从控制器通信规则设计
从控制器的电路结构由图1可知,它包括2个CAN收发器和一片FPGA芯片。芯片内部电路包含一个数据接收通道和一个数据发送通道。接收通道实现对数据帧的地址识别、串行接收和并行输出,以及对各电路单元的复位,电路单元由地址接收、数据接收、帧结束识别、自动复位、组合逻辑电路、数据发送和一些逻辑与门构成。数据发送通道实现对读数据帧的响应,并行输入灯组工作状态转换为串行数据移位输出,电路单元只有一个发送数据处理器。代码经过ISE软件综合后,在FPGA内部编程实现的电路如图7所示。
图7 从控制器通信接口电路
图7中各个模块的时钟信号都是来自于主控制发送过来的SCK信号。地址接收和数据接收模块都是在SCK的上升沿将SDO数据线上的数据移位至接收移位寄存器中,数据发送模块在SCK的下降沿时,将发送移位寄存器数据移位至SDI数据线上。当主控制器开始发送数据时,经CAN传输线传送,时钟信号由CAN收发器1的RXD端输入,提供给各电路单元的clk端。数据帧由CAN收发器2的RXD端输入,移位进入地址接收模块和数据接收模块中处理。当接收完第一个字节时,将其低6位数据与本地位宽为6位的地址比较,如果一致,表明地址匹配,match端输出高电平。当地址模块接收完第一个字节后,就不再接收数据,除非得到复位信号。
由于文中协议规定数据帧的最高位为逻辑0,所以在地址接收模块内定义了bit_first位,宽度为1位。初始状态下bit_first端为高电平,所以当地址接收模块接收完第一个字节时,bit_first端为低电平,在bit_first的下降沿锁存r_or_w端电平,当match端输出高电平时,数据发送模块开始准备发送数据。
如果r_or_w端输出高电平,说明主控制器发送的是一个写数据帧,数据发送模块发送的数据最低位被设置为逻辑0(ACK位)。因此,在最后1位(帧结束位)之前,数据发送模块均输出逻辑1,即隐性电平,从而不影响CAN传输线状态。只有当移出最后一位逻辑0时,CAN传输线状态转为显性电平,作为ACK信号传送到主控制器。如果r_or_w端输出低电平,说明主控制器发送的是一个读数据帧,数据发送模块将信号灯状态数据发送至主控制器。
从控制器的各电路单元中的移位寄存器都是8位的,接收通道的所有移位寄存器初始状态均为0xFF,因此,bit_first2端初始状态为低电平。当数据帧的最高位逻辑0到达帧结束识别模块的移位寄存器最高位时,bit_first2端输出高电平,帧中数据结束位的逻辑0到达bit_end端,使之输出高电平。由于bit_first2端电平产生正跳变,触发复位电路在短暂的延时之后,在reset端输出低电平,使各电路单元回归初始状态。如果从控制器接收的是一个写数据帧,而且地址匹配,那么,当数据帧结束时,match、r_or_w、bit_end、bit_first2均为高电平,使得使能模块输出高电平,在复位信号输出低电平之前,触发串行转并行移位寄存器并行输出数据[7]。为方便测试,输出数据接收模块接收最后一个字节的高6位数据。
3 仿真与测试
3.1 主控制器仿真测试
主控制器的主控芯片由STM32和FPGA构成,本文主要介绍FPGA内部通信接口设计仿真。本文中,数据帧长度是16位,由两个字节构成。其中第一个字节包含了地址和读写位信息,第二个字节的高6位是有效数据位。主控制器通过分频模块产生所需要的时钟信号SCK。如果主控制器想要与从控制器进行通信,则将sck_command赋值为0,开始产生时钟。因为这里传输一帧数据是16位,所以传输数据需要16个时钟周期,但是传输完成后,从控制器各个模块需要复位,因此多传输一个时钟周期,所以主控器和从控制器完成一次通信需要主控制器产生17个时钟周期。主控制产生时钟后,开始在SCK的下降沿发送数据,在SCK的上升沿接收数据,SCK在空闲时刻处于高电平。本文采用XILINX的开发软件ISE中自带的仿真软件ISim仿真,其波形图如图8所示。
图8显示的是主控制器向从控制器读取数据的操作。SCK和SDO是输出信号端口,分别对应CAN1和CAN2的发送端,SDI是输入端口,对应的是CAN的接收端。起初sck_command为0,表示开始产生数据时钟信号,然后主控制器在SCK的下降沿发送数据,在SCK的上升沿接收数据。主控制器与从控制器完成一次通信需要17个数据时钟信号周期,前16个时钟传输数据。主控制器在第17个时钟信号的上升沿将接收数据移位寄存器的高6位锁存输出,从图中可知,主控制器向从控制器中读取的数据是0x25(二进制为0010 0101),其与SDI输入端口的数据是一致的。
3.2 从控制器仿真测试
从控制器主控芯片只有FPGA芯片,本文是主要针对通信接口设计的仿真,仿真图如图9所示。同样,从控制器接收一帧数据的时钟需要17个时钟。图中的SDI是输出信号端,连接CAN2收发器的发送端。SCK和SDO是信号输入端,分别对应CAN1和CAN2的接收端。从控制器首先在SCK的下降沿下接收SDO引脚上的数据,
图8 主控制器接口读数据仿真图
图9 从控制器接收数据仿真图
在SCK的上升沿下发送数据。当从控制器在接收数据时,SDI端口上表现的是高电平。SDO端口发送过来的数据为0x6155,总共两个字节,高字节的低6位是地址,为0x21(二进制是0001 0001),与从控制器的本地地址一致,低字节的高6位是有效数据位,为0x25,和图中数据接收寄存器中的值一致。
结 语
在数据实际传输过程中发现,有时接收不到从控制器的数据。经检查,从控制器与主控制器在通信过程中如果线路发生故障,从控制器没有复位,等到下次继续发送数据,从控制器接收通道的数据是由上次通信过程中遗留下的数据和现在接收的数据组成,造成数据接收错误。
[1] 徐建闽,徐俊斌,钟汉如.MSP430单片机实现交通信号机的研究[J].机械与电子,2004(6):54-55.
[2] 向怀坤,梁松峰,袁媛.基于CAN/μCOS-II的网络交通信号控制器设计[J].深圳职业技术学院学报,2008(3):3-6,50.
[3] 魏志翔,周莉萍,徐龙,等.基于CAN总线的嵌入式车灯监控系统设计[J].电子设计工程,2012(12):33-35,38.
[4] 宗平,魏学业,康立学.太阳能交通信号灯系统设计[J].现代电子技术,2010(23):201-203,206.
[5] 饶运涛,邹继军.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[6] 邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1996.
[7] SunXuFei,Chen LongWei.A fieldbus applied to sensor-actuator monitoring network[J].Journal of Computational Methods in Sciences and Engineering,2015,3(15):489-497.
聂明旺(硕士研究生),主要研究方向为嵌入式技术应用;刘杰(硕士研究生),主要研究方向为智能交通。
[3] 薛小刚,葛毅敏.Xilinx IS 9.X FPGA/CPLD设计指南[M].北京:人民邮电出版社,2007.
[4] Philips Semiconductors.SJA1000 Stand-alone CAN controller,1997.
[5] 单超,王萍.基于Microblaze软核的嵌入式系统设计[J].单片机与嵌入式系统应用,2011(3).
唐明(工程师),主要研究方向为航空电子系统与整机集成。
(责任编辑:薛士然 收稿日期:2016-10-31)
Solar Traffic Signal Lamp Controller Based on FPGA
Nie Mingwang,Liu Jie
(College of Physics and Information Engineering,Fuzhou University,Fuzhou 351100,China)
Now most of solar traffic signal lamp controller uses the microcontroller,and the wireless communication is used to transfer the data between the master controller and the slaver controller of traffic signal light,but the electronic interference caused by the intersection of the vehicle will bring some impact on the wireless transmission line.FPGA is used to design the slaver controller of the traffic signal lamp,and the master slaver controller communicates with the slaver controller through the wired transmission.The circuit of communication interface is realized by using FPGA and CAN transmission line.The slaver controller is essentially equivalent to a pure hardware circuit design,the CAN transmission line is used as the transmission interface,which has very strong anti-interference.Finally,the simulation results show that the master controller and the slaver controller can transfer the data stably.
solar energy;FPGA;traffic signal lamp;CAN transmission line
TN91
A
�士然
2016-11-14)