打印
[STM32F4]

PWM1输出电压不匹配

[复制链接]
1311|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengf|  楼主 | 2018-8-29 17:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
偶然的机会得到一快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 电压是不对的
沙发
jlyuan| | 2018-8-29 17:46 | 只看该作者
尝试不同的占空比

使用特权

评论回复
板凳
pengf|  楼主 | 2018-8-29 17:49 | 只看该作者
尝试了不同的占空比后,问题还是出在这个PA.10上

使用特权

评论回复
地板
jlyuan| | 2018-8-29 17:51 | 只看该作者
看了下你的程序没啥问题;

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

使用特权

评论回复
5
jiaxw| | 2018-8-29 17:53 | 只看该作者
或者换块板子;

使用特权

评论回复
6
lizye| | 2018-8-29 17:55 | 只看该作者
也可以用ST软件生成初始化代码看看

使用特权

评论回复
7
pengf|  楼主 | 2018-8-29 17:57 | 只看该作者
PA10是可以输出PWM波的,可否可以理解成IO口可行,而且我的PWM波是以2.26V为电压基准进行叠加的

使用特权

评论回复
8
huangchui| | 2018-8-29 17:59 | 只看该作者
那说明PWM功能是没问题的;
你PWM输出高电平是多少V啊?

使用特权

评论回复
9
jiaxw| | 2018-8-29 18:01 | 只看该作者
低电平一直是2.26V吗?

使用特权

评论回复
10
午夜粪车| | 2018-8-29 18:06 | 只看该作者
你外围有没有接什么芯片,逐一排查吧

使用特权

评论回复
11
pengf|  楼主 | 2018-8-29 18:10 | 只看该作者

嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

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

本版积分规则

718

主题

10129

帖子

3

粉丝