内容发布更新时间 : 2025/1/23 14:40:26星期一 下面是文章的全部内容请认真阅读。
PID算法及其FPGA实现
PID控制器结构清晰,参数可调,适用于各种控制对象,PID控制器的核心思想是针对控制对象的控制需求,建立描述对象动态特性的数学模型,通过PID参数整定实现在比例,微分,积分三个方面参数调整的控制策略来达到最佳系统响应和控制效果,式子如下:
在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当
时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。
式子3.8就是我们的位置式PID算法: 下面就是我们要实现上式PID算法。 PID的FPGA实现:
得到:
Verilog实现:
view plaincopy to clipboardprint?
. . . . . . . . . . . . . . . . . . . . . .
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: //
// Create Date: 21:02:51 05/14/2014 // Design Name: // Module Name: pid // Project Name: // Target Devices: // Tool versions: // Description: //
// Dependencies: //
// Revision:
// Revision 0.01 - File Created // Additional Comments: //
////////////////////////////////////////////////////////////////////////////////// module pid( input clk,
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
input rst_n, input [8:0] error, output reg [16:0] uk );
//reg [16:0]uk; wire [16:0]uk_wire; reg [8:0]error_1,error_2; parameter k0=5; parameter k1=1; parameter k2=1; always @(posedge clk) begin if(!rst_n) begin error_1<=0; error_2<=0; end else begin
error_1<=error; error_2<=error_1; end end //
reg [14:0]uk1; always @(posedge clk) begin if(!rst_n) begin uk<=0; uk1<=0; end else begin
if((uk_wire>17'd15000)&&(uk_wire<17'b1000_0000_0000_00000)) begin
uk<=17'd15000; end else begin
uk1<=uk[14:0]; uk<=uk_wire;