PWM模拟DAC电压输出-PID仿真贴

2020-02-10 08:56发布

为了学习PID是怎么回事,特别做了此仿真,呵呵, 也可以说是<如何让PID的值转换成PWM的占空比>!

本人之前对PID一点都不懂,此贴主要是和大家分享学习经验!呵呵, 菜鸟贴, 不对的地方请大家拍砖!

此仿真采用的是PIC单片机, 由P1A引脚输出PWM,经过RC滤波后输出电压,AN0  ADC采样


先贴图吧!
PID算法是用的AVR: AVR221: Discrete PID controller 中的源码
//VFER = 2.048v, 10位分辨率(1024),设定稳压电压是1.024v
atmel_1.PNG (29.39 KB, 下载次数: 1) 下载附件 2013-10-26 10:56 上传

最后........
上源码:
ATMEL_ PWM_adc_pid_4.rar (2.24 MB, 下载次数: 348) 2013-10-26 10:58 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
55条回答
skype
1楼-- · 2020-02-10 09:05
下面是两种常见算法的PID仿真图表:
#ifndef __PID_1_H
#define __PID_1_H

typedef struct PID
{   
        double  SetPoint;           //  设定目标 Desired Value   
       
        double  Proportion;         //  比例常数 Proportional Const   
        double  Integral;           //  积分常数 Integral Const   
        double  Derivative;         //  微分常数 Derivative Const   
       
        double  LastError;          //  Error[-1]   
        double  PrevError;          //  Error[-2]   
        double  SumError;           //  Sums of Errors   

}PID;   

extern void PIDInit(PID *pp);
extern double PIDCalc(PID *pp, double NextPoint);
#endif


#include "pid_1.h"
#include <string.h>

void PIDInit(PID *pp)
{   
    memset(pp, 0, sizeof(PID));   
}   

double PIDCalc(PID *pp, double NextPoint)//这里是位置式算法   
{   
    double  dError, Error;   
   
    Error = pp->SetPoint -  NextPoint;          // 偏差,   偏差=设定值-返回值
    pp->SumError += Error;                      // 积分项, 偏差和   
    dError = pp->LastError - pp->PrevError;     // 微分项  上一次误差-上上一次误差   
    pp->PrevError = pp->LastError;   
    pp->LastError = Error;   
    return (pp->Proportion * Error              // 比例项   
        +   pp->Integral * pp->SumError         // 积分项   
        +   pp->Derivative * dError             // 微分项   
    );   
}   

3.PNG (17.69 KB, 下载次数: 1)

下载附件

2013-10-26 11:30 上传



skylinyk
2楼-- · 2020-02-10 10:08
mark,学习看看,thanks
usm4glx
3楼-- · 2020-02-10 11:33
看了你的PID模拟DAC,现在自己也想做个。是这样的,我想通过单片机PWM去控制输出电压,恒定在一个值,比如输入14-19V,控制输出恒定在13V,通过单片机去读取输出电压。用你的方法可以实现吗。硬件的话就是采用简单的MOS管控制
rclong
4楼-- · 2020-02-10 13:59
 精彩回答 2  元偷偷看……
usm4glx
5楼-- · 2020-02-10 16:22
rclong 发表于 2013-11-13 21:46
增量式PID算法

以这个为关键词搜索就行了

o,只要理论上可以实现,方法我自己可以搞定的。反馈值就是采样输出电压,这样设定值与采样值比较,应该就可以实现了吧
475627406
6楼-- · 2020-02-10 19:29
好帖,很容易就看懂了

一周热门 更多>