HCU Study Note Part I – PWM
TC1728可以使用GPTA(General Purpose Timer Array)中的LTC(Local Timer Cell)进行PWM信号的输入检测和输出控制。
一.PWM输入信号检测
对于每一个PWM输入信号,每连续三个LTC组成一组,对该PWM信号进行检测,计算该信号的频率和占空比。
以Fan1_Speed_Fb连接的IN46脚(Pin Number:7)为例,通过输入管脚控制寄存器GPTA0_LIMCRL5=0xB79696B7,将IN46脚作为LTC_41和LTC_42的输入。
而LTC_40与上述两个Cell一起组成一组。LTC_40的输入被设定为系统时钟的一个分频(FPC4)。该输入时钟每出现一个上升沿则LTC40加1。同时,LTC40被设定为Reset Timer Mode,这样他会自动被LTC41捕捉到的上升沿事件清零(即LTC41捕捉到IN46脚的上升沿后,LTC40会自动清零)。
LTC41被设置成Capture Mode,上升沿捕捉,输入管脚为IN46脚。即当IN46脚出现一个上升沿后,他会自动将LTC40的计数值拷贝到LTC41的计数器中,并清零LTC40计数器。
LTC42被设置成Capture Mode,下降沿捕捉,输入管脚为IN46脚。即当IN46脚出现一个下降沿后,他会自动将LTC40的计数值拷贝到LTC42的计数器中。
综上,则对于IN46脚的PWM信号来说,只要LTC41和LTC42的捕捉事件都发生过,就可计算IN46脚的PWM信号的频率和占空比。假设LTC40的输入时钟频率为f,则1秒内LTC40可以计数f次。LTC41的计数器值为a,LTC42的计数器值为b。则:
IN46脚信号的周期为a/f,频率为f/a.
IN46脚的占空比为b/a.
为了实现上述功能,寄存器的设置如下:
1. LTC Control寄存器:
0x00001C13, //LTCCTR40
0x00000410, //LTCCTR41
0x00000420, //LTCCTR42
即设置LTC40为Reset Timer模式,LTC41和LTC42分别为上升沿捕捉和下降沿捕捉模式。
2. LTC 输入寄存器:
0xB79696B7 // LIMCRL5
即将LTC40的输入选为FPC4,LTC41和LTC42的输入选为IN46脚。
3. LTC40的输入时钟设置为FPC4后,需要对FPC4做如下设置:
GPTA_INIT_FPC_CTR [4] = {{FPC4_CMP-1, RISE_EDGE_PRESCALAR, SIGNAL_INPUT_SINk4_GPTA_MODULE_CLOCK, GPTA_MODULE_CLOCK, DECREMENT_ON_GLITCH } }, //FPCCTR4
将FPC4设置成预分频模式(RISE_EDGE_PRESCALAR),输入信号和输入时钟都选为GPTA模块时钟,可以通过FPC4_CMP调整预分频数,以调整FPC4的时钟频率,目前HCU-2软件中FPC4的频率设置为125kHz.
二.PWM输出信号的实现
PWM的输出信号同样也是由连续的LTC实现的。对于每一个PWM输出信号,需要用到连续5个LTC。
以TLE8718_OUT07脚为例,该脚使用了LTC14~LTC18这连续5个计数器。其中,LTC14被设置成Reset Timer Mode,作为基础计时器,输入时钟同样也是CLK7(与PWM输入信号的基础计时器一致,目前软件中定义为125kHz)。LTC15和LTC16作为周期计数器。LTC17和LTC18作为占空比计数器。用两个计数器是为了有一个能作为缓存,避免信号还在输出的过程中修改该寄存器导致信号出现错误。LTC15是在LTC14的SO低电平时才使能比较功能,LTC16则是在LTC14的SO高电平时使能比较功能。LTC17是在LTC14的SO低电平时使能比较功能,LTC18是在LTC14的SO高电平时使能比较功能。即相当于有两组寄存器供使用,一组是LTC14,LTC15和LTC17,在LTC14的SO为低电平时起作用,LTC15是周期计数器,LTC17是占空比计数器,另外两个计数器(LTC16和LTC18)在此时不起作用,可由软件随意修改。若需要在LTC14的SO为低电平时修改占空比或周期,则修改LTC16和LTC18的值。同理,另一组是LTC14,LTC16和LTC18,当LTC14的SO为高电平时起作用。若需要在LTC14的SO为高电平时修改占空比或周期,则应修改LTC15和LTC17的值。每次LTC14被清零时,LTC14的SO输出电平被设置成自动翻转,自动使用另外一组寄存器。
当LTC15比较事件发生时(即计时器走过了一个设定的PWM周期),会自动将LTC14清零,进入下一个周期的比较。当占空比计数器LTC17比较事件发生时(即计时器走过了一个PWM周期中的高电平时期),则会自动将输出关键LTCOUT17置为0.
LTC18的输出线被设置为连接到GPTA的公用输出OG中,而TC1728的OG可以通过寄存器的设置自动连接到MSC模块,通过MSC模块发送给外部驱动芯片TLE8718,从而实现PWM信号的输出。
目前的设置通过MSC0_Data_Source.U = 0x606a,将MSC模块的如下输入线与GPTA的OG相连:
OG3.1=>ALTINL.1; OG3.3=>ALTINL.3; OG3.5=>ALTINL.5; OG3.6=>ALTINL.6
OG4.5=>ALTINL.13; OG4.6=>ALTINL.14.
再以ALTINL.3为例,每次在MSC输出时,他会自动影响MSC的数据寄存器,从而影响主芯片发送给TLE8718的data frame。如下图,ALTINL.3对应的是data frame中的bit 4(因bit 0是data selection bit),则ALTINL.3就会影响TLE8718_OUT7的状态,如果写1则该低端驱动关闭,呈现高阻态,如果写0则该开关打开,联通到地。
附注1:为了实现精确的PWM输出,当PWM输出口是通过MSC发送给驱动芯片控制的时候,一般需要将MSC模块设置为Data Repetition Mode,即一直自动不停的发送数据控制相应的输出口。此种模式下MSC模块不需要通过软件写入来触发命令的发送,可以实现快速的PWM波形控制。
要将PWM output改为TLE8718的OUT9-OUT13,则需要将MSC的data source修改为使用ALTINL.4 (对应TLE8718的OUT9),ALTINL.12(对应OUT10),ALTINL.5(对应OUT11),ALTINL.13(对应OUT12),ALTINL.6(对应OUT13),则应设置MSC0_Data_Source.U 为0x3070.使用到的GPTA的OG分别为OG3.4(TLE8718的OUT9),OG3.5(OUT11),OG3.6(OUT13),OG4.4(OUT10),OG4.5(OUT12).
只有注册用户才能在此添加评论。 如果您已经注册,请登录。 如果您还没有注册,请注册并登录。