MCAL PWM Module详解

Posted 嵌入式软件实战派

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MCAL PWM Module详解相关的知识,希望对你有一定的参考价值。

关注“嵌入式软件实战派”公众号,回复“AUTOSAR”可获得AUTOSAR实战教程。​

领导给一个小伙伴安排了个AUTOSAR配置任务:配置MCAL PWM调节灯光,小伙伴摸索了几个星期,都还没输出正常的波形,一度怀疑硬件有问题,甚至怀疑人生,后无奈求救于我。我也花了几天时间研究这玩意,坑还真多,走了不少弯路,于是就有了现在这个总结。

本文分十个章节来讲解:

0.关于PWM

1.RH850 MCU中的PWM

2.PWM的文件结构

3.PWM的时序调用

4.PWM的Port配置

5.PWM的基本属性配置

6.PWM的通道配置

7.PWM的Unit配置

8.PWM代码案例

9.总结

尽可能地把要点提炼出来讲解,让大家快速上手,少走弯路。

另外,对于特别问题点如Master/Slave通道,我分三个问题点来解答:

问题1:为什么会有Master和Slave这样的东西?

问题2:两个通道,如何设置占空比和周期?

问题3:Master和Slave如何选择?

希望对大家有帮助。

0.关于PWM

PWM即Pulse Width Modulation,通过IC的PWM硬件功能产生PWM信号。

PWM有几个特点参数:

  • 硬件通道(HW Channel)

  • 周期(Period)

  • 占空比(Duty Cycle)

  • 极性(Polarity,high/low)

  • 空闲状态(IDLE State, high/low)

  • 通道类型(Channel Class)

这些概念,做过嵌入式/MCU开发的软硬件工程师都应该很熟悉,这里就不累述了。

以控制LED灯为例,通过PWM输出可以控制其亮度,通常设置的参数有占空比和周期。原理其实很简单,快速的高低电平输出,会让LED一亮一灭,人眼是很难察觉出闪烁的,正因为这个特点,PWM大有用武之地。当然,除了LED控制,还有很多方面都可以用到PWM,例如LCD的VCOM电压,通过后级电路配合,PWM可以改变电压的。

下面通过一张图来简单说明下PWM的特点和AUTOSAR相关的函数使用。

 

 这个图简洁表达了PWM几个API的使用意图,可以参考下面章节的时序图了解更详细的调用情况。

 

1.RH850 MCU中的PWM

(如果你不关注RH850的PWM,可以跳过这一章节)

RH850的PWM有几种,可以用PWM-Diag模块,也可以用TAUx模块(TAUD0, TAUB0, TAUB1, TAUJ0 and TAUJ1)。

PWM-Diag比较简单,但是资源有限,能设置的频率很低。

以下以TAUD为例来详细讲解下。

先看看TAUD这个模块通道图

问题1:为什么会有Master和Slave这样的东西?

Master/Slave通道,即常说的主/从通道

主/从通道的控制触发信号

  • 主通道可以将控制触发信号输出到从通道。

  • 从通道可以使用来自主通道的控制触发信号,但不能将其自身的控制触发信号输出到较低的通道。

  • 主通道不能使用来自上层主通道的控制触发信号。

此功能通过使用一个主通道和多个从通道来生成多个PWM输出。它使能设置脉冲周期(频率)和TAUDTTOUTm的占空比。脉冲周期在主通道中设置。在从通道中设置占空比。

问题2:两个通道,如何设置占空比和周期?

这里就有个公式:

Pulse cycle = (TAUDnCDRm (master) + 1) × count clock cycle

Duty cycle [%] = (TAUDnCDRm (slave)/(TAUDnCDRm (master) + 1)) × 100

– Duty cycle = 0%

TAUDnCDRm (slave) = 0000H

– Duty cycle = 100%

TAUDnCDRm (slave) ≥ TAUDnCDRm (master) + 1

几个东西的关系,可对应下图作参考

如果想了解更多原理和细节,建议查看下RH850的SPEC中的TAUD内容,里面有很详细的描述。

2.PWM的文件结构

接着,看看AUTOSAR架构里面的PWM是怎么设计的。

以下是PWM的文件结构关系,大概了解下这方面内容就可以了。

 3.PWM的时序调用

这部分是PWM的API调用时序,在使用PWM API的时候要注意这方面的内容,比较重要。

(1)Pwm_Init的使用

这一般都是EcuM会调用这个初始化,前提是要在EcuM里面配置这个初始化。

(2)Pwm_SetDutyCycle的使用

这个函数很常用,因为用到PWM基本都有会改变PWM的占空比的。

(3)Pwm_SetPeriodAndDuty的使用

这个函数也很常用,跟前面的Pwm_SetDutyCycle类似,多了个Period的参数。

(4)Pwm_SetOutputToIdle的使用

看名字就很容易理解这个函数的意图了,需不需要使用要看具体应用case。

(5)Pwm_GetOutputState的使用

看名字也很容易理解这个函数的意图,根据具体需要使用。

(6)Pwm_EnableNotification的使用

使能回调函数,前提是你要配置定义好这个Notification函数,在上升沿下降沿时会被调用。

 以上都是一些理论或者概念上的东西,下面是重点,实战配置和使用PWM,PWM具体怎么配置出来,又是如何使用的?

 4.PWM的Port配置

配置PWM前,需要配置其对应的Port属性。

以下选P9-0和P9-1作为例子讲解,对应的PWM模块是TAUD0

先点开Basic Editor中的Port

将P9-0配置成Master,模式选复选功能TAUD0o0_AT2OUT这个

将P9-1配置成Slave,模式选复选功能TAUD0o2_AT2OUT这个

5.PWM的基本属性配置

在配置PWM通道之前,首先要注意以下三项内容的配置,这些是基本的参数,比较简单

第一项,PwmConfigurationOfOptApiServices

即要选上哪些你要用到的API服务,把用到的勾选上就可以了

第二项,PwmDemEventParameterRefs0

这是DEM模块用到关联到的Event,即

引用DemEventParameter元素的容器,如果发生相应的错误应使用 API Dem_ReportErrorStatus API 调用这些元素。EventId 取自引用的DemEventParameter的DemEventId值。容器中提供了标准化错误,并且可以通过供应商特定的错误参考进行扩展。

一般默认就好了,如果配置提示错误,那就得好好研究下这些Event引用,跟DEM模块有关,这里不详述了。

第三项,PwmGeneral0

这个是PWM驱动基本参数配置,看名称也大概看得明白

6.PWM的通道配置

以下是PWM通道相关的配置,配置内容不多,但是不怎么好理解,算是难点了。

将Channel8配置成Master,Channel9配置成Slave

注:如果按照我这个例子配置,应该是没啥错误的,很容易就会输出PWM波形。

如果你选的不是TAUD0,或者不是这两个通道,就要注意了,Master和Slave不是随便选的。

问题3:Master和Slave如何选择?(后面再解答)

(剩下的内容请关注“嵌入式软件实战派”公众号继续阅读)

 

以上是关于MCAL PWM Module详解的主要内容,如果未能解决你的问题,请参考以下文章

基于EB工具的TC3xx_MCAL配置开发06_PWM模块配置

late_initcall 替换 module_init

AUTOSAR MCAL ADC原理详解和配置应用

SAP HR module是啥?求详解

Nginx—— sub_module模块详解

angular自定义指令详解