2025寒假练 - 基于小脚丫FPGA实现交通灯控制系统
该项目使用了小脚丫FPGA STEP BaseBoard V4.0套件,实现了交通灯控制系统的设计,它的主要功能为:在数码管上显示计时信息、蜂鸣器报警、接近传感器检测人员靠近、环境光感知并点亮路灯,以及实现基础的交通灯控制功能。。
标签
FPGA
开发板
寒假在家一起练
-Faded_Lov-
更新2025-03-18
59



项目报告:2025寒假练 - 基于小脚丫FPGA实现交通灯控制系统

1. 项目需求



完全使用WebIDE的图形化编程,使用常规的74系列的元器件,构建一个交通灯控制系统:

  • 在数码管上显示计时信息 - 图形化
  • 蜂鸣器报警 - 图形化
  • 接近传感器检测人员走近 -Verilog
  • 环境光感知,自动点亮路灯(小脚丫核心板上的单色LED)- Verilog



    硬件平台采用STEP Baseboard 4.0版本的底板和STEP MXO2 LPC核心板。该底板资源丰富,能够满足多种外设的控制需求。本次项目将完全使用WebIDE的图形化功能来实现,模拟一个智能化的交通灯控制系统。

2. 系统设计与实现

2.1 系统架构



系统的整体架构包括以下几个模块:

  1. 时钟分频模块:将主时钟分频为3个不同频率的时钟信,驱动各个模块。
  2. 交通灯控制模块:负责主路和支路的红绿灯控制,并显示主路倒计时信息。
  3. 接近传感器模块:通过IIC通信获取传感器数据,检测人员靠近并触发蜂鸣器报警。
  4. 环境光感知模块:通过IIC通信获取传感器数据,根据环境光强度控制路灯的开关。

2.2 时钟分频模块



系统的时钟分频模块将主时钟信号分频为三个不同的频率,分别用于驱动交通灯控制模块、传感器模块和蜂鸣器模块。

  • 1Hz时钟:用于交通灯控制模块的1秒计时。
  • 400KHz时钟:用于与传感器的IIC通信。
  • 120Hz时钟:用于驱动蜂鸣器。



    通过分频模块,系统能够根据不同模块的需求提供合适的时钟信号,确保各个模块的协调工作。

2.3 交通灯控制模块



交通灯控制模块是系统的核心部分,主要负责模拟主路和支路的红绿灯状态,并在数码管上显示倒计时信息。该模块的实现基于两个相同的子模块,分别控制主路和支路的交通灯。

2.3.1 主路交通灯控制


主要逻辑代码:

// 输出逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        rgb <= (INIT_STATE == S1) ? RGB_GREEN : // 初始状态为绿灯
               (INIT_STATE == S2) ? RGB_YELLOW : // 初始状态为黄灯
               RGB_RED; // 初始状态为红灯
        timecont <= (INIT_STATE == S1) ? TIM_G :
                    (INIT_STATE == S2) ? TIM_Y :
                    TIM_R;
    end else begin
        case (next_state)
            S1: begin
                rgb <= RGB_GREEN; // 绿灯
                if (timecont == 1)
                    timecont <= TIM_G;
                else
                    timecont <= timecont - 1;
            end
            S2: begin
                rgb <= RGB_YELLOW; // 黄灯
                if (timecont == 1)
                    timecont <= TIM_Y;
                else
                    timecont <= timecont - 1;
            end
            S3: begin
                rgb <= RGB_RED; // 红灯
                if (timecont == 1)
                    timecont <= TIM_R;
                else
                    timecont <= timecont - 1;
            end
            default: rgb <= RGB_GREEN; // 默认状态
        endcase
    end
end


主路交通灯控制模块的输入为1Hz的时钟信号和复位信号。模块内部定义了四个常量,分别表示红灯、绿灯和黄灯的初始状态以及各个灯的时间设置(单位为秒)。输出信号包括:

  • RGB信号:用于驱动三色LED,模拟红绿灯的状态变化。
  • 倒计时信号:通过解码模块处理后,驱动数码管显示倒计时信息。

2.3.2 支路交通灯控制



支路交通灯控制模块与主路模块结构相同,但常量设置不同。支路的初始状态为红灯,且与主路的红绿灯时间错开。具体表现为:

  • 当主路为红灯时,支路为绿灯和黄灯。
  • 当主路为绿灯和黄灯时,支路为红灯。



    通过这种设计,主路和支路的交通灯能够实现交替控制,模拟真实的交通灯系统。

2.4 接近传感器模块



接近传感器模块通过IIC通信与传感器进行数据交互,获取可见光强度和距离数据。模块内部设置了两个阈值,分别用于判断环境光强度和人员接近情况。

2.4.1 环境光感知



传感器每隔一定时间获取一次环境光强度数据,并与设定的阈值进行比较。当环境光强度低于阈值时,模块输出一个低电平信号,表示需要点亮路灯。由于该信号为1位,而需要驱动8个LED,因此使用了74HC164移位寄存器,将信号同步到8个LED上,模拟路灯的点亮。

2.4.2 人员接近检测



传感器同时检测人员接近的距离数据。当检测到人员靠近时,模块输出一个高电平信号,表示有人员接近。该信号与蜂鸣器驱动信号通过一个与门连接,当有人员接近时,蜂鸣器驱动信号导通,蜂鸣器发出报警声。

2.5 引脚分配



系统的引脚分配如下:

  • 三色LED:分别用于主路和支路的红绿灯信号。
  • 数码管:用于显示主路交通灯的倒计时信息。
  • 8个LED:用于模拟路灯的点亮。
  • IIC通信线:用于与接近传感器进行数据交互。
  • 蜂鸣器驱动IO线:用于控制蜂鸣器的报警声。

3. 系统调试与优化



在系统实现过程中,调试和优化是确保系统稳定运行的关键步骤。以下是调试过程中遇到的主要问题及解决方案:

3.1 交通灯倒计时显示问题



在初期调试中,数码管显示的倒计时最开始不显示,后面调试发现是FPGA对于除法器的操作有问题,后面修改解码算法去除了除法运算。


// 提取十位:number / 10
tens = (number * 205) >> 11; // 近似计算 number / 10
// 提取个位:number % 10
units = number - (tens * 10);


3.2 传感器数据读取异常



在接近传感器模块的调试过程中,传感器数据读取时出现了异常,导致环境光感知和人员接近检测功能无法正常工作。经过排查,发现是IIC通信的信号没有设置输出,修改后能正常与传感器进行通信。

4. FPGA报告

Design Summary:

Number of registers: 211 out of 4635 (5%)

PFU registers: 211 out of 4320 (5%)

PIO registers: 0 out of 315 (0%)

Number of SLICEs: 221 out of 2160 (10%)

SLICEs as Logic/ROM: 221 out of 2160 (10%)

SLICEs as RAM: 0 out of 1620 (0%)

SLICEs as Carry: 45 out of 2160 (2%)

Number of LUT4s: 440 out of 4320 (10%)

Number used as logic LUTs: 350

Number used as distributed RAM: 0

Number used as ripple logic: 90

Number used as shift registers: 0

Number of PIO sites used: 37 + 4(JTAG) out of 105 (39%)

Number of block RAMs: 0 out of 10 (0%)

Number of GSRs: 1 out of 1 (100%)

EFB used : No

JTAG used : No

Readback used : No

Oscillator used : No

Startup used : No

POR : On

Bandgap : On

Number of Power Controller: 0 out of 1 (0%)

Number of Dynamic Bank Controller (BCINRD): 0 out of 6 (0%)

Number of Dynamic Bank Controller (BCLVDSO): 0 out of 1 (0%)

Number of DCCA: 0 out of 8 (0%)

Number of DCMA: 0 out of 2 (0%)

Number of PLLs: 0 out of 2 (0%)

Number of DQSDLLs: 0 out of 2 (0%)

Number of CLKDIVC: 0 out of 4 (0%)

Number of ECLKSYNCA: 0 out of 4 (0%)

Number of ECLKBRIDGECS: 0 out of 2 (0%)

5. WebIDE的图形化编程改进建议

5.1 自定义模块

  1. 自定义模块的输入输出与常量的定义需要能灵活修改,现在每次都是新建一个模块将代码迁移过去
  2. 自定义模块不能调整大小,导致走线扎堆
  3. 打开模块编辑后切出去会导致图形化数据丢失,只保留模块编辑内容,导致工程报废,正常保存后要恢复到图形化设计界面 -- 先快捷键(Ctrl+S)保存,再点击保存按钮会触发

5.2 图形化界面

  1. 拉线逻辑需要优化,默认避开元件及走线重合部分,走线拉线希望能像PCB原理图拉线一样可以方便的添加拐角和将一段线平移
  2. 走线交叉的地方使用类似PCB原理图的节点或跳线来区分网络是否相同
  3. 拉线不同网络可以使用不同颜色以区分
  4. 图形化工程没办法做备份或复制副本,数据出现问题只能重来
  5. 增加注释类框和文本的选项,方便模块划分与记录
  6. 增加栅格

5.3 编译仿真

  1. 逻辑综合的报错不好直接定位到错误地点
  2. 管脚分配在分配一个管脚后覆盖,会丢失管脚
  3. 图形化的仿真使用教程,尝试仿真时代码执行没有波形,也没有报错,不知道是什么地方有问题

6. 项目总结与展望



本次项目基于小脚丫FPGA平台,成功实现了一个智能化的交通灯控制系统。通过WebIDE的图形化设计,完成了交通灯控制、数码管显示、蜂鸣器报警、接近传感器检测和环境光感知等多个功能模块的设计与实现。系统能够模拟真实的交通灯控制场景,并具备一定的智能化功能,如根据环境光强度自动点亮路灯、检测人员靠近并触发报警等。



未来,可以进一步扩展系统的功能,例如:

  • 增加更多的传感器:如温度传感器、湿度传感器等,实现更复杂的环境感知功能。
  • 优化交通灯控制算法:根据实时交通流量动态调整红绿灯时间,提高交通效率。
  • 增加无线通信模块:实现远程监控和控制,提升系统的智能化水平。



    总的来说,本次项目不仅加深了对FPGA逻辑设计的理解,还提升了解决实际问题的能力,为今后的学习和开发积累了宝贵的经验。



软硬件
元器件
74HC164
8位移位寄存器
74HC08
四路2输入与逻辑门
电路图
附件下载
archive.zip
https://www.stepfpga.com/project/17142
团队介绍
学嵌入式的爱好者
团队成员
-Faded_Lov-
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号