求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
AUTOSAR实战教程
1.AUTOSAR相关知识
1. 老板说项目要上AUTOSAR,我慌得一批
2. 我淡定地撸了一遍AUTOSAR的基本概念
3. AUTOSAR初学者最想搞懂的东西
2.AUTOSAR理论基础
AUTOSAR架构
1. AUTOSAR架构的故事(干货)
2. AUTOSAR架构之通信服务(干货)
3. 这次我通过Interface来贯穿整个AUTOSAR架构
AUTOSAR启动与初始化
1. 解析AUTOSAR Startup
2.AUTOSAR架构中的配置文件
3.SWC详解与配置实现
1.AUTOSAR Port原理概念详解
4.BSW原理和实战演练
1. AUTOSAR折磨,从新建工程开始
2. AUTOSAR的BswM模块详解
3. 图解AUTOSAR NVM模块
4. AUTOSAR架构的 Pdu Router
5. AUTOSAR中的vLinkGen可以干嘛
6. MCAL Wdg模块解析
7. MCAL PWM Module详解
8. AUTOSAR的Memory是如何设计的?
9. AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
10. AutoSAR,在多核汽车MCU中如何运行
11. AUTOSAR架构中的Configurator
12. AUTOSAR中的Fee
5.MCAL应用配置
1.ADC模块的配置
2.MCU模块的配置
3.PWM模块的配置
 
 
MCAL PWM Module详解
作者:Stephen Du
1776 次浏览
9次  

领导给一个小伙伴安排了个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不是随便选的。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1776 次浏览
9次