提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
FPGA:Verilog实现pid算法控制pwm
前言
本次使用verilog编写pid算法,并用于生成pwm波形,分别进行仿真和上板并用示波器验证
提示:以下是本篇文章正文内容,下面案例可供参考
一、PID公式
原理自行学习,网上资料多,主要就是下面的这个公式
其中Kp,Ki,Kd就是后续需要调整的参数,通常为固定值,而在本次使用中只是用到了p和i,没有使用到d。
二、verilog实现pid
主要思路就是固定个期望值,随便赋予个实际初值,然后再对这个实际值进行pid算法处理,pid计算的值与原来的实际值相加作为新的实际值
1.pid模块
由于Kp,Ki,Kd三个参数通常为小数或者浮点数,所以一般都是经过放大处理减小误差, 计算完后还需要通过位移缩小。
代码如下(示例):
parameter period_num = 1024;//pwm周期频率
reg [15:0] period_cnt;//pwm频率计数器
reg signed [15:0]inter_data;//寄存当前实际值
reg signed [15:0]error;//误差寄存器
reg signed [15:0]prev_error;//上次误差寄存器
reg signed [15:0]sum_error;//误差累加
reg signed [15:0] p ; //P算法计算结果
reg signed [15:0] d ; //I算法计算结果
reg signed [15:0] i ; //D算法计算结果(尽管未使用到)
reg signed [15:0] kp_reduce;//缩小计算结果
reg signed [15:0] ki_reduce;
reg signed [15:0] kd_reduce;
reg signed