// 高有效死区设置,即在死区时间内,A和B都输出低电平 // Active high complementary PWMs - Set up the deadband EPWM_setDeadBandCounterClock(base2,EPWM_DB_COUNTER_CLOCK_FULL_CYCLE); EPWM_setRisingEdgeDelayCount(base2,pwm_db_ticks_hs); EPWM_setFallingEdgeDelayCount(base2,pwm_db_ticks_hs); EPWM_setDeadBandDelayMode(base2,EPWM_DB_RED,true); EPWM_setDeadBandDelayMode(base2,EPWM_DB_FED,true); EPWM_setRisingEdgeDeadBandDelayInput(base2,EPWM_DB_INPUT_EPWMA); EPWM_setFallingEdgeDeadBandDelayInput(base2,EPWM_DB_INPUT_EPWMA); EPWM_setDeadBandDelayPolarity(base2,EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW); EPWM_setDeadBandDelayPolarity(base2,EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH);
时间: 2024-03-29 07:41:34 浏览: 13
这是一段代码,主要是用来设置电子设备的PWM信号的死区时间(Dead Band Time)和死区极性(Dead Band Polarity)。死区时间是指在PWM信号切换时,为防止出现过电流的情况,需要在A和B两个信号之间设置一个时间间隔,这个时间间隔就是死区时间。死区极性则是指在死区时间内,是将A和B信号都置为低电平还是高电平。
具体来说,EPWM_setDeadBandCounterClock函数用于设置死区计数器的时钟源,EPWM_setRisingEdgeDelayCount和EPWM_setFallingEdgeDelayCount函数用于设置上升沿和下降沿的延迟时间,EPWM_setDeadBandDelayMode函数用于设置死区延迟模式,EPWM_setRisingEdgeDeadBandDelayInput和EPWM_setFallingEdgeDeadBandDelayInput函数用于设置死区延迟输入端口,EPWM_setDeadBandDelayPolarity函数用于设置死区延迟极性。
相关问题
STM32 高级定时器死区时间设置
在 STM32 的高级定时器中,死区时间是指在 PWM 输出切换时,两个输出通道之间的时间间隔。可以通过设置死区时间来避免两个输出通道同时输出电平的问题,从而保证输出电路的稳定性。
在 STM32 的高级定时器中,设置死区时间需要以下步骤:
1. 选择定时器通道,并设置死区时间寄存器的值。
2. 使能死区时间功能。
3. 配置定时器的 PWM 模式,使其支持死区时间功能。
下面是一个示例代码,演示如何设置 STM32 的高级定时器的死区时间:
```
// 选择定时器通道
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = channelPulse; // 设置 PWM 脉冲宽度
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
// 设置死区时间寄存器的值
TIM_BDTR_InitTypeDef sConfigBDTR;
sConfigBDTR.OSSRState = TIM_OSSR_DISABLE;
sConfigBDTR.OSSIState = TIM_OSSI_DISABLE;
sConfigBDTR.LockLevel = TIM_LOCKLEVEL_OFF;
sConfigBDTR.DeadTime = deadTime; // 设置死区时间
sConfigBDTR.BreakState = TIM_BREAK_DISABLE;
sConfigBDTR.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sConfigBDTR.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
// 使能死区时间功能
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_2);
HAL_TIMEx_BDTRConfig(&htim, &sConfigBDTR);
// 配置定时器的 PWM 模式
TIM_MasterConfigTypeDef sMasterConfig;
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim, &sMasterConfig);
```
在上面的示例代码中,`deadTime` 变量是死区时间的值,根据实际应用需求进行设置。同时,需要注意将 `TIM_BDTR_InitTypeDef` 结构体中的其它成员也进行正确的设置,以保证定时器能够正常工作。
希望这些信息能够对您有所帮助。如果您还有其它问题或需要进一步了解,可以继续提问。
写一个基于F28335的高电平有效互补输出的带死区的PWM程序
以下是一个基于F28335的高电平有效互补输出的带死区的PWM程序的示例代码:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define PWM_FREQ 10000 // PWM频率
#define PWM_DUTY_CYCLE 50 // PWM占空比
void Init_PWM(void);
int main(void)
{
InitSysCtrl(); // 初始化系统时钟
Init_PWM(); // 初始化PWM模块
while(1)
{
// 主循环
}
}
void Init_PWM(void)
{
EALLOW;
// 配置GPIO管脚用于PWM输出
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // 配置GPIO20为PWM1A
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // 配置GPIO21为PWM1B
// 配置PWM时钟
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; // 使能EPWM1时钟
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 设置计数器为上升计数模式
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 设置TBCLK为SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 设置分频系数为1
EPwm1Regs.TBPRD = 1500; // 设置计数器周期为1500
// 配置PWM信号
EPwm1Regs.AQCTLA.bit.CAU = 1; // 设置PWM1A为高电平有效
EPwm1Regs.AQCTLA.bit.ZRO = 2; // 设置PWM1A在计数器清零时输出低电平
EPwm1Regs.AQCTLB.bit.CBU = 1; // 设置PWM1B为高电平有效
EPwm1Regs.AQCTLB.bit.ZRO = 2; // 设置PWM1B在计数器清零时输出低电平
// 配置死区
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 设置PWM1A和PWM1B都带死区
EPwm1Regs.DBCTL.bit.POLSEL = 0; // 死区时间基准为EPWMxSYNCI信号
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // EPWMxSYNCI为异步
EPwm1Regs.DBRED = 50; // 设置上升沿死区时间为50个TBCLK
EPwm1Regs.DBFED = 50; // 设置下降沿死区时间为50个TBCLK
// 设置PWM占空比
EPwm1Regs.CMPA.bit.CMPA = PWM_DUTY_CYCLE * EPwm1Regs.TBPRD / 100; // 设置PWM1A占空比
EPwm1Regs.CMPB.bit.CMPB = PWM_DUTY_CYCLE * EPwm1Regs.TBPRD / 100; // 设置PWM1B占空比
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 禁用相位补偿
EPwm1Regs.TBCTL.bit.SYNCOSEL = 3; // 选择计数器清零时同步
EDIS;
}
```
这个示例代码中,我们配置了EPWM1模块为高电平有效互补输出,并且设置了50个TBCLK的死区。我们还设置了PWM频率为10kHz,占空比为50%。需要注意的是,这个代码只是一个示例,实际应用中需要根据具体的需求进行调整。