paradoxfx

【原创】TI C2833x介绍---HRPWM(10)

0
阅读(6631)

上次我们用一个例子描述了怎么根据需要的占空比计算对应的CMPA和CMPAHR寄存器的值,并分析了它的精度。在计算过程中,我们假设MEP的分辨率(最小步长)是180ps,所以在系统时钟为100MHz的情况下,每个系统时钟周期可以调整的MEP个数 =10ns/180ps=55,定义为MEP预定标因子。然而在实际系统中,随着系统时钟频率的波动和DSP运行环境的变化(例如温度从十几度升级几十度),MEP预定标因子也将随之变化。当然,这种变化,例如温度的上升,与控制周期相比要缓慢不少,并且不会超过一定的范围,所以TI提供了一个MEP预定标因子的的优化函数(SFO)。这个函数由C语言代码的形式提供,它与HRPWM模块中内建的监视功能共同作用,实现MEP预定标因子的后台调整,从而保证我们的HRPWM的精度。

SFO相关的头文件、源程序和库文件在TI网站上直接搜索是找不到,它被包含在了C2833x/C2823x C/C++ 头文件和外设示例包中,可以在http://www.ti.com.cn/tool/cn/sprc530下载,也可以安装controlSuite,从而取得相应的文件。其中包含了两个例子,一个是使用4个通道的HRPWM输出,工程名是hrpwm_sfo,它引用了SFO.h,使用的库文件是SFO_TI_Build_fpu.lib。如果想使用28335全部的六个HRPWM通道,则需要参考hrpwm_sfo_v5的例子,它引用的SFO_V5.h ,使用的库文件是SFO_TI_Build_V5B_fpu.lib。后台校正MEP预定标因子的程序在这两个库文件之中,并没有将内容开放出来,不过相关的接口定义都解释的比较清楚,可以直接调用了。另外,这两个例子默认都是运行在启用FPU的状态下;如果一些特殊的场合不能使用FPU(有点浪费了),则需要在编译器选项去去掉FPU(删除--float_support=fpu32,把rts2800_fpu32.lib改为rts2800_ml.lib或者rts2800.lib),并把SFO相关的库文件更换为不带fpu的。