用FPGA和Ego1开发板,从零搭建一个能识别红绿灯的超声波避障小车(含完整代码)

张开发
2026/6/9 10:29:49 15 分钟阅读
用FPGA和Ego1开发板,从零搭建一个能识别红绿灯的超声波避障小车(含完整代码)
用FPGA和Ego1开发板打造红绿灯识别避障小车全流程实战第一次接触FPGA时我被它并行处理的能力深深吸引——想象一下一个能同时处理摄像头数据、超声波测距和电机控制的芯片这不正是智能小车的完美大脑吗本文将带你用Ego1开发板从零构建一个能识别红绿灯的超声波避障小车。不同于常见的单片机方案FPGA的硬件并行特性让我们可以真正实现多传感器数据的同步处理。1. 硬件架构设计与核心模块选型1.1 Ego1开发板的优势与局限Xilinx Artix-7芯片的Ego1开发板是FPGA初学者的理想选择其特点包括内置USB-JTAG编程接口省去额外下载器4个PMOD接口方便扩展外设但IO口驱动能力有限仅12mA需注意电机必须通过驱动板连接超声波模块建议使用3.3V版本关键外设对比表模块类型推荐型号工作电压接口方式注意事项直流电机TT马达3-6V需L298N驱动PWM频率建议1-5kHz舵机SG904.8-6V直接PWM控制周期20ms脉宽0.5-2.5ms超声波HC-SR045V需电平转换测量周期建议≥60ms摄像头OpenMV Cam H73.3VUART/I2C/GPIO色块识别延迟约30ms1.2 电源系统的实战经验在面包板搭建阶段我强烈建议采用双电源方案# 典型供电配置实际使用需匹配具体元件 锂电池组 - 5V稳压模块 - FPGA核心电路 - 3.3V LDO - 逻辑电平转换 - 直接供电 - 电机驱动板提示电机启停时会产生电压波动数字地和电机地之间应加0.1μF电容2. FPGA逻辑设计从并行处理到精准定时2.1 多时钟域管理技巧Ego1板载的100MHz时钟需要分频为不同用途// 时钟分频模块示例 module clk_divider( input clk_100M, output reg clk_1M 0, output reg clk_10k 0 ); reg [6:0] cnt_1M 0; reg [12:0] cnt_10k 0; always (posedge clk_100M) begin // 生成1MHz时钟用于超声波 if(cnt_1M 49) begin cnt_1M 0; clk_1M ~clk_1M; end else cnt_1M cnt_1M 1; // 生成10kHz时钟用于PWM if(cnt_10k 4999) begin cnt_10k 0; clk_10k ~clk_10k; end else cnt_10k cnt_10k 1; end endmodule2.2 超声波测距的Verilog实现超声波模块的三大关键点触发信号时序 - 精确的10μs高脉冲回波信号捕捉 - 使用高速计数器距离计算优化 - 避免浮点运算// 超声波测距核心代码片段 module ultrasonic( input clk_1M, // 1MHz时钟 output reg trig, input echo, output [15:0] distance ); reg [23:0] echo_cnt 0; reg [7:0] state 0; always (posedge clk_1M) begin case(state) 0: begin // 初始化 trig 0; if(echo_cnt 999_999) begin // 约1秒周期 state 1; echo_cnt 0; end else echo_cnt echo_cnt 1; end 1: begin // 发送触发脉冲 trig 1; if(echo_cnt 9) state 2; // 保持10μs echo_cnt echo_cnt 1; end // ... 其余状态机代码 endcase end assign distance echo_cnt[23:8] / 58; // 单位厘米 endmodule3. 传感器融合与决策逻辑3.1 红绿灯识别的状态机设计OpenMV摄像头通过GPIO传递信号时建议采用以下编码方案颜色状态GPIO1GPIO0说明红灯00立即停止绿灯01正常行驶黄灯10减速准备停止无识别11安全模式对应的FPGA状态转换逻辑graph TD A[初始状态] --|绿灯| B(前进) B --|红灯| C(刹车) C --|绿灯| B B --|障碍物| D(避障模式) D --|安全距离| B3.2 避障算法的参数调优通过实际测试得出的最佳参数组合超声波布局方案前向主探头安装高度15cm俯角10°左右辅助探头水平安装间距8cm避障阈值表距离范围舵机转向角电机PWM占空比响应策略80cm0°70%全速前进40-80cm±15°50%小幅修正40cm±30°30%紧急避让两侧差20cm偏向远侧保持主动避障4. 调试技巧与性能优化4.1 常见问题排查指南在三次迭代中遇到的典型问题及解决方案PWM电机抖动现象电机运转不平稳伴有异响排查用逻辑分析仪捕获PWM波形解决将PWM频率从1kHz提升到5kHz超声波数据跳变现象距离值偶尔突变排查添加数字滤波算法// 移动平均滤波实现 reg [15:0] distance_buf[0:3]; always (posedge clk) begin distance_buf[0] raw_distance; filtered_distance (distance_buf[0]distance_buf[1] distance_buf[2]distance_buf[3]) 2; endOpenMV通信延迟现象颜色识别响应慢优化将UART通信改为GPIO直接触发4.2 资源占用优化技巧Artix-7 XC7A35T的资源利用率对比模块原始方案(LUT)优化后(LUT)节省方法PWM生成423187共用分频时钟超声波587312状态机简化数码管25698二进制压缩显示总计1266(37%)597(17%)资源共享最后分享一个调试小技巧在Verilog中添加在线调试信号通过板载LED实时显示关键状态assign led {color_detected, obstacle_near, motor_running};当看到LED[2]闪烁时说明电机正在接收PWM信号这种可视化调试能快速定位问题模块。

更多文章