FPGA PID控制风扇

FPGA通过IO 接受风扇FG信号,并输出25MHz PWM信号控制风扇定转速。

参考:

http://t.csdnimg.cn/egL0V

详解FPGA的串口通讯(UART) | FPGA 开发圈 (eetrend.com)

PID控制器模块

输入为目标值、实际测量值(FG信号),输入为控制信号。

module pid_controller (
    input wire clk,
    input wire rst,
    input wire [31:0] setpoint,      // 目标转速
    input wire [31:0] measured,      // 实际转速
    output reg [31:0] control_signal // 控制信号输出 (占空比)
);

    // PID 参数 (定点数表示)
    parameter signed [31:0] Kp = 32'd327680;   // 5.0  (定点数表示:327680 = 5.0 << 16)
    parameter signed [31:0] Ki = 32'd1310;     // 0.02 (定点数表示:1310 = 0.02 << 16)
    parameter signed [31:0] Kd = 32'd6554;     // 0.1  (定点数表示:6554 = 0.1 << 16)

    reg signed [31:0] error;
    reg signed [31:0] integral;
    reg signed [31:0] derivative;
    reg signed [31:0] previous_error;

    always @(posedge clk or posedge rst) begin
        if (rst) begin
            integral <= 32'd0;
            previous_error <= 32'd0;
            control_signal <= 32'd0;
        end else begin
            // 计算误差
            error <= setpoint - measured;

            // 积分项
            integral <= integral + error;

            // 微分项
            derivative <= error - previous_error;

            // PID 输出控制信号
            control_signal <= (Kp * error + Ki * integral + Kd * derivative) >>> 16;

            // 保存当前误差用于下次计算微分项
            previous_error <= error;
        end
    end
endmodule

PMW生成模块

输入为占空比,输出PWM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值