STM32G474中Triggered-half模式实现交错并联电源设计

需积分: 5 0 下载量 40 浏览量 更新于2024-08-03 收藏 368KB PDF 举报
"本文档是关于使用STM32G474微控制器的高精度定时器(HRTIMER)实现Triggered-half模式的应用笔记。主要讨论如何利用该模式解决变频控制下两相交错并联电源设计的同步问题。" 在STM32G474微控制器中,高精度定时器(HRTIMER)作为一个重要的外设,尤其适用于数字电源应用。这个外设是HRTIMER的V2版本,新增了Triggered-half模式,这为在采样变频控制策略下的两相交错并联电源提供了更简洁的同步方案。 Triggered-half模式主要解决的问题是在变频控制下,由于PWM周期由外部事件(如电感电流的过零点)而非软件直接控制,导致的多相同步难题。在传统的定频控制中,可以通过定时器比较事件轻松实现相位偏移,但在变频控制中,由于PWM周期的不确定性,同步变得复杂。 Triggered-half模式的工作原理是:在主变换器中,通过检测电感电流ILM的过零点(ZCD)来确定PWM周期,并将周期的一半写入高精度定时器的比较寄存器2 (CMP2)。从变换器的定时器则根据CMP2的比较事件进行同步,生成与主变换器相位相差180度的PWM波形。STM32G474的高精度定时器捕获单元可以捕捉到这些实时的过零点事件,确保了同步的准确性。 然而,使用Triggered-half模式时需要注意一些限制。由于捕获单元的最高精度为170MHz,因此 PWM 的频率不应超过这个值。此外,CMP2寄存器在这个模式下被专用,不能与其他特殊功能(如双通道DAC触发、交错模式和平衡空闲模式)同时使用。 在实际应用中,STM32G474提供了两相交错并联PFC的Triggered-half模式应用示例。这个示例展示了如何在硬件和软件层面配置HRTIMER,以实现高效、精确的电源同步,从而优化系统性能和效率。 Triggered-half模式是STM32G474在数字电源控制领域的一个创新特性,它有效地解决了变频控制下的多相同步问题,为设计人员提供了一种新的工具来应对复杂的电源系统设计挑战。在使用该模式时,需要充分理解其工作原理并注意相关限制,以确保最佳的系统性能。

FormInfo class FormInfo <<partial>> [ +Formlnfo0- button1 Click(sender:obiect, e:EventArgs) : void+ SetText(run:double, walk:double) : void Form <-- FormInfo Common class Common!+ static) map left lon : double +{static) map top lat : double +{static map right lon : double +{static' map bottom lat : double class Station { +longitute :double <<get>> <<set> >+latitude :double <<get> > <<set>> + staionname :string <<get>> <<set>> + stationlD :int <<get> > <<set>> + address :string <<get>> <<set> > + totalDocks :int <<get> > <<set> > + docksln :int <<get> > < <set> > + status : string <<get> > < <set> > Station-->"screenPoint"Point Form1 class Form1 <<partial>> !-imgH:int- imgW :int isStartSite : bool isEndSite : boolI startIndex :int- endIndex :int - isPlanRoute : bool = false- m distance : double = 0 +Form10 Form1 Shown(sender:obiect,e:EventArgs) : void panelRight SizeChanged(sender:obiect,e:EventArgs): void panelButtom SizeChanged(sender:object, e:EventArgs) : voidForm1 Paint(sender:object, e:PaintEventArgs) : void buttonlmport Click(sender:object, e:EventArgs) : void Import(fileName:string): void GPSToScreen(lon:double.lat:double): PointGetTitude(point:Point): doubel listStations SelectedlndexChanged(sender:obiect, e:EventArgs) : void panel2 Paint(sender:object, e:PaintEventArgs) : voidcheckAll Click(sender:obiect, e:EventArgs) : void comboBox1 SelectedndexChanged(sender:obiect.e:EventAras): voioDrawReqularPoly(x:float, y:float, radius:double, sideCount:int) : PointF panelMouse Paint(sender:obiect,e:PaintEventArgs) : void panelMouse MouseMove(sender:object, e:MouseEventArgs) : voidpanelMouse MouseClick(sender:object, e:MouseEventArgs) : voidbutton1 Click(sender:object, e:EventArgs) : void setRoute0:void - setWalkRoute() : void - comboBox1 TextChanged(sender:object, e:EventArgs) : void class"List1"<T>{ MapHelper class MapHelper!<<const>> EarthRadius : double = 6378.137Istatic' Rad(d:double) : double +Istatic' GetDistance(firstLatitude:double.firstLongitude:double, secondLatitude:doublesecondLongitude:double): double+Istatic1 GetPointDistance(firstPoint:string,secondPoint:string): double Form <-- Form1 Form1-->"allstation<Station>""List1"Form1-->"startPoint"Point Form1-->"endPoint"Point Form1-->"startList<PointFI>""List1" "routeList<PointFIl>""List1Form1-->Form1-->"endList<PointFIl>""List1"Form1-->"m formlnfo"FormInfo画类图

2023-07-09 上传