2025寒假练 - 基于小脚丫STEP Baseboard4.0底板+STEP MXO2 LPC核心板的交通灯控制系统
该项目使用了verilog语言,实现了交通灯控制系统的设计,它的主要功能为:该系统通过数码管显示计时信息,蜂鸣器进行报警提示,接近传感器检测行人靠近,环境光感知模块自动控制路灯的开关。
标签
FPGA
图形化
交通灯
状态机跳转
123025
更新2025-03-25
华中科技大学
13

基于STEP Baseboard4.0底板+STEP MXO2 LPC核心板的交通灯控制系统项目报告

1. 项目概述

本项目基于STEP Baseboard4.0底板和STEP MXO2 LPC核心板,设计并实现了一个交通灯控制系统。该系统通过数码管显示计时信息,蜂鸣器进行报警提示,接近传感器检测行人靠近,环境光感知模块自动控制路灯的开关。项目结合了硬件设计与软件编程,实现了交通灯系统的智能化控制。

2. 硬件介绍

2.1 STEP Baseboard4.0底板

STEP Baseboard4.0底板是一个功能丰富的开发平台,提供了多种外设接口,包括数码管、蜂鸣器、按键、LED灯等。底板的扩展性强,适合用于各种嵌入式系统的开发。

2.2 STEP MXO2 LPC核心板

STEP MXO2 LPC核心板基于Lattice MXO2 FPGA芯片,具有低功耗和高性能的特点。核心板支持Verilog硬件描述语言编程,能够实现复杂的逻辑控制和信号处理。

2.3 数码管

数码管用于显示交通灯的计时信息,能够直观地展示红灯、绿灯和黄灯的剩余时间。通过图形化编程,数码管的显示内容可以根据交通灯的状态动态更新

2.4 蜂鸣器

蜂鸣器用于在特定情况下发出报警信号,例如当计时器为0时。蜂鸣器的控制通过图形化编程实现,能够根据系统状态发出响声。

2.5 接近传感器

接近传感器用于检测是否有行人靠近交通灯。当传感器检测到行人时,系统会做出相应的反应,例如蜂鸣器报警。接近传感器的信号处理通过Verilog硬件描述语言实现。

2.6 环境光感知模块

环境光感知模块用于检测周围环境的光线强度,并根据光线强度自动控制路灯的开关。当环境光较暗时,系统会自动点亮路灯;当环境光较亮时,系统会自动关闭路灯。环境光感知模块的控制逻辑通过Verilog实现。

3. 方案框图和设计思路

3.1 方案框图

任务一:https://www.stepfpga.com/project/17714/gui?type=top(图形化链接)

image.png

任务二:

image.png

3.2 设计思路

  1. 数码管显示模块:通过图形化编程,将交通灯的计时信息实时显示在数码管上。数码管显示的内容包括红灯、绿灯和黄灯的剩余时间。
  2. 蜂鸣器报警模块:当计时器计时为0时,蜂鸣器会发出报警信号。报警信号通过图形化编程控制。
  3. 接近传感器模块:通过Verilog编程,接近传感器检测行人靠近交通灯的情况。当检测到行人时,系统会做出相应的反应,俩个LED灯熄灭。
  4. 环境光感知模块:通过Verilog编程,环境光感知模块检测周围环境的光线强度,并根据光线强度自动控制路灯的开关。

4. 关键代码介绍

软件流程图

任务一和二:

ff758064220544bf1b33e050e26da6b.jpg

任务三和四:

784df919bcce2a202077082702564b8.jpg

任务一和二:

always @(posedge clk or negedge rst) begin
if (!rst) begin
// 异步复位
countdown <= 6'd59; // 初始化为59秒
tens <= 4'd5; // 十位数初始化为5
units <= 4'd9; // 个位数初始化为9
enable<=0;
end else if(clk_1Hz) begin
// 每个时钟周期减1
if (countdown == 0) begin
// 如果倒计时归零,重新开始
countdown <= 6'd0; // 重置为59秒
tens <= 4'd0; // 十位数重置为5
units <= 4'd0; // 个位数重置为9
enable<=1;
end else begin
// 倒计时减1
countdown <= countdown - 1;

// 更新十位和个位
if (units == 0) begin
// 如果个位为0,十位减1,个位重置为9
tens <= tens - 1;
units <= 4'd9;
end else begin
// 个位减1
units <= units - 1;
end
end
end
end
always @(posedge clk or negedge rst) begin
if (!rst) begin
seg_data_1<=4'd5;
seg_data_2<=4'd9;
end
else begin
seg_data_1<=units;
seg_data_2<=tens;
end
end

任务三和四:

module decoder
(
input [15:0] prox_dat,//接近寄存器数据
input [15:0] ch0_dat,//光强寄存器1数据
input [15:0] ch1_dat,//光强寄存器2数据
output reg Low_Light_Flag,
output reg Close_Flag
);

always @(prox_dat) begin
if(prox_dat>=350)
Close_Flag<=1;
else
Close_Flag<=0;
end

always @(ch0_dat or ch1_dat) begin
if(ch0_dat<=5 && ch1_dat<=5)
Low_Light_Flag<=1;
else
Low_Light_Flag<=0;
end

endmodule
module led_control
(
input clk,
input rst,
input Low_Light_Flag,
input Close_Flag,
output reg led1,
output reg led2
);

always @(posedge clk or negedge rst) begin
if(!rst) begin
led1<=1;
led2<=1;
end
else begin
if(Low_Light_Flag)
led1<=0;
else
led1<=1;
if(Close_Flag)
led2<=0;
else
led2<=1;
end
end

endmodule

5. 功能展示图及说明

5.1 数码管显示

数码管实时显示交通灯的计时信息,红灯、绿灯和黄灯的剩余时间清晰可见


5.2 蜂鸣器报警

见视频

5.3 接近传感器检测

接近传感器能够准确检测到行人靠近交通灯的情况,并根据检测结果使俩个LED亮起。

5.4 环境光感知

环境光感知模块能够根据周围环境的光线强度自动控制路灯的开关,确保夜间或光线不足时的交通安全

6. 项目中遇到的难题和解决方法

6.1 难题一:倒计时出错

问题描述:在倒计时功能实现过程中,发现倒计时有时会出现跳变或卡顿现象,例如从10秒直接跳到8秒,或者倒计时停止不动。
解决方法:

  1. 检查计时逻辑:发现倒计时逻辑中存在时钟信号处理不当的问题,导致计时不准确。通过优化时钟分频逻辑,确保了计时信号的稳定性。
  2. 增加同步机制:在倒计时切换时增加了同步机制,确保倒计时能够平滑过渡,避免了跳变现象。
  3. 调试与测试:通过多次调试和测试,逐步优化了倒计时的代码逻辑,最终解决了倒计时出错的问题。

6.2 难题二:数码管引脚匹配错误

问题描述:在硬件连接过程中,数码管的引脚与核心板的引脚匹配错误,导致数码管无法正常显示内容,甚至出现部分段位不亮的情况。
解决方法:

  1. 检查硬件连接:通过查阅数码管和核心板的引脚定义文档,重新核对了引脚连接,确保每一根信号线都正确连接。
  2. 修改驱动代码:根据正确的引脚定义,修改了数码管的驱动代码,确保信号能够正确传输到数码管的对应段位。
  3. 分段测试:通过分段测试,逐步验证了每一段数码管的显示功能,确保所有段位都能正常工作。

6.3 难题三:RPR-0521RS模块不熟悉

问题描述:在项目初期,对RPR-0521RS环境光感知模块的使用不熟悉,导致无法正确读取光线强度数据,甚至出现了模块无法正常工作的情况。
解决方法:

  1. 查阅文档:通过仔细阅读RPR-0521RS模块的技术文档,了解了其工作原理、通信协议和寄存器配置方法。
  2. 调试通信接口:使用逻辑分析仪调试了I2C通信接口,确保核心板能够正确与RPR-0521RS模块进行通信。
  3. 编写测试代码:编写了简单的测试代码,逐步验证了模块的光线强度读取功能,确保其能够正常工作。

7. 心得体会

7.1 独立完成项目的收获

  1. 技术能力的提升
    作为一个独立完成的项目,我需要同时兼顾硬件设计和软件编程的各个方面。这让我对Verilog硬件描述语言、图形化编程、传感器数据处理、硬件调试等技术有了更深入的理解。特别是在环境光感知模块(RPR-0521RS)的使用中,我从完全陌生到熟练掌握,这个过程极大地提升了我的学习能力和技术实践能力。
  2. 问题解决能力的增强
    在项目中,我遇到了许多意想不到的问题,例如数码管显示不稳定、接近传感器误检测等。这些问题让我意识到,在实际开发中,问题的出现是不可避免的,关键在于如何快速定位问题并找到解决方案。通过查阅技术文档、调试代码和优化硬件连接,我逐渐掌握了解决问题的方法和思路。

7.2 独立完成项目的挑战

1.     问题排查的难度
在独立完成项目时,问题的排查往往更加困难,因为没有团队成员可以讨论和分担压力。例如,在数码管显示不稳定的问题中,我需要同时检查硬件连接和软件代码,这让我花费了大量的时间和精力。

2.     技术盲区的存在
在项目中,我遇到了一些技术盲区,例如RPR-0521RS模块的使用。由于之前没有接触过这个模块,我需要从头学习其工作原理和编程方法,这增加了项目的难度和时间成本。

7.3 意见与建议

  1. 硬件资源
    建议在未来的项目中提供更多的硬件资源,例如更多的传感器模块和扩展接口,以便实现更复杂的功能。丰富的硬件资源可以让项目更加多样化,也能激发更多的创意。
  2. 开发工具
    希望开发工具能够更加完善,提供更多的调试和分析功能,例如集成逻辑分析仪和实时调试工具。这些工具可以大大提高开发效率,减少调试时间。
  3. 项目时间
    建议延长项目开发时间,以便有更多的时间进行测试和优化,确保项目的稳定性和可靠性。独立完成项目需要更多的时间来排查问题和优化细节,因此充足的时间是非常必要的。
  4. 培训与支持
    建议在项目开始前提供更多的技术培训和支持,特别是对于不熟悉的硬件模块(如RPR-0521RS),以便更快上手。技术培训可以帮助开发者更快地掌握新知识,减少学习成本。
  5. 文档与示例代码
    希望未来能够提供更详细的技术文档和示例代码,特别是针对一些复杂的硬件模块。详细的文档和示例代码可以帮助开发者更快地理解模块的使用方法,减少调试时间。

7.4 总结

总的来说,本次项目让我受益匪浅,不仅提升了我的技术能力,也增强了我的问题解决能力和自主学习能力。作为一个独立完成的项目,我从中体会到了独立开发的挑战和乐趣,也让我更加自信地面对未来的技术难题。虽然在项目过程中遇到了许多困难,但每一次问题的解决都让我感到成就感满满,也让我更加坚定了继续学习和探索的决心。

希望在未来的项目中,我能够继续学习和成长,探索更多有趣的技术和应用。


附件下载
3.4.zip
任务三和四
web链接.txt
图形化链接
archive1.2.zip
任务一和二:https://www.stepfpga.com/project/17714/gui?type=top
团队介绍
无团队
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号