This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求教HVACI_Scalar问题



我现在在使用TI的HVACI_Scalar例程,现在有一些问题,求解答,谢谢。

1、原始程序是28035,我修改到了28069,编译没有出错,也没有warning。烧到28069上面之后,按照level 1进行操作,发现调制波不对,后来看VHZ_PROF_MACRO的变量结果,发现v.VfSlope的值设为IQ24格式后,特别小,后来添加了下面一条语句,才使得斜率变成2,V/f曲线正常。,

v.VfSlope = _IQdiv((v.VoltMax - v.VoltMin),(v.HighFreq - v.LowFreq)); \

v.VfSlope = v.VfSlope * 16777216.0; \

2、SVGENMF_MACRO中求正弦值的时候,其IQ24也特别小,调制波不是马鞍形,就定义了float量dy1和dy2,经过下面变化求得v.dy 、v.dx,在ccs中得到和pdf中一样的调制波形状,正负对称的。但是用示波器连接DAC出来的4个端口时候发现调制波不是正负对称的,而是全为正的波形,请问这是什么问题?

v.dy = _IQmpy(v.NewEntry,PI_THIRD); /* v.dy = sin(NewEntry) */ \
dy1 =((float)v.dy)/16777216; \
dy1 = sin(dy1); \
v.dy = (long)(dy1*16777216); \
v.dx = PI_THIRD-_IQmpy(v.NewEntry,PI_THIRD); /* v.dx = sin(60-NewEntry) */ \
dy2 =((float)v.dx)/16777216; \
dy2 = sin(dy2); \
v.dx = (long)(dy2*16777216);

3、按理说TI的例程应该没有问题,不用修改,但是运行中,为了得到调制波,我上面修改了两处?是因为我移植到28069的时候,缺少了某些文件么?

4、HVACI_Scalar-Settings.H中,设置电机参数和电压频率基准值。但是程序中V/f曲线的频率从0.2到0.5,电压从0.2到0.95.这些应该都是标幺值,它是如何和基准值参数对应到一起的?也就是说频率的标幺值通过那段程序对应到频率基准值?我几乎打开了所有的H和C文件,都找不到下面的这些参数怎么被运用的。

// Define the electrical motor parametes (1/4 hp Marathon Motor)
#define RS 0.827              // Stator resistance (ohm)
#define RR 3.67               // Rotor resistance (ohm)
#define LS 0.03                // Stator inductance (H)
#define LR 0.03               // Rotor inductance (H)
#define LM 0.26                // Magnatizing inductance (H)
#define POLES 4                // Number of poles

// Define the base quantites for PU system conversion
#define BASE_VOLTAGE 179                 // Base peak phase voltage (volt)
#define BASE_CURRENT 20                 // Base peak phase current (amp)
#define BASE_TORQUE                         // Base torque (N.m)
#define BASE_FLUX                               // Base flux linkage (volt.sec/rad)
#define BASE_FREQ 100                      // Base electrical frequency (Hz)
// Note that 0.5 pu (1800 rpm) is max for this motor
// Above 1800 rpm, field weakening is needed.
#endif

求大神们解答,谢谢。

  • 前三个问题,如果你用的是F28069,其实可以不用IQ数,来定标,直接用Float型,你现在的问题可能是项目中没有加入IQMATH.lib,如果加入的话,再看一下IQMATHLib.h里面的MATH_TYPE现在是IQ_MATH还是FLOAT_MATH,如果你要使用IQ数定标,就要改成IQ_MATH。

  • 有IQ-MATH,打开lib.h,里面是这样的。需要修改么
    #ifndef __IQMATHLIB_H_INCLUDED__
    #define __IQMATHLIB_H_INCLUDED__


    #define FLOAT_MATH 1
    #define IQ_MATH 0

    #ifndef MATH_TYPE
    #define MATH_TYPE IQ_MATH
    #endif

    //---------------------------------------------------------------------------
    // Select global Q value and scaling. The Q value is limited to the
    // following range for all functions:
    //
    // 30 <= GLOBAL_Q <= 1
    //
    #ifndef GLOBAL_Q
    #define GLOBAL_Q 24
    #endif

  • 有IQ-MATH,打开lib.h,里面是这样的。需要修改么
    #ifndef __IQMATHLIB_H_INCLUDED__
    #define __IQMATHLIB_H_INCLUDED__


    #define FLOAT_MATH 1
    #define IQ_MATH 0

    #ifndef MATH_TYPE
    #define MATH_TYPE IQ_MATH
    #endif

    //---------------------------------------------------------------------------
    // Select global Q value and scaling. The Q value is limited to the
    // following range for all functions:
    //
    // 30 <= GLOBAL_Q <= 1
    //
    #ifndef GLOBAL_Q
    #define GLOBAL_Q 24
    #endif

  • 你好,回复的帖子怎么还需要审核。

    我有IQmathlib.h, 里面设置的就是IQ math。

    那么第4个问题是怎么回事呢?像给定转速0.5,它通过什么去代表1800r啊

  • 第4个问题,我觉得是关键。

  • 那有加入IQmath.lib文件吗?

    0.5不是你给的,而是speed模块的输出,你可以参考项目文件中的doc文件夹下的userguide,在build level1中,你修改SpeedRef的值(0-1)就可以开环修改PWM的输出频率。

  • 这个我知道,通过修改speedref,可以得到v,通过v就可以计算出Ta,TB和Tc。修改speedref是0到1,说明这是标幺值,在settings里面有频率基准是120hz。 我想知道的是这个0到1的speed是通过什么代码对应到频率基准值120hz的?而不是对应到电压基准值。因为VF曲线中,U用的也是基准值0.2到0.95,它这个就得对应Ubase. 如果没有一个专门的代码,0.2的speedref和0.2的U岂不是混淆了?谢谢。

  • 这个我知道,通过修改speedref,可以得到v,通过v就可以计算出Ta,TB和Tc。修改speedref是0到1,说明这是标幺值,在settings里面有频率基准是120hz。 我想知道的是这个0到1的speed是通过什么代码对应到频率基准值120hz的?而不是对应到电压基准值。因为VF曲线中,U用的也是基准值0.2到0.95,它这个就得对应Ubase. 如果没有一个专门的代码,0.2的speedref和0.2的U岂不是混淆了?谢谢。

  •  请问,我用的是28335,是带有FPU的一款芯片,iqmath就没有什么意义了吗?是不是说我把MATH_TYPE改成FLOAT_MATH,其实这时候iqmath的那些函数本身就没什么用了,其实直接转化为浮点运算的?

  • #define FLOAT_MATH 1


    如果这一位是1,那后面的库就不会用IQMATH的定标了。