打印
[STM32F4]

PWM1输出电压不匹配

[复制链接]
782|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aiyueyuedui|  楼主 | 2017-8-1 15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
偶然的机会得到一快ST的F411NUCLEO板,在用到TIM1高级定时器的时候碰到一些问题和大家讨论下,代码如下
void TIM1_GPIO_Configuration(void)
{
                GPIO_InitTypeDef GPIO_InitStructure;
                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB,ENABLE);

                GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_TIM1);
                GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1);
                               
       
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//CH1
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
       
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//CH1N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//CH2
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//CH2N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//CH3
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//CH3N
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                GPIO_InitStructure.GPIO_Speed =  GPIO_Fast_Speed;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
                               
}


void TIM1_MODE_Configuration(void)
{
                        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
                        TIM_OCInitTypeDef TIM_OCInitStructure;
                        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

       
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
       
                        TIM_TimeBaseInitStructure.TIM_Period= 4999;                       
                        TIM_TimeBaseInitStructure.TIM_Prescaler=0;                       
                        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
                        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;               
                        TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;               
                        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
       
                        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;               
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;               
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;               
                        TIM_OCInitStructure.TIM_Pulse=0;               
                        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;               
                        TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;               
                        TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;               
                        TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;       
                        TIM_OC1Init(TIM1,&TIM_OCInitStructure);       
                        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
       
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
                        TIM_OCInitStructure.TIM_Pulse=0;
                        TIM_OC2Init(TIM1,&TIM_OCInitStructure);               
                        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
               
                        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
                        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
                        TIM_OCInitStructure.TIM_Pulse=0;
                        TIM_OC3Init(TIM1,&TIM_OCInitStructure);               
                        TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);
       
                        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;
                        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;      
                        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;      
                        TIM_BDTRInitStructure.TIM_DeadTime=5;
                        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;


                        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;   
                        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;   
                        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
                                                       

                        TIM_ARRPreloadConfig(TIM1,ENABLE);
                        TIM_CtrlPWMOutputs(TIM1,ENABLE);
                        TIM_Cmd(TIM1,ENABLE);               
}

我用万用表打了一下,PA.8=0V(CH1),PA7=3.3V(CH1N),PA.9(CH2)=0V,PB.0(CH2N)=3.3V,PA.10(CH3)=2.26V,PB.1(CH3N)=3.3V,很明显PA.10 电压是不对的,但我又查不出什么原因,尝试了不同的占空比后,问题还是出在这个PA.10上,各位老铁能否给出高见
沙发
mmuuss586| | 2017-8-1 19:36 | 只看该作者
看了下你的程序没啥问题;

你把PA10设置成普通IO看看,电平反转是否可以,确认下是不是IO坏了;
或者换块板子;

也可以用ST软件生成初始化代码看看

使用特权

评论回复
板凳
aiyueyuedui|  楼主 | 2017-8-1 20:03 | 只看该作者
mmuuss586 发表于 2017-8-1 19:36
看了下你的程序没啥问题;

你把PA10设置成普通IO看看,电平反转是否可以,确认下是不是IO坏了;

PA10是可以输出PWM波的,可否可以理解成IO口可行,而且我的PWM波是以2.26V为电压基准进行叠加的

使用特权

评论回复
地板
mmuuss586| | 2017-8-2 08:26 | 只看该作者
aiyueyuedui 发表于 2017-8-1 20:03
PA10是可以输出PWM波的,可否可以理解成IO口可行,而且我的PWM波是以2.26V为电压基准进行叠加的 ...

那说明PWM功能是没问题的;
你PWM输出高电平是多少V啊?
低电平一直是2.26V吗?还有你外围有没有接什么芯片,逐一排查吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

21

帖子

0

粉丝