找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5676|回復(fù): 2
收起左側(cè)

STM32F1互補(bǔ)PWM

[復(fù)制鏈接]
ID:195946 發(fā)表于 2017-8-3 21:34 | 顯示全部樓層 |閱讀模式
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;        //復(fù)用推挽輸出
    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;        //復(fù)用推挽輸出
    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復(fù)位
    /*定時器1初始化*/
    TIM_TimeBaseStructure.TIM_Period=arr;                                                  //自動重裝載值
    TIM_TimeBaseStructure.TIM_Prescaler=psc;                                             //預(yù)分頻系數(shù)
    TIM_TimeBaseStructure.TIM_ClockDivision=0X00;                                     //設(shè)置時鐘分割TDTS==tck_Tim
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;            //向上計數(shù)模式
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
    TIM_ARRPreloadConfig(TIM1,DISABLE);                                                        //禁止ARR預(yù)裝緩沖器
    /*雙路互補(bǔ)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;    //互補(bǔ)極性輸出使能
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;                //PWM輸出極性
    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;              //PWM互補(bǔ)極性
    TIM_OCInitStructure.TIM_Pulse=450;                                                     //占空比
    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;              //死區(qū)后輸出狀態(tài)
    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;        //死區(qū)后互補(bǔ)極性輸出狀態(tài)
    //初始化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預(yù)裝載使能
    //TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2預(yù)裝載使能
    //TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3預(yù)裝載使能
   
    //死區(qū)和剎車配置功能僅僅對TIM1和TIM8高級定時器有效
    TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;                //空閑模式下的輸出使能
    TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;                //運(yùn)行模式下的輸出使能
    TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;                    //鎖定設(shè)置
    TIM_BDTRInitStructure.TIM_DeadTime=0X00;                                                //設(shè)置死區(qū)時間2us
    TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;                            //剎車功能關(guān)閉
    TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_Low;    //剎車輸入極性
    TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Disable;//關(guān)閉自動輸出使能
    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預(yù)裝載使能
         //TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2預(yù)裝載使能
         //TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3預(yù)裝載使能
未注釋的波形:
         TIM_OC1PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道1預(yù)裝載使能
         TIM_OC2PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道2預(yù)裝載使能
         TIM_OC3PolarityConfig(TIM1,TIM_OCPreload_Enable);//PWM通道3預(yù)裝載使能

未注釋的仿真波形
1.png

注釋后仿真波形
2.png
回復(fù)

使用道具 舉報

ID:493103 發(fā)表于 2019-3-18 12:22 | 顯示全部樓層
請教樓主,這個仿真是怎么弄得,有的啥軟件?謝謝
回復(fù)

使用道具 舉報

ID:410139 發(fā)表于 2019-3-28 21:23 | 顯示全部樓層
保存了,不久就可以用上,謝謝樓主
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表