本文作者:豆面

k60 pwm 互补输出 怎么控制

豆面 2025-02-14 02:39:45 2
k60 pwm 互补输出 怎么控制摘要: 要实现K60 PWM的互补输出控制,需要配置相关的寄存器并遵循一定的步骤,以下是详细的控制方法:1、基本概念PWM互补输出:指的是两个PWM信号,它们的电平变化是相反的,当一个为高...

要实现K60 PWM的互补输出控制,需要配置相关的寄存器并遵循一定的步骤,以下是详细的控制方法:

k60 pwm 互补输出 怎么控制

1、基本概念

PWM互补输出:指的是两个PWM信号,它们的电平变化是相反的,当一个为高电平时,另一个为低电平,反之亦然,这种输出方式常用于驱动H桥等电路,以实现对电机等设备的正反转控制。

相关寄存器:主要涉及到FTM(FlexTimer Module)模块的多个寄存器,如FTMx_SC(状态和控制寄存器)、FTMx_CnV(通道值寄存器)、FTMx_COMBINE(组合寄存器)等。

2、配置步骤

使能时钟:首先需要使能FTM模块的时钟,通过设置SIM_SCGC5或SIM_SCGC6寄存器的相关位来开启相应FTM模块的时钟。

引脚配置:将用于PWM输出的引脚配置为复用功能,通常设置为ALT3或ALT4模式,具体根据实际的引脚功能和需求进行选择,使用PORTA_PCR12和PORTA_PCR9分别配置为对应的ALT功能。

初始化FTM模块:设置FTMx_SC寄存器,选择合适的时钟源、预分频系数以及工作模式等,一般将FTMx_SC[FTM_SC_PS]设置为合适的分频值,以确定PWM的频率;将FTMx_SC[FTM_SC_CLKS]设置为1,选择系统时钟作为FTM的时钟源。

设置PWM参数:对于每个PWM通道,需要配置其寄存器以确定PWM的周期和占空比,通过设置FTMx_CnSC寄存器的FTM_CnSC_MSB和FTM_CnSC_ELSA位来选择PWM的对齐方式和是否启用死区插入等功能;设置FTMx_CnV寄存器来确定PWM的初始占空比。

k60 pwm 互补输出 怎么控制

配置互补输出:在FTMx_COMBINE寄存器中,设置相应的位来使能互补输出功能,并选择需要关联的两个PWM通道,将FTMx_COMBINE[FTM_COMBINE_SYNCEN0_MASK]和FTMx_COMBINE[FTM_COMBINE_COMP0_MASK]以及FTMx_COMBINE[FTM_COMBINE_COMBINE0_MASK]等位进行适当的设置。

启动输出:设置FTMx_OUTMASK寄存器,清除对应通道的掩码位,使能PWM信号的输出。

3、示例代码

以下是一个简化的示例代码,用于初始化FTM1模块的PWM互补输出:

头文件包含#include "fsl_ftm.h"

初始化函数

void ftm1PwmInit(uint32_t ulFreq)

{

k60 pwm 互补输出 怎么控制

SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;

PORTA_PCR12 = PORT_PCR_MUX(3) | PORT_PCR_DSE_MASK;

PORTA_PCR9 = PORT_PCR_MUX(3) | PORT_PCR_DSE_MASK;

FTM1_SC |= FTM_SC_PS(2) | FTM_SC_CLKS(1);

SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;

FTM1_C0SC |= FTM_CnSC_ELSB_MASK;

FTM1_C0SC &= ~FTM_CnSC_ELSA_MASK;

FTM1_C0SC |= FTM_CnSC_MSB_MASK;

FTM1_C1SC |= FTM_CnSC_ELSB_MASK;

FTM1_C1SC &= ~FTM_CnSC_ELSA_MASK;

FTM1_C1SC |= FTM_CnSC_MSB_MASK;

FTM1_MODE |= FTM_MODE_WPDIS_MASK;

FTM1_MODE |= 1;

FTM1_COMBINE |= FTM_COMBINE_DTEN0_MASK;

FTM1_DEADTIME |= FTM_DEADTIME_DTPS(1) | FTM_DEADTIME_DTVAL(12);

FTM1_COMBINE |= FTM_COMBINE_SYNCEN0_MASK | FTM_COMBINE_COMP0_MASK | FTM_COMBINE_COMBINE0_MASK;

FTM1_SYNC |= FTM_SYNC_CNTMAX_MASK;

FTM1_SYNCONF |= FTM_SYNCONF_SWWRBUF_MASK | FTM_SYNCONF_SYNCMODE_MASK;

FTM1_OUTMASK = 0xf0;

FTM1_OUTINIT = 0;

FTM1_POL = 0;

FTM1_INVCTRL = 0;

FTM1_QDCTRL &= ~FTM_QDCTRL_QUADEN_MASK;

FTM1_SWOCTRL = 0;

FTM1_PWMLOAD = 0;

FTM1_CNTIN = 0;

__GusActMod = (int16_t)(100000000 / 4 / ulFreq);

FTM1_MOD = __GusActMod;

FTM1_C0V = 30 * __GusActMod / 100;

FTM1_C1V = 30 * __GusActMod / 100;

FTM1_CNT = 0;

FTM1_SYNC |= FTM_SYNC_SWSYNC_MASK;

}

void ftm1PwmSet(int16_t usDuty)

{

FTM1_C0V = 30 * __GusActMod / 100;

FTM1_C1V = 30 * __GusActMod / 100;

}

4、注意事项

频率和占空比的限制:不同的硬件平台和应用需求对PWM的频率和占空比有一定的限制,在进行配置时需要注意不要超出允许的范围。

死区时间设置:在一些应用场景中,如电机驱动的H桥电路,为了避免上下桥臂的同时导通造成短路,需要设置合适的死区时间,可以通过设置FTMx_DEADTIME寄存器来实现死区时间的调整。

通道关联和同步:在使用互补输出时,要确保正确关联两个PWM通道,并使其能够正确地同步工作,否则可能会导致输出的信号不符合预期,甚至可能损坏连接的设备。

调试和验证:在实际应用中,建议使用示波器等工具对PWM输出信号进行测量和验证,以确保配置的正确性和稳定性,也可以通过逐步调试代码,检查各个寄存器的设置是否符合要求。

文章版权及转载声明

作者:豆面本文地址:https://www.jerry.net.cn/articals/31700.html发布于 2025-02-14 02:39:45
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司

阅读
分享