找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4777|回复: 2
打印 上一主题 下一主题
收起左侧

STM32F1互补PWM

[复制链接]
跳转到指定楼层
楼主
void PWM_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能GPIO时钟
    //正极性输出引脚PA.8-->TIM1_CH1,PA.9-->TIM1_CH2,PA.10-->TIM1_CH2
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;    //PA8 PA11
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   
    GPIO_Init(GPIOA,&GPIO_InitStructure);                //使能GPIOA
    //反极性输出引脚PB.13-->TIM1_CH1N,PB.14-->TIM1_CH2N,PB.15-->TIM1_CH3N
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;    //PA8 PA11
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   
    GPIO_Init(GPIOB,&GPIO_InitStructure);                //使能GPIOB
}
/***************************************************************
*    Function     :    TIMx_PWM_Init
*    Description :    PWM初始化
*    Input           :    None
*    Output        :    None
*    Return        :    None
*   Declaration  :   定时器的初始化
****************************************************************/
void PWM_TIMx_Init(uint16_t arr,uint16_t psc)
{
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
    TIM_DeInit(TIM1);                                                                                            //定时器1复位
    /*定时器1初始化*/
    TIM_TimeBaseStructure.TIM_Period=arr;                                                  //自动重装载值
    TIM_TimeBaseStructure.TIM_Prescaler=psc;                                             //预分频系数
    TIM_TimeBaseStructure.TIM_ClockDivision=0X00;                                     //设置时钟分割TDTS==tck_Tim
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;            //向上计数模式
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
    TIM_ARRPreloadConfig(TIM1,DISABLE);                                                        //禁止ARR预装缓冲器
    /*双路互补PWM初始化*/
    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;                                //TIM_OCMode_PWM1
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;         //正极性输出使能
    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;    //互补极性输出使能
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;                //PWM输出极性
    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;              //PWM互补极性
    TIM_OCInitStructure.TIM_Pulse=450;                                                     //占空比
    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;              //死区后输出状态
    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;        //死区后互补极性输出状态
    //初始化3路正极性PWM:PA.8,PA.9,PA.10
    TIM_OC1Init(TIM1,&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_Pulse=350;
    TIM_OC2Init(TIM1,&TIM_OCInitStructure);
    TIM_OCInitStructure.TIM_Pulse=250;
    TIM_OC3Init(TIM1,&TIM_OCInitStructure);
    //配置3路正极性PWM
    //TIM_OC1PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道1预装载使能
    //TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2预装载使能
    //TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3预装载使能
   
    //死区和刹车配置功能仅仅对TIM1和TIM8高级定时器有效
    TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;                //空闲模式下的输出使能
    TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;                //运行模式下的输出使能
    TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;                    //锁定设置
    TIM_BDTRInitStructure.TIM_DeadTime=0X00;                                                //设置死区时间2us
    TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;                            //刹车功能关闭
    TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_Low;    //刹车输入极性
    TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Disable;//关闭自动输出使能
    TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
    //高级定时器的输出控制使能刹车MOE主输出使能
    TIM_CtrlPWMOutputs(TIM1,ENABLE);        
    TIM_ARRPreloadConfig(TIM1,ENABLE);   
    //定时器使能   
    TIM_Cmd(TIM1,ENABLE);            
}
STM32F103C8T6 IOPA.8 PA.9 PA.10 PB.13 PB.14 PB.15
注释这三句后:波形
         //TIM_OC1PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道1预装载使能
         //TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2预装载使能
         //TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3预装载使能
未注释的波形:
         TIM_OC1PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道1预装载使能
         TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2预装载使能
         TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3预装载使能

未注释的仿真波形


注释后仿真波形

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:493103 发表于 2019-3-18 12:22 | 只看该作者
请教楼主,这个仿真是怎么弄得,有的啥软件?谢谢
回复

使用道具 举报

板凳
ID:410139 发表于 2019-3-28 21:23 | 只看该作者
保存了,不久就可以用上,谢谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表