公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

学习笔记--之一 TC1728 PWM的使用

学习笔记--之一 TC1728 PWM的使用

jian1
Level 5
Level 5
10 solutions authored 5 solutions authored First solution authored

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.png

                                             

附注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).


0 点赞
4032 次查看
13 评论