金牌会员
 
- 积分
- 1243
- 金钱
- 1243
- 注册时间
- 2016-1-23
- 在线时间
- 487 小时
|
50金钱
本帖最后由 STM129 于 2020-4-24 17:58 编辑
STM32F103PWM想得到250nS的死区时间,但是设置后输出了1.26uS的死区时间
程序是这样:
不知道那里不对
void TIM1_PWM_Init(u32 arr,u32 psc)
{
//此部分需手动修改IO口设置
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM1_BDTRInitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); //TIM1时钟使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //GPIOA8/A7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOA8/A7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA8
GPIO_ResetBits(GPIOA, GPIO_Pin_12);//输出低
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //GPIOA8/A7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化PA8
TIM_TimeBaseStructure.TIM_Prescaler = psc; //Timer clock = sysclock /(TIM_Prescaler+1) = 168M 定时器分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); //初始化定时器1
//初始化TIM1 Channel1 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补输出允许
TIM_OCInitStructure.TIM_Pulse = (arr+1)/2;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //High为占空比高极性,此时占空比为50%,Low则为反极性,占空比为50%
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High; //互补输出,与以上相反
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1OC1
/*************************/
//通道3
// TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //比较输出失能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;//反向通道失效
TIM_OCInitStructure.TIM_Pulse = 50; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:低
TIM_OC3Init(TIM1, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH3预装载使能
/*************************/
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR1上的预装载寄存器(CR自动装载默认是打开的)
TIM_ARRPreloadConfig(TIM1,ENABLE); //ARPE使能(ARR自动装载默认是打开的,可以不设置)
TIM_Cmd(TIM1,ENABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE); //使能TIM1的PWM输出
//死区时间控制
TIM1_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;
TIM1_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;
TIM1_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM1_BDTRInitStruct.TIM_DeadTime = 18;//250nS
TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStruct);
}
|
-
-
|