FPGA VERILOG PID控制 下载本文

内容发布更新时间 : 2024/6/26 18:42:35星期一 下面是文章的全部内容请认真阅读。

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;