Part Number:TMS320F28035Other Parts Discussed in Thread:CONTROLSUITE, C2000WARE
你好,我目前將Bi-Directional BuckBoost Converter的範例程式燒錄到035的開發板上,
例程路徑 : C:\ti\controlSUITE\development_kits\TIDM_BUCKBOOST_BIDIR\v1_00_00_00\BuckBoostBiDir_F2803x
再以跳線的方式將ADC和PWM訊號連接到我的BuckBoost板子的腳位上,
我在輸入電壓40V,Gui_VoutSet設置30V的情況下執行程式,輸出電壓Gui_Vout都是維持在2.8V,
我將Gui_VoutSet設置提高到40V、50V、60V等情況,結果發現DUTY一直維持在0.65,DutyBuck維持在1,DutyBoost維持在0.31不會改變,而輸出電壓依舊是2.8V,
Gui_Vpv和Gui_Vout偵測到的值都和量測的結果差不多,照理說我改變Gui_VoutSet,Duty會跟著改變,而輸出會調整到和Gui_VoutSet一樣的電壓值,
想請問Duty都不會改變這樣的請況是甚麼問題?
BuckBoost板子是依照此例程的電路設計,零件數值也是,
CCS版本12.1.0
Katherine Wang:
已为您联系TI资深工程师,一旦得到回复会立刻回复给您
,
Katherine Wang:
您是否正在运行 OPEN_LOOP = 0 的代码?如果 OPEN_LOOP=1,则补偿器将被禁用,您需要直接控制占空比。
,
Andy:
Katherine 你好,
我運行在OPEN_LOOP = 0的代碼,想請問一下此例程有預設的Duty的最大值和溫度保護嗎?
3p3z在Duty的計算上是根據Gui_VoutSet設定的值還是根據Gui_Vout偵測到的值呢?
我目前嘗試在輸出給予20V的電壓,並將Gui_VoutSet設定為30V,Duty依然沒有改變
,
Katherine Wang:
已为您询问TI资深工程师,稍后给您回复
,
Andy:
在main.c 1124行中有看到過電壓的保護
請問_IQ24(0.8)在十進制中表示為多少呢?
也就是當VIN和VOUT大於多少電壓時會有保護,
想知道_IQ如何是如何轉換為十進制的值
在IQmathLib.h中有設定_IQ24的運算,當_IQ24(0.8)時 = 0.8 * 16777216 = 13421772.8 是正確的嗎?
,
Katherine Wang:
看起来代码确实将 3p3z DCL 函数的最大输出值设置为 0.65。这可以在 main.c 文件的第 1021 和 1031 行中看到。
从项目随附的 Gain_Worksheet 来看,最大duty似乎并未超过 0.55。
此外,DCL 库的用户指南位于:
C:\ti\controlSUITE\libs\app_libs\digital_power\f2802x_v3.5\Doc
,
Andy:
了解,謝謝,
關於上述過電壓保護的_IQ24值再麻煩詢問一下,
還有一個問題是關於輸出電壓的設置,當我Gui_VoutSet起始值設太高(大於15V)時,程式是不會動作的,如果剛開始設15V再慢慢5V的往上增加是可以提高輸出電壓,如果一次提升10V輸出就會瞬間回到0,而且越靠近duty的上限時,一次甚至只能提高1V的輸出,請問這樣的情況是甚麼問題呢?
,
Katherine Wang:
已为您在E2E英文论坛询问工程师,稍后给您回复,您也可以访问e2e.ti.com/…/tms320f28035-buckboostdir_f2803x关注最新进展
,
Katherine Wang:
Andy 说:_IQ24(0.8)在十進制中表示為多少呢
这仍然是 0.8。 IQ 数学库仅以定点格式表示十进制值,以便 CPU 能够进行浮点计算。 IQnn中的nn只是指用来表示十进制数的二进制位数。如果您感兴趣,请在此处了解更多信息:
C:\ti\c2000\C2000Ware_4_03_00_00\libraries\math\IQmath\c28\docs\IQmath_Quickstart.pdf
Andy 说:也就是當VIN和VOUT大於多少電壓時會有保護,
代码的注释可以写得更好一些(顺便说一句,代码不是我写的),但我相信 Vout_Read 最大值可以解释为 0.8 * VOUT_MAX_SENSE,定义为 110.22V。这意味着如果电压超过 88V,代码将关闭 PWM。硬件(为 ADC 测量 VOUT 供电的电阻分压器)可能的设计是,当 110.22V 施加到 VOUT 时,12 位 ADC 将输出最大代码 4096。
从您的原始屏幕截图中可以看到进一步的证据。当您设置 Gui_VoutSet = 30 时,Vout_Ref 设置为 30/110..22 = ~0.2721。
,
Katherine Wang:
我相信正在发生的事情是,比如您要求软件从 0 变为 15V时,补偿器(下图中的 CNTL_3P3Z)过度补偿以使 VOUT 尽快达到 15V。这可能意味着,暂时将占空比设置为高于达到 15V 所需的值。可能是瞬时过度补偿触发了电压过保护或软件中包含的其他一些保护。
您实际上可以在代码中实现某种类型的软启动。您需要在计算 Gui_VoutSet-Gui_Vout 的软件中添加一些检查并将差异限制为您指定的某个增量值,即 1V。然后您可以以 1V 的增量继续提高输出电压。您可以在一个较慢的后台循环中运行它,也许是 A1,其中 Gui_VoutSet 被转换为 Vout_Ref_DC。
//================================================================================= // A - TASKS //================================================================================= //-------------------------------------------------------- void A1(void)//-------------------------------------------------------- {// state ==1Vout_Ref_DC=(long)(_IQ20mpy(Gui_VoutSet,VOUT_SENSE_MAX_INV))<<4;这是我们在其他项目中如何进行软启动的示例。
slew = BUCK_vOutTarget_pu - BUCK_vOutSet_pu;if(slew > BUCK_VOUT_SLEW_MAX_PU) {BUCK_vOutSlewed_pu += BUCK_VOUT_SLEW_MAX_PU; } else if(slew < (0 - BUCK_VOUT_SLEW_MAX_PU)) {BUCK_vOutSlewed_pu -= BUCK_VOUT_SLEW_MAX_PU; } else {BUCK_vOutSlewed_pu = BUCK_vOutTarget_pu; }
,
Andy:
你好,我有在A1 下加入軟啟動了,Vout_slew_max設為1.0,但是發現VoutSet起始大於15V就不動作的問題依然沒有解決,是哪一部份編程需要修改嗎?
,
Katherine Wang:
已将您的疑问转达至E2E英文论坛工程师,一旦得到回复会立刻回复给您
,
Katherine Wang:
您的代码存在一些问题。
Vout_slew_max 需要转换为类型 (_iq20),您可以这样做:
#define Vout_slew_max _IQ20(1.0)
Gui_Vout 被定义为一个 _iq16 值,因此您不能只从 Gui_VoutSet(定义为一个 _iq20 值)中减去它。我相信您可以将 Gui_Vout << 4 转换为 _iq20。
slew = Gui_VoutSet – (Gui_Vout << 4);
最后,VoutSlewed_pu 将替换第 933 行中的 Gui_VoutSet。否则第 914 至 930 行无效。
Vout_Ref_DC=(long)(_IQ20mpy(VoutSlewed_pu,VOUT_SENSE_MAX_INV))<<4;