TI中文支持网
TI专业的中文技术问题搜集分享网站

DCL库函数输出不正常的问题

用28335做数字控制器,调节器计算用到了controlSuite包含的DCL库中的DCL_runDF23()函数,但是输出结果与仿真和MATLAB计算结果不符,请用过的大神不吝赐教!

为添加和使用该库,代码中做了以下几处修改:

1.添加头文件:

#include "DCL.h"
#include "DCL_fdlog.h"

2.在main函数前,创建实体:

DF23 VolPR=DF23_DEFAULTS;

3.在main函数中,初始化实体:

VolPR.a1=-2.92f;
VolPR.a2=2.84f;
VolPR.a3=-0.92f;
VolPR.b0=5.77e-06f;
VolPR.b1=5.77e-06f;
VolPR.b2=-5.77e-06f;
VolPR.b3=-5.77e-06f;

4.在调用频次为150kHz的AD中断服务函数中调用实体:

SinVal=VP*sin(Kn*xn);
xn++;
if (xn==ModRatio) {xn=0.0f;}
Uc=DCL_runDF23(&VolPR,SinVal);
DCL_writeLog(&rBuf,Uc);
DCL_writeLog(&rBuf1,SinVal); 

以简单验证此函数的输出。

其中,Kn=2*pi/3000,ModRatio=3000,即产生一个幅值为85,频率为50Hz,采样率为150kHz的正弦信号,直接给VolPR调节器,观察输出信号。用DCL_fdlog库记录输出数据Uc,并用CCS的graph功能画出波形:

其中,上图为调节器输出Uc,下图为调节器输入SinVal。

用PSIM仿真,搭建的原理图如下:

仿真波形如下:

为确保准确,又在MATLAB中利用上述VolPR调节器对应的时域离散表达式算出时域离散数列,画出波形如下:

可见,PSIM与MATLAB结果一致。

那么,DCL库计算错在哪了呢?

Shaojie Song:

啊啊啊,找了一天,终于发现原因了!float数赋值问题,本来的代码里写得赋值为:

VolPR.a1=-2.92f;VolPR.a2=2.84f;VolPR.a3=-0.92f;VolPR.b0=5.77e-06f;VolPR.b1=5.77e-06f;VolPR.b2=-5.77e-06f;VolPR.b3=-5.77e-06f

实际上用CCS Expressions看到的是:

就是这么点差别,把上图的参数用MATLAB画出的波形后,与楼上的DCL库函数计算的波形一致了:

好亏啊,所以问题变成了float精度的这个问题怎么解决啊,有没有大神在呀?

赞(0)
未经允许不得转载:TI中文支持网 » DCL库函数输出不正常的问题
分享到: 更多 (0)