新聞中心

        STM32_TIM3_PWM_MDK

        作者: 時間:2016-12-03 來源:網(wǎng)絡(luò) 收藏
        最近要驅(qū)動電機,看了下PWM的輸出,有所總結(jié),這次貼上。

        stm32 的高級定時器 比較復雜,看了下例程,設(shè)置的東西太多了,就沒有碰,

        本文引用地址:http://www.104case.com/article/201612/325147.htm

        看了通用定時器還比較可愛,什么都剛剛好夠用,就用它做了,這次用的是TIM3定時器3。

        硬件平臺用的是stm32f103vet6 100腳的。

        由于手頭沒有示波器,所以用軟件仿真,先上一張仿真圖:


        下面是代碼部分Timer3.c
        C語言:Codee#20528
        #include "Timer3.h"
        /*******************************************************************************
        * Function Name : None
        * Description : 定時器3 PWM輸出占空比全局變量
        * Input : None
        * Output : None
        * Return : None
        *******************************************************************************/
        unsignedintT3CH1_DC=50;// 定時器3通道1占空比 全局變量
        unsignedintT3CH2_DC=50;// 定時器3通道2占空比 全局變量
        unsignedintT3CH3_DC=50;// 定時器3通道3占空比 全局變量
        unsignedintT3CH4_DC=50;// 定時器3通道4占空比 全局變量

        /*******************************************************************************
        * Function Name : Timer3_GPIO_Configuration
        * Description : 設(shè)置定時器3 PWM輸出引腳
        * Input : None
        * Output : None
        * Return : None
        *******************************************************************************/
        voidTimer3_GPIO_Configuration(void)
        {
        GPIO_InitTypeDefGPIO_InitStructure_TIMER3PWM_PORTA;
        GPIO_InitTypeDefGPIO_InitStructure_TIMER3PWM_PORTB;

        GPIO_InitStructure_TIMER3PWM_PORTA.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure_TIMER3PWM_PORTA.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure_TIMER3PWM_PORTA.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure_TIMER3PWM_PORTA);

        GPIO_InitStructure_TIMER3PWM_PORTB.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure_TIMER3PWM_PORTB.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure_TIMER3PWM_PORTB.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_Init(GPIOB,&GPIO_InitStructure_TIMER3PWM_PORTB);
        }

        /*******************************************************************************
        * Function Name : Timer3_BASE_Configuration 注意事項:
        * Description : 設(shè)置基本參數(shù) 在 TIM_Period 里的5000 為一個重要常量
        * Input : None 在下面的 初始化PWM信號 和 調(diào)節(jié)PWM占空比 函數(shù)里都用到
        * Output : None 如果要調(diào)整PWM輸出頻率,那上面提到的兩個函數(shù)里都要調(diào)節(jié)!
        * Return : None
        *******************************************************************************/
        voidTimer3_BASE_Configuration(void)
        {
        TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
        TIM_DeInit(TIM3);//重新將Timer設(shè)置為缺省值
        TIM_InternalClockConfig(TIM3);//采用內(nèi)部時鐘給TIM3提供時鐘源
        TIM_TimeBaseStructure.TIM_Prescaler=720;
        //預分頻系數(shù)為72,即不進行預分頻,此時TIMER的頻率為1MHz
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV4;//設(shè)置時鐘分割
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//設(shè)置計數(shù)器模式為向上計數(shù)模
        TIM_TimeBaseStructure.TIM_Period=5000-1;
        //設(shè)置計數(shù)溢出大小,每計5000個數(shù)就產(chǎn)生一個更新事件,即PWM的輸出頻率為50Hz,Fre = 20ms
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//將配置應(yīng)用到TIM3中
        }

        /*******************************************************************************
        * Function Name : Timer3_PWN_Configuration
        * Description : 設(shè)置PWM參數(shù)
        * Input : Dutyfactor : 占空比 (0~100)
        * Output : None
        * Return : None
        *******************************************************************************/
        voidTimer3_PWN_Configuration(void)
        {
        TIM_OCInitTypeDefTIM_OCInitStructure;

        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;//PWM方式 分1,2

        /*************************** 通道1 ********************************/
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM功能使能
        TIM_OCInitStructure.TIM_Pulse=(T3CH1_DC*5000)/100;//寫比較值(占空比輸入)
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//設(shè)置正反相位,是先高電平還是先低電平
        TIM_OC1Init(TIM3,&TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);

        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;

        /*************************** 通道2 ********************************/
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse=(T3CH2_DC*5000)/100;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

        /*************************** 通道3 ********************************/
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse=(T3CH3_DC*5000)/100;
        TIM_OC3Init(TIM3,&TIM_OCInitStructure);
        TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);

        /*************************** 通道4 ********************************/
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse=(T3CH4_DC*5000)/100;
        TIM_OC4Init(TIM3,&TIM_OCInitStructure);
        TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);

        TIM_ARRPreloadConfig(TIM3,ENABLE);
        TIM_Cmd(TIM3,ENABLE);
        }

        /*******************************************************************************
        * Function Name : TIM3PWM_4Channel_Configuration
        * Description : 初始化定時器3,4個通道的PWM輸出,占空比初始化為50%
        * Input : None
        * Output : None
        * Return : None
        *******************************************************************************/
        voidTIM3PWM_4Channel_Configuration(void)
        {
        Timer3_GPIO_Configuration();
        Timer3_BASE_Configuration();
        Timer3_PWN_Configuration();
        }

        /*******************************************************************************
        * Function Name : Adjust_DutyCycle
        * Description : 定時器3調(diào)節(jié)4個通道的占空比
        * Input : CHx : 輸出通道 DC : 調(diào)節(jié)到多少量
        * Output : None
        * Return : None
        *******************************************************************************/
        voidAdjust_TIM3DutyCycle(unsignedcharCHx,unsignedintDC)
        {
        switch(CHx)
        {
        caseCH1:
        {
        TIM_SetCompare1(TIM3,((DC*5000)/100) );
        break;
        }
        caseCH2:
        {
        TIM_SetCompare2(TIM3,((DC*5000)/100) );
        break;
        }
        caseCH3:
        {
        TIM_SetCompare3(TIM3,((DC*5000)/100) );
        break;
        }
        caseCH4:
        {
        TIM_SetCompare4(TIM3,((DC*5000)/100) );
        break;
        }
        default:
        {break;}
        }
        }



        關(guān)鍵詞: STM32TIM3PWMMD

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 贞丰县| 额敏县| 望城县| 兰溪市| 新建县| 团风县| 乌鲁木齐县| 肃宁县| 京山县| 河间市| 辽宁省| 山东省| 同德县| 尖扎县| 天等县| 九寨沟县| 连平县| 綦江县| 平潭县| 沁水县| 喀喇| 祁连县| 错那县| 林州市| 馆陶县| 达州市| 永康市| 永兴县| 昭苏县| 怀仁县| 泰州市| 武隆县| 繁峙县| 平顶山市| 墨脱县| 延庆县| 宁晋县| 响水县| 襄汾县| 拜城县| 太仆寺旗|