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

关于HVLLC示例程序里各种Q值的疑问

我是TI DSP的初学者,请教一下大家几个问题,这是在controlSuite的HVLLC工程下的例程,控制芯片是F2802x,有些地方我不是很明白

// Monitor ("Get") // Display as:

int16 Gui_Vout;    // Q9

int16 Gui_Ipri;    // Q9  

int16 Gui_V_SR1;   // Q9

int16 Gui_V_SR2;   // Q9

int16 Gui_I_SR1;   // Q8

int16 Gui_I_SR2;   // Q8

// Configure ("Set")

int16 Gui_Vset;    // Q9

这里的Gui_Vset 是Q9格式,假如我在watch窗口Gui_Vset变量下设置为12,也就是想让输出电压为12V,那么在程序里Gui_Vset是12*2^9吗?

这里为什么设置为Q9,还有其他的一些Q值是怎么确定的,比如这里的PID三个参数,为什么是Q10,这些问题挺困扰我的

Pgain = 200;       // Q10

Igain = 1;         // Q10

Dgain = 5;         // Q10

这里的一段程序

//Multiply with longs to get proper result then shift by 14 to turn it back into an int16

Vset = ((long)Gui_Vset*(long)iK_Vset) >> 5;

其中iK_Vset = 27618;   // 1.686 (Q14),Vset是PID控制的反馈值(CNTL_2P2Z_Ref1 = &Vset;)

Vset为什么要走这样处理?感觉都是跟Q值有很大关系

Martin Yu:

回复 Martin Yu:

关于IQ格式的使用,建议看下TI的IQMath的手册:

C:\ti\controlSUITE\libs\math\IQmath\v160\doc

我是TI DSP的初学者,请教一下大家几个问题,这是在controlSuite的HVLLC工程下的例程,控制芯片是F2802x,有些地方我不是很明白

// Monitor ("Get") // Display as:

int16 Gui_Vout;    // Q9

int16 Gui_Ipri;    // Q9  

int16 Gui_V_SR1;   // Q9

int16 Gui_V_SR2;   // Q9

int16 Gui_I_SR1;   // Q8

int16 Gui_I_SR2;   // Q8

// Configure ("Set")

int16 Gui_Vset;    // Q9

这里的Gui_Vset 是Q9格式,假如我在watch窗口Gui_Vset变量下设置为12,也就是想让输出电压为12V,那么在程序里Gui_Vset是12*2^9吗?

这里为什么设置为Q9,还有其他的一些Q值是怎么确定的,比如这里的PID三个参数,为什么是Q10,这些问题挺困扰我的

Pgain = 200;       // Q10

Igain = 1;         // Q10

Dgain = 5;         // Q10

这里的一段程序

//Multiply with longs to get proper result then shift by 14 to turn it back into an int16

Vset = ((long)Gui_Vset*(long)iK_Vset) >> 5;

其中iK_Vset = 27618;   // 1.686 (Q14),Vset是PID控制的反馈值(CNTL_2P2Z_Ref1 = &Vset;)

Vset为什么要走这样处理?感觉都是跟Q值有很大关系

hitaowei:

回复 Martin Yu:

嗯,谢谢你,我还有些疑问,controlSUITE的powerSUITE下有个Digital Power BoosterPack工程,分为了Buck_VMC_F28069M和Buck_VMC_F28377S两个版本,这两个版本功能是一样的。28069这个的控制循环中断处理(PID/2P2Z)用汇编写的,小数用了Q格式,而28377S的控制循环中断处理(PID/2P2Z)用的C语言写的,小数是直接用浮点形式的。我有些困惑的是28069也是浮点DSP,为什么不像28377那样小数直接也是浮点数形式处理呢?

另外在Buck_VMC_F2837xS这个工程里:

// Configure PWM for 200Khz (default) switching Frequency

// Period Count= 100Mhz/200Khz = 500

PWM_1ch_UpCntDB_ActivHIC_CNF(BUCK_PWM_NO, BUCK_PWM_PERIOD,1,0);   // Master mode

这个用的是F28377S芯片,主频是200MHz,配置时却是按照100MHz算的(#define CPU_SYS_CLOCK 100000    #define BUCK_PWM_SWITCHING_FREQUENCY 200),感觉这里有点问题,还有其他一些例程里面注释和程序对不上的地方也有。但是这些是TI官方程序,所以不太确定。

我是TI DSP的初学者,请教一下大家几个问题,这是在controlSuite的HVLLC工程下的例程,控制芯片是F2802x,有些地方我不是很明白

// Monitor ("Get") // Display as:

int16 Gui_Vout;    // Q9

int16 Gui_Ipri;    // Q9  

int16 Gui_V_SR1;   // Q9

int16 Gui_V_SR2;   // Q9

int16 Gui_I_SR1;   // Q8

int16 Gui_I_SR2;   // Q8

// Configure ("Set")

int16 Gui_Vset;    // Q9

这里的Gui_Vset 是Q9格式,假如我在watch窗口Gui_Vset变量下设置为12,也就是想让输出电压为12V,那么在程序里Gui_Vset是12*2^9吗?

这里为什么设置为Q9,还有其他的一些Q值是怎么确定的,比如这里的PID三个参数,为什么是Q10,这些问题挺困扰我的

Pgain = 200;       // Q10

Igain = 1;         // Q10

Dgain = 5;         // Q10

这里的一段程序

//Multiply with longs to get proper result then shift by 14 to turn it back into an int16

Vset = ((long)Gui_Vset*(long)iK_Vset) >> 5;

其中iK_Vset = 27618;   // 1.686 (Q14),Vset是PID控制的反馈值(CNTL_2P2Z_Ref1 = &Vset;)

Vset为什么要走这样处理?感觉都是跟Q值有很大关系

hitaowei:

回复 Martin Yu:

Martin你好,能不能继续回答下帖子下面的问题呢,谢谢了

我是TI DSP的初学者,请教一下大家几个问题,这是在controlSuite的HVLLC工程下的例程,控制芯片是F2802x,有些地方我不是很明白

// Monitor ("Get") // Display as:

int16 Gui_Vout;    // Q9

int16 Gui_Ipri;    // Q9  

int16 Gui_V_SR1;   // Q9

int16 Gui_V_SR2;   // Q9

int16 Gui_I_SR1;   // Q8

int16 Gui_I_SR2;   // Q8

// Configure ("Set")

int16 Gui_Vset;    // Q9

这里的Gui_Vset 是Q9格式,假如我在watch窗口Gui_Vset变量下设置为12,也就是想让输出电压为12V,那么在程序里Gui_Vset是12*2^9吗?

这里为什么设置为Q9,还有其他的一些Q值是怎么确定的,比如这里的PID三个参数,为什么是Q10,这些问题挺困扰我的

Pgain = 200;       // Q10

Igain = 1;         // Q10

Dgain = 5;         // Q10

这里的一段程序

//Multiply with longs to get proper result then shift by 14 to turn it back into an int16

Vset = ((long)Gui_Vset*(long)iK_Vset) >> 5;

其中iK_Vset = 27618;   // 1.686 (Q14),Vset是PID控制的反馈值(CNTL_2P2Z_Ref1 = &Vset;)

Vset为什么要走这样处理?感觉都是跟Q值有很大关系

Martin Yu:

回复 hitaowei:

Hitaowei,

第二个问题:

看了程序,系统时钟是配置成200MHz, 而PWM模块的时钟按照默认配置的,是系统时钟的一半100MHz, 这个部分是因为F28377采用的type4的PWM,时钟不是直接采用系统时钟的,有预分频处理:

Note: The Type 4 EPWM clocking varies from previous EPWM types. Prior to the Type 4 EPWM, thetime-base submodule was clocked directly by the system clock (SYSCLKOUT). On this version of theePWM, there is a divider (EPWMCLKDIV) of the system clock which defaults to EPWMCLK =SYSCLKOUT / 2

我是TI DSP的初学者,请教一下大家几个问题,这是在controlSuite的HVLLC工程下的例程,控制芯片是F2802x,有些地方我不是很明白

// Monitor ("Get") // Display as:

int16 Gui_Vout;    // Q9

int16 Gui_Ipri;    // Q9  

int16 Gui_V_SR1;   // Q9

int16 Gui_V_SR2;   // Q9

int16 Gui_I_SR1;   // Q8

int16 Gui_I_SR2;   // Q8

// Configure ("Set")

int16 Gui_Vset;    // Q9

这里的Gui_Vset 是Q9格式,假如我在watch窗口Gui_Vset变量下设置为12,也就是想让输出电压为12V,那么在程序里Gui_Vset是12*2^9吗?

这里为什么设置为Q9,还有其他的一些Q值是怎么确定的,比如这里的PID三个参数,为什么是Q10,这些问题挺困扰我的

Pgain = 200;       // Q10

Igain = 1;         // Q10

Dgain = 5;         // Q10

这里的一段程序

//Multiply with longs to get proper result then shift by 14 to turn it back into an int16

Vset = ((long)Gui_Vset*(long)iK_Vset) >> 5;

其中iK_Vset = 27618;   // 1.686 (Q14),Vset是PID控制的反馈值(CNTL_2P2Z_Ref1 = &Vset;)

Vset为什么要走这样处理?感觉都是跟Q值有很大关系

hitaowei:

回复 Martin Yu:

嗯嗯,那我明白了,谢谢你的耐心解答。

赞(0)
未经允许不得转载:TI中文支持网 » 关于HVLLC示例程序里各种Q值的疑问
分享到: 更多 (0)