stm32f407之高級定時器 死區互補PWM(操作寄存器)

2020-12-07 電子工程世界網

高級定時器的功能有很多,這裡只介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,只是需要設置多CCER寄存器中的幾個位以及剎車與死區寄存器BDTR。對寄存器的具體描述請參考數據手冊。


配置步驟:

1.     使能相關時鐘。

2.     配置相關的引腳模式、速度、以及復用功能。

3.     使能TIM時鐘

4.     設置分頻。

5.     設置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx時鐘

6.     產生一次更新事件,更新影子寄存器的值。

7.     在CCMR中設置PWM模式。

8.     設置各通道佔空比。佔空比= CCRx / ARR。

9.     使能比較輸出。

10.  啟動預裝載。

11.  死區時間設定,使能輸出。

12.  打開定時器。




程序:

/************************************    標題:死區互補PWM    軟體平臺:IAR for ARM6.21    硬體平臺:stm32f4-discovery    主頻:168M    描述:三對死區互補PWM、一路普通PWM          PE8 ----- TIM1_CH1N          PE9 ----- TIM1_CH1          PE10 ----- TIM1_CH2N          PE11 ----- TIM1_CH2          PE12 ----- TIM1_CH3N          PE13 ----- TIM1_CH3          PE14 ----- TIM1_CH4        author:小船    data:2012-02-09*************************************/#include  void main (){     SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先級分組 搶佔:響應=3:1    RCC->AHB1ENR |= (1<<4); //打開GPIOE時鐘  GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能        //推輓輸出  GPIOE->OSPEEDR |= 0x3fff0000;//速度100m  GPIOE->PUPDR |= 0x15550000;//上拉      //PE8、9、10、11、12、13、14第二功能AF1  GPIOE->AFR[1] |= 0x01111111;    RCC->APB2ENR |= (1<<0); //打開TIM1時鐘  TIM1->PSC = 167; //對時鐘168M進行168分頻,使得計數頻率為1M  TIM1->ARR = 10000;  //周期10ms  TIM1->EGR |= 1; //產生一次更新事件    TIM1->CCMR1 |= 0x6060;//PWM模式1  TIM1->CCMR2 |= 0x6060;//PWM模式1    TIM1->CCR1 = 8000;//設置佔空比  TIM1->CCR2 = 6000;  TIM1->CCR3 = 4000;  TIM1->CCR4 = 2000;    TIM1->CCER |= 0x1ddd;//使能比較輸出    TIM1->CCMR1 |= 0x0808;//啟動預裝載  TIM1->CCMR2 |= 0x0808;    TIM1->BDTR|=1<<15;    // 剎車使能位置1,開啟所有輸出通道  TIM1->BDTR|=0xCD;     // 死區時間設定  TIM1->CR1 |= 1; //開始計時  while(1)  {  };}


關鍵字:stm32f407  高級定時器  死區互補  PWM 編輯:什麼魚 引用地址:http://news.eeworld.com.cn/mcu/2018/ic-news062840080.html 本網站轉載的所有的文章、圖片、音頻視頻文件等資料的版權歸版權所有人所有,本站採用的非本站原創文章及圖片等內容無法一一聯繫確認版權者。如果本網所選內容的文章作者及編輯認為其作品不宜公開自由傳播,或不應無償使用,請及時通過電子郵件或電話通知我們,以迅速採取適當措施,避免給雙方造成不必要的經濟損失。

推薦閱讀

CubeMX Stm32F407 生成一定周期的佔空比不同的方波 DMA + 定時器

先上圖如圖 是我生成的一個波形  這個波形的佔空比在連續的四個周期內分別是10%,20%,30%,40%, 並且按照這個順序循環這裡大致介紹一下實現的方式。使用的軟體是Cubemx(庫函肯定也可以實現)第一步是器件選型  這一部分不做介紹  用的是Stm32F407第二是時鐘配置接下來是定時器配置 第三步就是生成代碼了這裡 需要在生成的代碼裡面加上一行開始的代碼。

發表於 2020-04-14

基於Stm32F407的任意波形發生器

今天跟大家分享一個DAC轉換的例子:先來效果圖示波器使用的是Loto示波器OSC802三角波20KHz示例三角波20KHz示例正弦波20KHz示例測試使用的是Loto虛擬示波器   以上兩張圖的波形每一個周期都是300個DAC點組成,DAC轉換速度是3MHz具體的實現代碼如下:主要是最下面的三個函數  一個是DAC的初始化函數,另一個是定時器4的初始化函數 最後一個是波形發生函數。這是DAC+DMA的初始化函數  這要是設置DAC和DMA的基本參數 DAC觸發選擇的是定時器4的觸發引腳, 也可以換成以上的其他定時器接下來是定時器的初始化定時器初始化部分很簡單,不需要配置IO&nbsp

發表於 2020-04-14

基於STM32F407的 中景園0.96寸OLED(IIC)的程序升級

前天學習了韋東山老師的嵌入式linux教學的一期視頻中關於LCD的刷新顯示章節,對於顯示的機制有了一些略微的理解,回想起來之前一直在用的OLED不禁想要去看看有沒有人做過相應的程序,結果沒有找到!於是自己做了一個底層的代碼。還是老規矩先來展示效果圖圖片展示的是OLED 的顯示數字和字符串,OLED屏幕的刷新頻率達到了驚人的40Hz,而且幾乎不佔用 CPU時間(數據全部走DMA) 我的程序是基於其他大佬的硬體IIC和DMA程序改編的,程序的整體框架如下在編寫用戶程序之前 我需要先實現 單片機內存到 OLED內存的這個工作,這一部分我選擇使用的是STM32F407的硬體IIC 集合DMA來實現的,雖然網上對STM32F407的硬體

發表於 2020-04-14

基於Stm32F407的步進電機的速度控制方案------初步

這裡跟大家分享一下我的步進電機的速度控制思路(最終初步解決了問題)這裡我選擇的是 Stm32F407 作為主控晶片,我的大致速度控制思路就是通過調整PSC 和ARR的值來實現對速度的控制。對應於我的代碼的定時器框圖如下(我用的是TIM14)為了實現修改定時器的頻率我們需要修改對應的PSC和ARR的值、  這裡的定時器模式我選擇是PWM模式對應的定時器部分的初始化代碼如下以上代碼完成了定時器的IO復用和對應的時鐘的初始化,這裡我們不在贅述!  我們接下來就是需要通過修改 定時器對應的PSC和ARR值來實現對定時器輸出的脈衝的頻率進行調整所以我考慮的是 我們寫一個數組,將不同的轉速下對應的PSC和ARR值都分別寫入

發表於 2020-04-14

基於Stm32F407的多路(6路)步進電機速度控制函數

應學弟們的要求特意將步進電機的速度控制函數完善。重點:這裡只是速度控制函數, 沒有加減速曲線! 沒有記錄步數!  只是簡單的把步進電機當成直流電機用! 很初級的一個程序!程序的下載連結在這裡 開發平臺Keil5 單片機 Stm32F407接下來 我就程序的實現過程給大家進行分享   第一部分是實現的機制介紹  詳細連結 在這裡!主要就是通過修改 PSC和ARR寄存器的值,我們可以修改 定時器的溢出頻率!而我們的定時器模式設置成 PWM輸出模式, CCR寄存器 我們設置一個較小的值*(我們要控制脈衝的頻率 ,所以單個脈衝的寬度是我們不關心的!)   修改了 PSC 和ARR

發表於 2020-04-14

Stm32F407控制直流減速編碼電機--使用增量式速度PI

的是500線的光電編碼器,控制相對於 12線磁編碼器要簡單很多,當然價格 貴不少。。。控制電機的速度,我們第一步肯定是要使用 PWM波,先使用Stm32F407 生成一個我們需要的 佔空比可調的  頻率 符合要求的方波信號。(此處注意,方波信號的頻率不宜過高或者過低,過高容易導致電機驅動的晶閘管經常處於開關狀態--發熱巨大;過低則容易產生噪音,對電機也低頻的衝擊) 直接上代碼!第一部分是產生 可控方波的代碼程序大概就是這樣的,這一部分很簡單,只是簡單的定時器的 輸出配置第二部分是配置 一路編碼器接口,我們的 Stm32F407的定時器 1 2 3 4 5 8 支持編碼器的解碼功能,本次比賽中我們的 定時器

發表於 2020-04-14

相關焦點

  • STM32 高級定時器-PWM簡單使用
    高級定時器與通用定時器比較類似,下面是一個TIM1 的PWM 程序,TIM1是STM32唯一的高級定時器。共有4個通道有 死區有互補。*/TIM_Cmd(TIM1,ENABLE);/* TIM1 Main Output Enable 使能TIM1外設的主輸出*/TIM_CtrlPWMOutputs(TIM1,ENABLE);}//設置捕獲寄存器1voidSetT1Pwm1(u16 pulse){TIM1->CCR1=pulse;
  • 如何實現STM32F407單片機的ADC轉換
    用到的引腳是PA3也就是ADC1的通道3 1、ADC的主要參數 a、解析度----stm32f407的解析度有6位、8位、10位、12位,參考電壓如果是3.3 那麼最小解析度就是3.3/4095。 b、轉換時間----stm32f407的最高允許頻率是36M,最快轉換時間 = 3+12個周期 =0.71us。
  • 一個定時器生成多路PWM波形的原理和方法
    > 推薦閱讀 STM32F10x 學習筆記之基本定時器 大容量的STM32F101xx、STM32F103xx系列和互聯型產品中包含了兩個基本定時器,TIM6和TIM7。
  • STM32F1與STM32F0在GPIO_TypeDef 寄存器方面的不同
    STM32F103+NRF24L01用最小系統板搭了個平臺,加上網上的例程,問題是檢查NRF24L01的時候,一直沒法找到,讀寫地址寄存器失敗,起初懷疑是引線的問題,自己檢查連線以及針腳定義,都沒有發現問題,既然針腳沒有問題懷疑是SPI通訊的問題,接著檢查SPI配置,都沒有發現明顯的錯誤,儘管分頻到256還是不行,十分不解,檢查時序代碼,因為是網上現成的代碼本來想不應該有問題,但是還真的發現問題了,
  • 單相橋式PWM逆變器死區補償的一種方法
    和輸出電壓與輸出電流等方面詳細介紹了死區補償的一種方法。關鍵詞:死區補償;脈衝寬度調製;逆變器 橋式PWM逆變器中,為了防止同橋臂開關器件直通,需要在其互補驅動信號中設置死區,但同時會導致輸出電壓基波幅值降低並產生低次諧波等。
  • STM32f103 定時器之編碼器接口模式
    買了個Arduino的旋轉編碼器模塊,配合STM32定時器的編碼器模式實現了旋轉角度以及圈數的計數。這種旋轉編碼器我能想到的實際應用場景暫時只有實體音量旋鈕,滑鼠的滾輪等,所以只實現了計數。以上為使用外部中斷方式處理旋轉編碼器的輸出信息,當然,本篇要用到STM32定時器的接口模式,所以也就不會用以上的方法進行判斷。那麼定時器的接口模式是如何對旋轉編碼器進行計數的呢?
  • 如何採用STM32中的控制定時器Tim1實現計數器功能
    STM32中的高級控制定時器(Tim1)是由一個16位的自動裝載計數器組成,它由一個可編程預分頻器驅動。 用途在於:測量輸入信號的脈衝寬度(輸入捕獲),或者產生輸出波形(輸出比較,PWM,嵌入死區時間的互補PWM等)。 使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現脈衝寬度和波形周期從幾個微秒到幾個毫秒的調節。
  • 有關PWM「死區」時間
    簡介:pwm是脈寬調製,在電力電子中,最常用的就是整流和逆變。這就需要用到整流橋和逆變橋。對三相電來說,就需要三個橋臂。以兩電平為例,每個橋臂上有兩個電力電子器件,比如igbt。這兩個igbt不能同時導通,否則就會出現短路的情況。
  • PWM調製中的死區問題
    因此,設計帶死區的PWM波可以防止上下兩個器件同時導通。也就是說,當一個器件導通後關閉,再經過一段死區,這時才能讓另一個導通。  死區,通常,大功率電機、變頻器等,末端都是由大功率管、IGBT等元件組成的H橋或3相橋。
  • MSP430 定時器輸出PWM波形
    定時器的PWM輸出有有8種模式:輸出模式0  輸出模式:輸出信號OUTx由每個捕獲/比較模塊的控制寄存器CCTLx中的OUTx位定義,並在寫入該寄存器後立即更新。最終位OUTx直通。 輸出模式1 置位模式:輸出信號在TAR等於CCRx時置位,並保持置位到定時器復位或選擇另一種輸出模式為止。
  • STM32定時器捕獲PWM脈衝頻率
    每個定時器有四個輸入捕獲通道IC1、IC2、IC3、IC4。且IC1 IC2一組,IC3 IC4一組。並且可是設置管腳和寄存器的對應關係。2. 同一個TIx輸入映射了兩個ICx信號。3. 這兩個ICx信號分別在相反的極性邊沿有效。4. 兩個邊沿信號中的一個被選為觸發信號,並且從模式控制器被設置成復位模式。5.
  • 正點原子-戰艦V3第四章 STM32F1 基礎知識入門
    這些知識也不是什麼原創,純粹根據官方提供的中文參考手冊和自己的應用心得來總結的,如有不合理之處望大家諒解。在 STM32F1 的 HAL 庫中,外設時鐘使能操作都是在 RCC 相關固件庫文件頭文件stm32f1xx_hal_rcc.h 定義的。大家打開 stm32f1xx_hal_rcc.h 頭文件可以看到文件中除了少數幾個函數聲明之外大部分都是宏定義標識符。
  • 用SST單片機的PCA功能產生PWM脈衝
    利用PCA的脈衝寬度調製(PWM)模式可以產生一個8位PWM,它通過比PCA定時器的低位(CL)和比較寄存器的低位(CCAPnL)產生。當CLCCAPnL時輸出為低;當CL>=CCAPnL是輸出為高。要進入這個模式,可以對CCAPMn的PWM和ECOM位置位。在PWM 模式,輸出的頻率決定於PCA定時器的源。由於只有一對CH 和CL寄存器,所有模塊共享PCA定時器和頻率。
  • 關於PWM「死區」時間知識解析
    pwm是脈寬調製,在電力電子中,最常用的就是整流和逆變。這就需要用到整流橋和逆變橋。對三相電來說,就需要三個橋臂。以兩電平為例,每個橋臂上有兩個電力電子器件,比如igbt。這兩個igbt不能同時導通,否則就會出現短路的情況。
  • 單片機中各種周期的關係與定時器原理
    以STM32F103為例,進行解析  STM32的TIM一般有高級定時器TIM1,(TIM8隻有在互聯性產品有),普通定時器TIM2,TIM3,TIM4,(TIM5,TIM6,TIM7有點設備中沒有);今天就只介紹普通定時器,因為高級定時器我還不會!每一個普通定時器都有4路通道!
  • STM32F4輸出PWM波形的配置總結
    單片機輸出pwm的原理涉及模塊:GPIO、TIM1主要寄存器:TIMx_CCR、TIMx_ARR、TIMx_CNT原理圖通用定時器可以利用GPIO引腳進行脈衝輸出,在配置為比較輸出、PWM輸出功能時,捕獲/比較寄存器TIMx_CCR被用作比較功能,下面把它簡稱為比較寄存器。
  • LPC1114系統定時器(SysTick)
    下表給出了和SysTick相關的寄存器。上表中,SYST_CSR是系統定時器的控制寄存器,負責SysTick的啟動、中斷使能、輸入時鐘選擇、溢出標誌讀取等操作;SYST_RVR是系統定時器的初始值重載寄存器,負責SysTick的24位初值載入;SYST_CVR是系統定時器的當前值寄存器,負責獲取SysTick的24位當前計數值,當對該寄存器進行寫操作時,該寄存器的數值將會被清零;SYST_CALIB是系統定時器的校準值寄存器
  • LPC1114/LPC11U14和LPC1343對比學習(四)定時器
    在PWM模式下,2個32位可編程定時器/計數器均有3個匹配寄存器用於提供單邊沿的PWM輸出,剩下的那個匹配寄存器則用於控制PWM周 期長度。在PWM模式下,16位定時器0(CT16B0)與32位定時器相同,而16位定時器1(CT16B1)只有其中的兩個匹配可用於向匹配輸出管腳 提供單邊沿的PWM輸出。
  • STM8 STM32 數據類型
    首先說一下編程過程中幾個步驟吧第一,選擇一門語言,C語言或彙編語言,嵌入式編程一般目前流行還是C,這個需要基礎與時間第二讀懂了解 MCU的寄存器各寄存器的功能,尤其是一些IO口設置,各模塊時鐘設置比如定時器,I2C,同步異步串口,PWM等等,以前的話51的話沒有這樣設置。而現在MCU基本上各模塊時鐘都分開了。
  • PWM控制MOSFET搭建的H橋電路驅動直流電機仿真與單片機源碼
    PWM 中央對齊模式當TIM1_CR1寄存器中的CMS位不為 00時為中央對齊模式(所有其他的配置對OCxREF/OCx信號都有相同的作用)。根據不同的CMS位的設置,比較標誌可能 在計數器向上計數時被置 1、在計數器向下計數時被置 1、或在計數器向上和向下計數時被置 1。TIM1_CR1寄存器中的計數方向位(DIR)由硬體更新,不要用軟體修改它。