为了学习PID是怎么回事,特别做了此仿真,呵呵, 也可以说是<如何让PID的值转换成PWM的占空比>!
本人之前对PID一点都不懂,此贴主要是和大家分享学习经验!呵呵, 菜鸟贴, 不对的地方请大家拍砖!
此仿真采用的是PIC单片机, 由P1A引脚输出PWM,经过RC滤波后输出电压,AN0 ADC采样
先贴图吧!
PID算法是用的AVR: AVR221: Discrete PID controller 中的源码
//VFER = 2.048v, 10位分辨率(1024),设定稳压电压是1.024v
在此做几点说明:
1、设置P 、 I 、D
/*! \brief P, I and D parameter values
*
* The K_P, K_I and K_D values (P, I and D gains)
* need to be modified to adapt to the application at hand
*/
//! \xrefitem todo "Todo" "Todo list"
#define K_P 9.00
//! \xrefitem todo "Todo" "Todo list"
#define K_I 0.1
//! \xrefitem todo "Todo" "Todo list"
#define K_D 0.02
2、PID 方法调用
//512-设定值
GL(pid_Controller(512, adc_vlue, &pidData)); //VFER = 2.048v, 10位分辨率(1024),设定稳压电压是1.024v
3、ADC采样周期及PID控制周期
ADC 每100us采样一样,采用中位值滤波法
PID每1ms转换一次
最后........
上源码:
转载
|