我是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:
嗯嗯,那我明白了,谢谢你的耐心解答。