<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32開發(fā)板學(xué)習(xí)日記-[5]TIM的PMW模式

          STM32開發(fā)板學(xué)習(xí)日記-[5]TIM的PMW模式

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          脈沖寬度調(diào)制模式可以產(chǎn)生一個由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。

          在TIMx_CCMRx寄存器中的OCxM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨(dú)立地設(shè)置每個OCx輸出通道產(chǎn)生一路PWM。必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1寄存器的ARPE位使能自動重裝載的預(yù)裝載寄存器(在向上計數(shù)或中心對稱模式中)。
          因?yàn)閮H當(dāng)發(fā)生一個更新事件的時候,預(yù)裝載寄存器才能被傳送到影子寄存器,因此在計數(shù)器開始計數(shù)之前,必須通過設(shè)置TIMx_EGR寄存器中的UG位來初始化所有的寄存器。
          OCx的極性可以通過軟件在TIMx_CCER寄存器中的CCxP位設(shè)置,它可以設(shè)置為高電平有效活或低電平有效。TIMx_CCER寄存器中的CCxE位控制OCx輸出使能。

          本文引用地址:http://www.ex-cimer.com/article/201611/321139.htm


          在PWM模式(模式1或模式2)下,TIMx_CNT和TIM1_CCRx始終在進(jìn)行比較,(依據(jù)計數(shù)器的計數(shù)方向)以確定是否符合TIM1_CCRx≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRx。然而為了與OCREF_CLR的功能(在下一個PWM周期之前,ETR信號上的一個外部事件能夠清除OCxREF)一致,OCxREF信號只能在下述條件下產(chǎn)生:
          ●當(dāng)比較的結(jié)果改變

          ●當(dāng)輸出比較模式(TIMx_CCMRx寄存器中的OCxM位)從“凍結(jié)”(無比較,OCxM=’000’)切換到某個PWM模式(OCxM=’110’或’111’)。這樣在運(yùn)行中可以通過軟件強(qiáng)置PWM輸出。
          根據(jù)TIMx_CR1寄存器中CMS位的狀態(tài),定時器能夠產(chǎn)生邊沿對齊的PWM信號或中央對齊的PWM信號。

          110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNTTIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。
          111:PWM模式2-在向上計數(shù)時,一旦TIMx_CNTTIMx_CCR1時通道1為有效電平,否則為無效電平。


          PWM 邊沿對齊模式
          向上計數(shù)配置
          當(dāng)TIMx_CR1寄存器中的DIR位為低的時候執(zhí)行向上計數(shù)。參看13.3.2節(jié)。
          下面是一個PWM模式1的例子。當(dāng)TIMx_CNT

          向下計數(shù)的配置


          當(dāng)TIMx_CR1寄存器的DIR位為高時執(zhí)行向下計數(shù)。

          在PWM模式1,當(dāng)TIMx_CNT>TIMx_CCRx時參考信號OCxREF為低,否則為高。如果TIMx_CCRx中的比較值大于TIMx_ARR中的自動重裝載值,則OCxREF保持為’1’。該模式下不能產(chǎn)生0%的PWM波形。
          PWM 中央對齊模式
          當(dāng)TIMx_CR1寄存器中的CMS位不為’00’時為中央對齊模式(所有其他的配置對OCxREF/OCx信號都有相同的作用)。根據(jù)不同的CMS位的設(shè)置,比較標(biāo)志可以在計數(shù)器向上計數(shù)時被置1、在計數(shù)器向下計數(shù)時被置1、或在計數(shù)器向上和向下計數(shù)時被置1。TIMx_CR1寄存器中的計數(shù)方向位(DIR)由硬件更新,不要用軟件修改它。下圖給出了一些中央對齊的PWM波形的例子
          ●TIMx_ARR=8
          ●PWM模式1
          ●TIMx_CR1寄存器中的CMS=01,在中央對齊模式1時,當(dāng)計數(shù)器向下計數(shù)時設(shè)置比較標(biāo)志。通用定時器(TIMx)

          使用中央對齊模式的提示:
          ●進(jìn)入中央對齊模式時,使用當(dāng)前的上/下計數(shù)配置;這就意味著計數(shù)器向上還是向下計數(shù)取決于TIMx_CR1寄存器中DIR位的當(dāng)前值。此外,軟件不能同時修改DIR和CMS位。
          ●不推薦當(dāng)運(yùn)行在中央對齊模式時改寫計數(shù)器,因?yàn)闀a(chǎn)生不可預(yù)知的結(jié)果。特別地:
          ─如果寫入計數(shù)器的值大于自動重加載的值(TIMx_CNT>TIMx_ARR),則方向不會被更新。例如,如果計數(shù)器正在向上計數(shù),它就會繼續(xù)向上計數(shù)。
          ─如果將0或者TIMx_ARR的值寫入計數(shù)器,方向被更新,但不產(chǎn)生更新事件UEV。
          ●使用中央對齊模式最保險的方法,就是在啟動計數(shù)器之前產(chǎn)生一個軟件更新(設(shè)置TIMx_EGR 位中的UG位),不要在計數(shù)進(jìn)行過程中修改計數(shù)器的值。

          本例展示了如何設(shè)置TIM工作在脈沖寬度調(diào)制模式(PWM Pulse Width Modulation
          mode)。

          TIM3時鐘設(shè)置為36MHz,預(yù)分頻設(shè)置為0,TIM2計數(shù)器時鐘可表達(dá)為:
          TIM3 counter clock = TIMxCLK / (Prescaler +1) = 36 MHz

          設(shè)置TIM3_CCR1寄存器值為500,則TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為50%的PWM信號。

          同理,根據(jù)寄存器TIM3_CCR2 、TIM3_CCR3和 TIM3_CCR4的值,TIM3通道2產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為37.5%的PWM信號;TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為25%的PWM信號;TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為12.5%的PWM信號。

          可以通過示波器,在相應(yīng)管腳觀察到輸出信號。

          u16 CCR1_Val = 500;
          u16 CCR2_Val = 375;
          u16 CCR3_Val = 250;
          u16 CCR4_Val = 125;





          TIM_TimeBaseStructure.TIM_Period = 999;
          TIM_TimeBaseStructure.TIM_Prescaler = 0;
          TIM_TimeBaseStructure.TIM_ClockDivision = 0;
          TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

          TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


          TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
          TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
          TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
          TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

          TIM_OCInit(TIM3, &TIM_OCInitStructure);

          啟用CCR1寄存器的影子寄存器(直到產(chǎn)生更新事件才更改設(shè)置)

          TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);


          TIM_OCInitStructure.TIM_Channel = TIM_Channel_2;
          TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

          TIM_OCInit(TIM3, &TIM_OCInitStructure);

          TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);


          TIM_OCInitStructure.TIM_Channel = TIM_Channel_3;
          TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

          TIM_OCInit(TIM3, &TIM_OCInitStructure);

          TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);


          TIM_OCInitStructure.TIM_Channel = TIM_Channel_4;
          TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

          TIM_OCInit(TIM3, &TIM_OCInitStructure);

          TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

          TIM_ARRPreloadConfig(TIM3, ENABLE);


          TIM_Cmd(TIM3, ENABLE);

          while (1)
          {
          }
          }




          關(guān)鍵詞: STM32開發(fā)板TIMPMW模

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();