久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

轉兩個stm32定時器的使用代碼

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年11月20日   【字體:

 具體沒有測試,先收藏,以后去嘗試一下

    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 = Pluse;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;

    TIM_OC1Init(BLDC_TIMER_NUM, &TIM_OCInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    Pluse = MotorA.TimerPeriod - Pluse;
    TIM_OCInitStructure.TIM_Pulse = Pluse;
    TIM_OC2Init(BLDC_TIMER_NUM, &TIM_OCInitStructure);

 

 

#define   Fsys           72000000ul   //  system freq 72MHz
#define   Fpwm           20000        //  PWM freq  20K

void  ConfigTimer(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
 
  RCC_APB1PeriphClockCmd(  RCC_APB1Periph_TIM4,ENABLE);
  RCC_APB2PeriphClockCmd(  RCC_APB2Periph_GPIOB,ENABLE);
 
  TIM_DeInit(TIM4);
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;
  TIM_TimeBaseStructure.TIM_Period = (Fsys/2) / Fpwm;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
 
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  TIM_OCInitStructure.TIM_Pulse = (((Fsys/2) / Fpwm) * 20) / 100;
  TIM_OC3Init(TIM4,&TIM_OCInitStructure);
 
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_Pulse = (((Fsys/2) / Fpwm) * (100-20)) / 100;
  TIM_OC4Init(TIM4,&TIM_OCInitStructure);
 
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
 
  TIM_CtrlPWMOutputs(TIM4, ENABLE);
  TIM_Cmd(TIM4,ENABLE);

 

基本設置如下:
1)配置定時器的計數器為中間對齊計數,即先向上計數再向下計數。
2)在該定時器上選擇2個通道,并分別配置為輸出比較模式,并配置在比較成功時翻轉對應的引腳輸出。
3)配置自動重裝載寄存器TIMx_ARR為要求輸出頻率的一半。
4)假定CC1為第一個輸出信號的通道,再假定第一個信號的正脈沖寬度對應為W1,則配置TIMx_CCR1為TIMx_ARR-W1/2。
5) 同4),假定CC2為第二個輸出信號的通道,正脈沖寬度對應為W2,配置TIMx_CCR2為W2/2。

----------------------------------------------
下面以一個例子說明:

假設要求輸出的信號頻率為10kHz,占空比為1:3。
再假設定時器的輸入時鐘為72MHz。

輸出信號的頻率10kHz,換算為計數器的數值為7200。
按照上述3),設置TIMx_ARR=3600

輸出信號1的高電平時間W1,換算為計數器的數值為W1=7200/4=1800
按照上述4),設置TIMx_CC1=3600 - W1/2=2700

輸出信號2的高電平時間W2,換算為計數器的數值為W2=7200/4=1800
按照上述5),設置TIMx_CC2=2/2=450

參照下圖,圖中紅線表示計數器的數值變化:
①當計數器的數值從0向上計數,達到TIMx_CC1時,CC1匹配成功,CC1的輸出電平翻轉;
②計數器繼續向上計數,達到TIMx_ARR時開始調頭向下計數;當計數器的數值下降到TIMx_CC1時,CC1再次匹配成功,CC1的輸出電平再次翻轉;
③計數器繼續向下計數,達到到TIMx_CC2時,CC2匹配成功,CC2的輸出電平翻轉;
④計數器繼續向下計數,減到0時開始調頭向上計數;當計數器的數值上升到TIMx_CC2時,CC2再次匹配成功,CC2的輸出電平再次翻轉;

如此循環,得到連續的相位互為180度的兩路輸出波形。

注意:上述描述是一個原理性的說明,但能夠輸出要求的波形并且占空比可調,實際編程計算中需要可能需要對某些數值加1或者減1,以達到準確地輸出。

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲成人精品 | 成人在线观看免费爱爱 | 午夜私人影院在线观看 | 精品国产乱码久久久久久久久 | 午夜99| 久久av网站| 亚卅毛片| 国产a视频 | 人人擦人人 | 性色视频在线观看 | 中文字幕一区二区三区日韩精品 | 国产在线视频一区 | 国产精品亚洲精品久久 | 国产高清无av久久 | 国产www在线 | 免费视频成人国产精品网站 | 亚洲精久久 | 欧美一级免费片 | 国产精品毛片一区二区三区 | 久久剧场| 中文字幕免费 | 在线视频 亚洲 | 成人免费在线播放 | 国产一区二区激情视频 | 国产成人精品一区二三区在线观看 | 91国自产| 91成人精品 | 97精品视频在线 | 精品国产成人 | 久久久久久成人 | 成人午夜精品 | 欧美日韩亚洲国产 | 久久久久久久久久久久亚洲 | 日韩免费一二三区 | 欧美日韩视频在线第一区 | 日韩在线观看一区 | 亚洲成人久久久 | 一级毛片视频 | 请别相信他免费喜剧电影在线观看 | 色婷综合网| 久久精品视频播放 |