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.

TMDSILPFCKIT: TMS320F28035: ILPFC relatioship between VbusVcmd and load

Part Number: TMDSILPFCKIT


Hi, for ILPFC kit, the code for load and VbusVcmd is shown below:

...

//if (VrectRMS > 8204017)//Input greater than 200V
			if(_IQ16mpy((VrectRMS >> 8), _IQ16(VIN_MAX_SENSE)) >_IQ16(200))
			{
				
				if(VbusVcmd > _IQ24(0.42))//Load higher than 50%
				{					
			    	CNTL_2P2Z_CoefStruct1.b2   =_IQ26(CNTL_3p3z_B2_4);  // B2
    				CNTL_2P2Z_CoefStruct1.b1   =_IQ26(CNTL_3p3z_B1_4);  // B1
    				CNTL_2P2Z_CoefStruct1.b0   =_IQ26(CNTL_3p3z_B0_4);  // B0

					CNTL_2P2Z_CoefStruct1.a2   =_IQ26(CNTL_3p3z_A2_4);  // A2 = 0
    				CNTL_2P2Z_CoefStruct1.a1   =_IQ26(CNTL_3p3z_A1_4);   // A1 = 1
				}
				
				if((VbusVcmd <= _IQ24(0.42))&&(VbusVcmd > _IQ24(0.35)))//Load higher than % and less than %
				{
			    	CNTL_2P2Z_CoefStruct1.b2   =_IQ26(CNTL_3p3z_B2_5);   // B2
    				CNTL_2P2Z_CoefStruct1.b1   =_IQ26(CNTL_3p3z_B1_5);//  B1
    				CNTL_2P2Z_CoefStruct1.b0   =_IQ26(CNTL_3p3z_B0_5);   // B0
    		
					CNTL_2P2Z_CoefStruct1.a2   =_IQ26(CNTL_3p3z_A2_5); //  A2 = 0
    				CNTL_2P2Z_CoefStruct1.a1   =_IQ26(CNTL_3p3z_A1_5);  //  A1 = 1
				}
				
				if((VbusVcmd <= _IQ24(0.35))&&(VbusVcmd > _IQ24(0.22)))
				{
			    	CNTL_2P2Z_CoefStruct1.b2   =_IQ26(CNTL_3p3z_B2_6);     // B2
    				CNTL_2P2Z_CoefStruct1.b1   =_IQ26(CNTL_3p3z_B1_6);//  B1
    				CNTL_2P2Z_CoefStruct1.b0   =_IQ26(CNTL_3p3z_B0_6);  //  B0
    		
					CNTL_2P2Z_CoefStruct1.a2   =_IQ26(CNTL_3p3z_A2_6); //  A2 = 0
    				CNTL_2P2Z_CoefStruct1.a1   =_IQ26(CNTL_3p3z_A1_6);  //  A1 = 1
				}
				
				if((VbusVcmd <= _IQ24(0.22))&&(VbusVcmd > _IQ24(0.1)))//Load 20% to 10%
				{
				
			    	CNTL_2P2Z_CoefStruct1.b2   =_IQ26(CNTL_3p3z_B2_7);     // B2
    				CNTL_2P2Z_CoefStruct1.b1   =_IQ26(CNTL_3p3z_B1_7); // B1
    				CNTL_2P2Z_CoefStruct1.b0   =_IQ26(CNTL_3p3z_B0_7);   // B0
    		
					CNTL_2P2Z_CoefStruct1.a2   =_IQ26(CNTL_3p3z_A2_7);  // A2 = 0
    				CNTL_2P2Z_CoefStruct1.a1   =_IQ26(CNTL_3p3z_A1_7);   // A1 = 1
				}
				
				if(VbusVcmd <= _IQ24(0.1))//Load less than 10%
				{
			    	CNTL_2P2Z_CoefStruct1.b2   =_IQ26(CNTL_3p3z_B2_8);     // B2
    				CNTL_2P2Z_CoefStruct1.b1   =_IQ26(CNTL_3p3z_B1_8); // B1
    				CNTL_2P2Z_CoefStruct1.b0   =_IQ26(CNTL_3p3z_B0_8);   // B0

					CNTL_2P2Z_CoefStruct1.a2   =_IQ26(CNTL_3p3z_A2_8);  // A2 = 0
    				CNTL_2P2Z_CoefStruct1.a1   =_IQ26(CNTL_3p3z_A1_8);   // A1 = 1
				}
			}

....

My doubt is:

Is there a relationship between VbusVcmd and Load? If yes, how can I calculate this (formula)?

My intention is to adjust the 10% control by 10%.

I appreciate any help.

  • Hi Leonardo,

    Yes, the VbusVcmd is the variable to calculate and control the current command. The PFC_ICMD block generates an output command profile that is half-sinusoidal, with the amplitude dependent on the output of the voltage controller. The output is then connected to the current controller to produce the required inductor current.

    Since VbusVcmd is used only for open voltage loop closed current loop, usually you should not change the output resistor dramatically causing the voltage jump. If your load resistor is set in each of your test and you want to adjust 10% load change, you can adjust the VbusVcmd to be 110% or 90% of the original value which will give you a load change relatively close to 10%. However these two variables are not exactly linear in a large scale because of some scale factors based on the input voltage inside the block. If you want exactly 10% change, you might need to look at the code inside PFC_ICMD and change the VbusVcmd based on the factor I mentioned before.

    Hope this helps.

    Regards,
    Chen
  • Thanks for the quick return.
    I did a load test circuit that will range from 10% to 10%. I don't know if this is valide, but my intention is to use the open voltage loop closed current loop to measure the coefficients (A0, B0, etc).
    For example, I initially choose the load at 10% and set the VbusVcmd to the Vbus value. When I reach this goal, I save the value of VbusVcmd and use SFRA to save the coefficients of my equation (A0, A1, B0, B1 and B2).
    Then I do the same steps to 20% and so on until I reach 100%. In this way, I would have ranges of 10% performance in 10% of the 2p2z control according to the load. That would give a pretty efficient control.
    I liked your tip and I hope you do not need to check inside the PFC_ICMD code. I'll do the tests and find out.
    Thanks a lot!!
  • Hi Leonardo,

    Yes, your test procedure is good and will give you an adaptive control for different load conditions. Thanks for your question!

    Best regards,
    Chen