基于fpga的车速检测以及里程测量

发布于:2025-07-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

前言

用到的模块如图所示:需要的结合关键词去买就行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、系统核心原理

测速原理

光电编码器通过光栅盘和光电传感器产生正交脉冲信号(A相、B相)。

电机码盘旋转时,光栅遮挡/透光产生周期性脉冲,脉冲频率与电机转速成正比。

通过测量脉冲频率或周期,结合机械传动比和车轮半径,计算车辆线速度。

里程计算原理

积分法:对实时速度进行时间积分 S = ∫v·dt。

脉冲累加法:每个编码器脉冲对应固定位移,总里程 S = (总脉冲数 × 轮胎周长) / 每转脉冲数(无累计误差)。
在这里插入图片描述

二、系统硬件组成

光电编码器与码盘

类型:增量式正交编码器(如1024 PPR)。

输出信号:

A/B相:相位差90°的方波,用于测速和辨向。

Z相(可选):每转一个脉冲,用于基准点校准。

安装位置:直接安装在电机输出轴或传动轴上。

FPGA核心板

主芯片:Xilinx Artix-7 / Intel Cyclone 10 等低功耗型号。

关键外设:

高速时钟(50MHz)用于精密计时。

外部EEPROM/Flash:存储标定参数(轮胎半径、传动比、PPR值)。

UART/CAN接口:与上位机通信。

信号调理电路

差分接收器(如AM26LV32):将编码器的RS422差分信号转换为FPGA可处理的单端信号。

施密特触发器:整形脉冲边沿,抑制噪声。

光耦隔离:隔离电机侧高压(12/24V)与FPGA低压电路(3.3V)。

仿真分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码展示

滤波代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/04/17 11:21:08
// Design Name: 
// Module Name: signal_fir
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module signal_fir(
     input                     sys_clk  ,  
     input                     rst_n,   
     input                     TTL_signal,
     
     output     reg            TTL_signal_fir
    );
    reg [31:0] BufferTTL_signal;
    always @(posedge sys_clk or negedge rst_n)begin
    if(!rst_n)begin
        TTL_signal_fir<=1'b0;
    end
    else begin
        if (BufferTTL_signal == 32'b11111111_11111111_11111111_11111111)begin
            TTL_signal_fir<=1'b1;
        end
        else if (BufferTTL_signal == 32'b00000000_00000000_00000000_00000000)begin
            TTL_signal_fir<=1'b0;
        end
        else begin
            TTL_signal_fir<=TTL_signal_fir;
        end
    end
    end
    
    
    always @(posedge sys_clk or negedge rst_n)begin
    if(!rst_n)begin
        BufferTTL_signal<=32'b0;
    end
    else begin
        BufferTTL_signal[31] <= BufferTTL_signal[30];
	    BufferTTL_signal[30] <= BufferTTL_signal[29];
	    
	    BufferTTL_signal[29] <= BufferTTL_signal[28];
	    BufferTTL_signal[28] <= BufferTTL_signal[27];
	    BufferTTL_signal[27] <= BufferTTL_signal[26];
	    BufferTTL_signal[26] <= BufferTTL_signal[25];
	    BufferTTL_signal[25] <= BufferTTL_signal[24];
	    BufferTTL_signal[24] <= BufferTTL_signal[23];
	    BufferTTL_signal[23] <= BufferTTL_signal[22];
	    BufferTTL_signal[22] <= BufferTTL_signal[21];
        BufferTTL_signal[21] <= BufferTTL_signal[20];
	    BufferTTL_signal[20] <= BufferTTL_signal[19];
	    
	    BufferTTL_signal[19] <= BufferTTL_signal[18];
	    BufferTTL_signal[18] <= BufferTTL_signal[17];
	    BufferTTL_signal[17] <= BufferTTL_signal[16];
	    BufferTTL_signal[16] <= BufferTTL_signal[15];
	    BufferTTL_signal[15] <= BufferTTL_signal[14];
	    BufferTTL_signal[14] <= BufferTTL_signal[13];
	    BufferTTL_signal[13] <= BufferTTL_signal[12];
	    BufferTTL_signal[12] <= BufferTTL_signal[11];
        BufferTTL_signal[11] <= BufferTTL_signal[10];
	    BufferTTL_signal[10] <= BufferTTL_signal[9];
	    
	    BufferTTL_signal[9] <= BufferTTL_signal[8];
	    BufferTTL_signal[8] <= BufferTTL_signal[7];
	    BufferTTL_signal[7] <= BufferTTL_signal[6];
	    BufferTTL_signal[6] <= BufferTTL_signal[5];
	    BufferTTL_signal[5] <= BufferTTL_signal[4];
	    BufferTTL_signal[4] <= BufferTTL_signal[3];
	    BufferTTL_signal[3] <= BufferTTL_signal[2];
	    BufferTTL_signal[2] <= BufferTTL_signal[1];
        BufferTTL_signal[1] <= BufferTTL_signal[0];
	    BufferTTL_signal[0] <= TTL_signal;
    end
    
    end
    
endmodule

视频展示

基于FPGA的车速检测与里程计算系统

总结

实际用起来有一个注意点,光电传感器获取数据信号毛刺比较多,我进行了一个简单滤波,最后达到了稳定效果。