2025寒假练 - 用小脚丫FPGA STEP BaseBoard V4.0套件实现交通灯
该项目使用了STEP BaseBoard V4.0,实现了交通灯控制系统的设计,它的主要功能为:纯WebIDE编程实现了一路交通信号灯的25s绿灯,3s黄灯,7s红灯以及倒计时显示。
标签
FPGA
数字逻辑
开发板
图形化编程
崽种货
更新2025-03-20
9

2025寒假练—用小脚丫FPGA STEP BaseBoard V4.0套件

(图形化编程)实现交通灯控制系统

1.项目介绍

按照2025寒假练平台一STEP BaseBoard V4.0套件任务一要求,实现交通灯控制以及倒计时数字显示。具体要求如下:

完全使用WebIDE的图形化编程,使用常规的74系列的元器件,构建一个交通灯控制系统:其中数码管计时信息以及蜂鸣器报警两功能使用图形化编程实现,接近传感器检测人员走近与环境光感知,自动点亮路灯这两个功能由verilog语言实现。

WebIDE项目链接:https://www.stepfpga.com/project/17385/gui?type=top

2.硬件介绍

本项目中主要用的到的器件如下。

2.1.Lattice LCMXO2-C

Lattice LCMXO2是一款高性能、低功耗的FPGA(现场可编程门阵列)芯片,广泛应用于工业控制、通信、消费电子等领域。具备丰富的逻辑资源、高速IO接口和灵活的配置选项。STEP-MXO2-C是基于上述核心并增加基础的数码管、四位开关、四位按钮、八位单色led、两个rgb三色led等外设。同时以U盘配置,便于程序烧录。

image.png

2.2. STEP-Baseboard V4.0

      STEP-MXO2-C为核心进行大幅扩展的综合性底板。

image.png

2.3. RPR-0521RS

RPR-0521RS是一款高性能、小尺寸的反射式光传感器,适用于各类环境光线检测场景。

2.4. 硬件连接

image.png

3.设计思路

本项目按要求进行拆解后方案框图如下:

image.png

具体方案是:

在核心控制模块中,使用74HC1614位二进制计数器)实现交通灯状态机控制(红、黄、绿灯切换),通过预置计数逻辑完成固定时序循环。74HC190(同步加/减计数器)负责倒计时功能,输出计时数据至数码管,支持动态调整计时周期。74HC153(双41数据选择器)用于设置不同交通灯状态的计时阈值(如红灯30秒、绿灯25秒等)。

显示与报警模块通过74HC48BCD-7段译码器)驱动数码管,实时显示当前状态剩余时间,并在红灯时触发蜂鸣器告警,图形化编程实现动态刷新。当接近传感器(Verilog模块)检测到行人靠近时,亮起单色LED代表路灯。

传感器与灯光控制模块通过Verilog编写的环境光传感器(RPR0521)驱动,采集环境光强度,光线不足时自动点亮核心板上的单色LEDPWM调光)。传感器数据通过I2C协议传输,由`rpr0521_ctrl`模块解析,`led_ctrl`模块控制LED亮度。例程中的代码不能直接移植入图形化编程中的自定义模块,需要对部分变量进行reg形式的转换以及赋值,例如IIC_dirver模块修改如下:

image.png

在系统集成与优化模块中,通过74系列芯片的同步信号确保计数器、状态机与显示模块的时序一致性。环境光控制模块在白天关闭路灯LED,夜间自动开启。

最后,在验证与扩展模块中,分模块验证计数器精度、传感器响应、显示同步性,再整体联调交通灯逻辑。或通过修改74HC153的输入扩展复杂计时规则。

4.软件流程

4.1. 显示以及状态转换

首先,系统通过74HC190同步可逆计数器实现核心计时功能。该计数器根据任意频率分频器产生1s脉冲外部时钟信号进行递减计数,U_D端口置1表示递减。可以通过74HC153 设置计时初值,从而设定计时起点。计时器的当前计数值以BCD码形式输出,并输入至74HC48 BCD-七段译码器。译码器将BCD码转换为七段数码管驱动信号,实时驱动数码管显示当前计数值信息。

image.pngimage.png

接下来,74HC161四位二进制计数器负责管理计时器的状态切换,如绿红黄模式切换。clk按键或逻辑电路向 74HC161 输入脉冲信号,其输出端连接至 74HC153双四选一数据选择器选取预制时间。

image.png

通过若干逻辑式对当前状态以及全零输出信号的处理进行状态跳转。

image.png

4.2.环境传感器以及模拟路灯

image.png

这个系统由三个核心模块组成,分别是I2C驱动模块、传感器控制模块和数据处理模块,它们协同工作,实现了从传感器数据采集到最终光强计算和LED控制的完整流程。

I2C驱动模块负责实现标准的I2C通信协议。它采用有限状态机的方式,以400KHz的快速模式,与7位地址的设备进行通信(SLAVE_ADDRESS)。

传感器控制模块负责初始化传感器并控制数据的读取。在初始化阶段,模块会依次写入4个配置寄存器:0x40用于使能ALS(环境光传感器)和接近传感器,0x41设置ALS测量时间,0x42设置接近传感器LED电流,0x43设置接近传感器测量时间。初始化完成后,模块进入循环读取数据的阶段,依次读取6个数据寄存器:0x44-0x45存储接近传感器数据,0x46-0x47存储ALS CH0数据(可见光),0x48-0x49存储ALS CH1数据(红外)。每次读取完成后,模块会触发dat_valid信号,表示数据已准备好供后续处理。

数据处理模块负责对传感器数据进行处理和计算。首先,模块对接近传感器数据进行差分滤波,以消除噪声。然后,根据CH1(红外数据)与CH0(可见光数据)的比值,动态选择4种光强计算公式之一进行计算。最后,根据阈值条件确定led灯光的状态。

5.功能展示

灯光控制以及数字显示如下,从四幅图中可以看出三色led切换以及倒计时显示,由图(d)可以看出在较暗环境下路灯自然点亮,由图(a)可以看出当有人靠近时路灯也会自然点亮。

image.pngimage.png

a                       (b)

image.pngimage.png

(c)                        (d)

本项目完全基于WebIDE完成,资源占用如图:

image.png

image.png

image.png


6.困难与解决

首先,由于对Verilog硬件描述语言的掌握不够深入,加之数字电路基础课程的知识有所遗忘,这成为了项目初期的主要障碍。为了解决这个问题,我采取了系统性的学习策略:在Bilibili平台上搜索并学习了相关的专业课程,通过观看教学视频和完成配套练习,逐步巩固了数字电路的基本概念,如组合逻辑电路、时序逻辑电路、状态机设计等,同时也加深了对Verilog语言语法、模块化设计、测试平台搭建等关键技术的理解。

其次,在图形化编程方面,由于是首次接触相关开发工具,我面临着操作不熟练、工作流不清晰等问题。针对这一挑战,我采取了循序渐进的学习方法:从最简单的点灯实验入手,通过反复实践来熟悉开发环境、掌握工具使用技巧。

在实现数码管显示功能时,我遇到了一个特殊的技术难题:开发环境内置的74系列芯片库中没有专门的数码管驱动芯片。如果完全通过基本逻辑门来实现这一功能,不仅设计复杂,还会给IDE带来过大的负荷,经常无法显示或显示错误。我决定采用自定义模块的方式来解决这个问题。严格按照74HC48的功能表进行开发,包括BCD码到七段码的转换、消隐控制、灯测试等功能。在设计过程中,我特别注意了模块的接口规范,使其与WebIDE中内置芯片的接口标准保持一致,确保了模块的兼容性和易用性。

7.心得与建议

在参与FPGA开发项目的过程中,我深刻体会到项目成功的多个关键因素。首先,项目启动前的准备工作至关重要,包括对项目需求的深入分析、详细设计方案的制定以及技术路线的选择,这些为项目的顺利进行奠定了坚实基础。在设计阶段,我认识到模块化设计的重要性,通过将复杂系统分解为独立模块,不仅使项目结构更加清晰,还便于团队分工合作,并为后期维护提供了便利。

对与webIDE我有些不成熟的建议,一是完善使用介绍,原本的介绍仅仅是将基本功能引入,还有很多部分需要自己探索。二是引脚配置界面偶尔有卡顿,会丢失引脚。

附件下载
archive.zip
本项目完全基于WebIDE完成,导出文件如上,为便于引脚配置故改写了一份Diamond的lpf文件作为备注。
团队介绍
个人团队
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号