📄 pid.cpp
字号:
// pid.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "malloc.h"
#include <iostream>
#include "Usb7kC.h"
#include <math.h>
using namespace std;
#define PRECISION 0.001
typedef struct node
{
double e0; //理想信号值
double t; //采样周期
double k, ti, t_on_off, td; //比例系数, 积分系数,积分方法开关, 微分系数
double u0; //控制信号初值
}pid_set, *pid_node;
void pid_ctrl(pid_node, struct ZT_USBBOARD *, struct ZT_USBBOARD *);//用一个struct传递多个参数
void setDA(double, struct ZT_USBBOARD *); //自动数模转换, 内部的计算实现用模拟值
double getDA(struct ZT_USBBOARD *);
//double test_value=6000;
int main(int argc, _TCHAR* argv[])
{
int trial_times=3; //实验次数
struct ZT_USBBOARD a;
a.lIndex=0;
cout<<OpenUSB7kC(&a);
a.lCode =0;
a.nCh =1;
a.lData =2048;
//USB7333DA(&a);
double in=0, out=0;
pid_node ptr=(pid_node)malloc(sizeof(pid_set));
ptr->e0=0;
ptr->k=0.1;
ptr->t=1;
ptr->t_on_off=1;
ptr->td=0;
ptr->ti=5;
ptr->u0 =0;
for (int i=0;i<trial_times;i++)
{
cout<<"Input some input_Value: ";
cin>>in;
setDA(in, &a);
Sleep(3000);
out=getDA(&a);
cout<<endl<<"The out_put_Value is "<<out;
}
//pid_ctrl(ptr, &a ,&a);
//cout<<endl<<"Now value: "<<test_value;
return 0;
}
void pid_ctrl(pid_node x, struct ZT_USBBOARD *in, struct ZT_USBBOARD *out)
{
//环境设置
double e0=x->e0;
double t=x->t;
double k=x->k , ti=x->ti ,t_on_off=x->t_on_off, td=x->td ;
//设置增量系数
double d0,d1,d2;
double e1=0,e2=0,e3=0; //ei-2, ei-1, ei
double e_current=0;
double u_diff=0, u0=x->u0;
double u_diff_diff=0; //增量式控制算式的主要结果
double temp=PRECISION*e0;
d0=k* (1 + (t * t_on_off) /ti + td/t);
d1=-1* k *(1+ 2* td /t);
d2= k* td /t;
while(abs(e_current=getDA(in)-e0) >temp)
{
e3= e0-e_current; //与理想值差值
u_diff_diff=d0 *e3 + d1* e2 +d2* e1;//通过PID控制得出差量控制信号---是差量的差量,而不只是差量..
u_diff=u_diff+ u_diff_diff;
u0=u0+ u_diff;
setDA(u0, out);
e1=e2;//为下一次采样做准备
e2=e3;
Sleep(1000);
cout<<u0<<endl;
//------过一段时间
}
}
void setDA(double x, struct ZT_USBBOARD *out)
{
out->lData=x;
USB7333DA(out);
}
double getDA(struct ZT_USBBOARD *in)
{
//根据量程-5——5v,进行原码-模拟量转换
return in->lData;
//return USB7333AI(in);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -