英飞凌AURIX2G系列TC37x——MCAL配置之 PWM(超详细,吐血)

前言
上次写了Port跟Dio相关的内容,虽然有些配置项没那么清晰,但是最重要的其实是思路,这个模块能实现什么样的功能,有哪些接口,跟其他什么模块有关?今天我们来看看PWM的实现。

关联性

即在EB中,除了我们这次主要关注的PWM模块外,还有哪些模块是需要额外配置的?不配置就会出错的?
首先就是Port,PWM总是要通过pin脚输出的,pin脚的输入/输出,输出的复选类型总得配好了,这部分内容见上一篇:英飞凌AURIX2G系列TC37x——MCAL配置之 Port & Dio(Draft版本)
其次是时钟,时钟是来源于GTM?还是CCU6?(有的同学可能就要问了,为什么没有GPT?我目前的理解:EB里只支持这两个,不信你看这个模块的名字:Pwm_17_GTMCCU6),那相关联的这些时钟模块在哪里配置?接下来我们来揭晓——

PWM

General: 主要配一些API的使能,对应在MC-ISAR_TC3xx_UM_Pwm_17_GtmCcu6.pdf中也可查阅
LowPower/PowerStateSupport…后三个container暂且不论,按默认处理。

抓住主要矛盾才是最重要的,不要被不重要的信息挡住去路。

在这里插入图片描述
如果得到的需求period和duty都是需要可调的,那么可以勾上PwmSetPeriodAndDuty项,若只有duty可调,可以只勾选PwmSetDutyCycle,按需勾选。这两项在生成代码中体现在:
在这里插入图片描述
在这里插入图片描述
下面这部分配置项中,重要的是:PwmDutyShiftInTicks,这个选项决定着在调用上述两个函数时,duty这个参数设置的是绝对时钟tick,还是0%-100%的相对时钟tick。其他的我没怎么用到,就按默认配置来了。
在这里插入图片描述

——————**************************************—————

接下来,便是本篇的重头戏:PwmChannel,我们新建一个Channel:
在这里插入图片描述

  • ChannelId: 从0开始递增,没什么好说的

  • PwmAssignedHwUnit: 此处便到了指定时钟源的部分了,指定时钟源是GTM/CCU6

  • PwmDutycycleDefault: 默认占空比,此处设置为0,如果你的需求不是0,则要根据你的占空比算出tick数填进去

  • PwmIdleState:初始电平/默认电平/停止电平

  • PwmPeriodDefault:默认状态下周期tick数

    假设:fpwm = 100MHz,目标频率:fd = 20kHz,则目标period = fpwm/fd = 5000; 若目标频率:fd = 1khz, 则目标period = fpwm/fd = 100000,但由于当时钟源模块为TOM时,此配置项的值要小于0xFFFF,因此要将TOM输出的时钟分频后再计算

在这里插入图片描述 - PwmPolarity:
在这里插入图片描述
简易图示:
在这里插入图片描述

  • PwmShiftValue (0 -> 16777215):此项主要指定当在程序中想要修改duty时,不同的value对应的占空比;
    当General中PwmDutyShiftInTicks 配置为OFF时,0为0占空比,0X8000为100%占空比;
    当PwmDutyShiftInTicks 配置为ON时,0为0占空比,要根据配置项:PeriodDefault为100%占空比,从而算出duty对应的ticks

    在这里插入图片描述

此项配置Channel为哪种模式:
在这里插入图片描述

  • PWM_FIXED_PERIOD: 固定周期,仅占空比可调
  • PWM_FIXED_PERIOD_CENTER_ALIGNED:
    此通道引用一个固定周期的PWM通道,从而产生中央对称式PWM,仅占空比可调
  • PWM_FIXED_PERIOD_SHIFTED: 此通道引用一个固定周期的PWM通道,占空比线性变化,仅占空比可调
  • PWM_VARIABLE_PERIOD: 周期,占空比均可调。

当此PWMchannel的时钟源选择为GTM时,需要在channel中引用所用到的GTM通道,将两者map起来,CCU6同理。
在这里插入图片描述

————————————**************************————————————
下面介绍如何去配置PWM的时钟源
我在使用时采用的GTM的TOM通道,其实也不算我选的,需求里需要的引脚跟GTM-TOM通道是绑定的,因此也不是我想用什么就用什么(手动狗头)
假设,需求里所需要的引脚是:P32.6 输出周期为1khz,占空比默认为0的PWM。

  1. 根据datasheet,发现P32.6为GTM_TOUT141
    在这里插入图片描述

  2. 在TC3xx_Appendix_UM中查到TOUT141对应TOUTSEL17这个选择寄存器中SEL5
    在这里插入图片描述

  3. 索引到相应寄存器的位置,能看到P我们所要配置的pin脚对应TOM1的channel8在这里插入图片描述

  4. 目前为止, 我们已经知道了将要索引的是哪个TOM哪个channel,EB 里打开MCU的hardwareResourceAllocation,打开TOM1,channel8,将其分配给PWM
    在这里插入图片描述

  5. 那么这个TOM通道输出的时钟频率如何确定呢?怎么跟Port连接起来呢?我们打开Mcu/GtmGlobalConfig:
    在这里插入图片描述

  6. 先打开对应的TOM通道,将该通道选择为对应的pin脚
    在这里插入图片描述

  7. 接下来就是时钟,TOM的时钟源我们选择:CMU_FXCLK
    在这里插入图片描述8. 在CMU中,Global Clock Divider对应EB中GTMClockManagementConfig,此处不分频
    在这里插入图片描述
    在FixedClocksetting中选择CMU_GLOBAL_CLOCK_SEL0,FXCLK_SEL选择全局时钟为产生FIXED_CLK的源,而不是上图中CMU_CLKx; 而不同的FX_CLK对应的分频也是固定的。
    若fgtm = 100Mhz, 则FX_CLK0= fgtm/1 = 100Mhz, FXCLK1 = fgtm/16 = 6.25Mhz,由此类推,见图上
    在这里插入图片描述
    9.由于GTM模块,TOM,ATOM等都是属于一个cluster中的,因此我们来看cluster的选择:
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    10.在PWM模块索引GTM channel时,选择GTM的时钟源为FIXED_CLOCKx

    若fgtm = 100Mhz, 则FX_CLK0= fgtm/1 = 100Mhz, FXCLK1 = fgtm/16 = 6.25Mhz 若目标频率为1khz, 则period = fTOM/fdst = 6.25Mhz/1khz = 6250
    到此为止,所有需要配置的地方都已经完成了,只需要在程序中,调用:Pwm_17_GtmCcu6_SetDutyCycle即可。
    调用时要注意的就是,Duty要设置的值的范围,如果好好看这篇,就知道该注意哪里了哦。

  • 40
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,TC387 MCAL配置PWM的步骤如下: 1. 首先,需要初始化端口和PWM模块。通过调用Port_Init函数和Pwm_17_Gtm_Init函数来完成端口和PWM的初始化。 2. 在调度代码中,可以设置PWM的占空比和周期。通过设置PWM_00_9_DutyCycle和PWM_00_9_Perid来指定占空比和周期的数值。 3. 使用Pwm_17_Gtm_SetPeriodAndDuty函数来设置PWM的周期和占空比。通过传入Pwm_17_GtmConf_PwmChannel_PwmChannel_MCU_PWMOUT1_0作为通道参数,以及PWM_00_9_Perid和PWM_00_9_DutyCycleTicks作为周期和占空比的数值。 4. 配置触发ADC采集的PWM通道2。需要将ShiftValue配置为延迟的相位值,并将PwmReferenceChannel设置为PWM通道1。确保配置的时钟源相同,并选择相邻的GTM通道。关联通道的ChannelClass需要配置PWM_FIXED_PERIOD_SHIFTED,并选择GTM_TOM0_7作为PWM通道的源定时器。 5. 最后,进行ADC相关的配置。 综上所述,以上是TC387 MCAL配置PWM的步骤。 #### 引用[.reference_title] - *1* [基于EB工具的TC3xx_MCAL配置开发02_ICU模块配置](https://blog.csdn.net/initiallizer/article/details/129391852)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MCAL知识点(八):PWM驱动配置详解](https://blog.csdn.net/weixin_43580890/article/details/129830934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于EB工具的TC3xx_MCAL配置开发05_ADC模块硬件Pwm触发Demo配置](https://blog.csdn.net/initiallizer/article/details/129718915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值