高級定時器的功能有很多,這裡只介紹死區互補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
推薦閱讀
先上圖如圖 是我生成的一個波形 這個波形的佔空比在連續的四個周期內分別是10%,20%,30%,40%, 並且按照這個順序循環這裡大致介紹一下實現的方式。使用的軟體是Cubemx(庫函肯定也可以實現)第一步是器件選型 這一部分不做介紹 用的是Stm32F407第二是時鐘配置接下來是定時器配置 第三步就是生成代碼了這裡 需要在生成的代碼裡面加上一行開始的代碼。
發表於 2020-04-14
今天跟大家分享一個DAC轉換的例子:先來效果圖示波器使用的是Loto示波器OSC802三角波20KHz示例三角波20KHz示例正弦波20KHz示例測試使用的是Loto虛擬示波器 以上兩張圖的波形每一個周期都是300個DAC點組成,DAC轉換速度是3MHz具體的實現代碼如下:主要是最下面的三個函數 一個是DAC的初始化函數,另一個是定時器4的初始化函數 最後一個是波形發生函數。這是DAC+DMA的初始化函數 這要是設置DAC和DMA的基本參數 DAC觸發選擇的是定時器4的觸發引腳, 也可以換成以上的其他定時器接下來是定時器的初始化定時器初始化部分很簡單,不需要配置IO 
發表於 2020-04-14
前天學習了韋東山老師的嵌入式linux教學的一期視頻中關於LCD的刷新顯示章節,對於顯示的機制有了一些略微的理解,回想起來之前一直在用的OLED不禁想要去看看有沒有人做過相應的程序,結果沒有找到!於是自己做了一個底層的代碼。還是老規矩先來展示效果圖圖片展示的是OLED 的顯示數字和字符串,OLED屏幕的刷新頻率達到了驚人的40Hz,而且幾乎不佔用 CPU時間(數據全部走DMA) 我的程序是基於其他大佬的硬體IIC和DMA程序改編的,程序的整體框架如下在編寫用戶程序之前 我需要先實現 單片機內存到 OLED內存的這個工作,這一部分我選擇使用的是STM32F407的硬體IIC 集合DMA來實現的,雖然網上對STM32F407的硬體
發表於 2020-04-14
這裡跟大家分享一下我的步進電機的速度控制思路(最終初步解決了問題)這裡我選擇的是 Stm32F407 作為主控晶片,我的大致速度控制思路就是通過調整PSC 和ARR的值來實現對速度的控制。對應於我的代碼的定時器框圖如下(我用的是TIM14)為了實現修改定時器的頻率我們需要修改對應的PSC和ARR的值、 這裡的定時器模式我選擇是PWM模式對應的定時器部分的初始化代碼如下以上代碼完成了定時器的IO復用和對應的時鐘的初始化,這裡我們不在贅述! 我們接下來就是需要通過修改 定時器對應的PSC和ARR值來實現對定時器輸出的脈衝的頻率進行調整所以我考慮的是 我們寫一個數組,將不同的轉速下對應的PSC和ARR值都分別寫入
發表於 2020-04-14
應學弟們的要求特意將步進電機的速度控制函數完善。重點:這裡只是速度控制函數, 沒有加減速曲線! 沒有記錄步數! 只是簡單的把步進電機當成直流電機用! 很初級的一個程序!程序的下載連結在這裡 開發平臺Keil5 單片機 Stm32F407接下來 我就程序的實現過程給大家進行分享 第一部分是實現的機制介紹 詳細連結 在這裡!主要就是通過修改 PSC和ARR寄存器的值,我們可以修改 定時器的溢出頻率!而我們的定時器模式設置成 PWM輸出模式, CCR寄存器 我們設置一個較小的值*(我們要控制脈衝的頻率 ,所以單個脈衝的寬度是我們不關心的!) 修改了 PSC 和ARR
發表於 2020-04-14
的是500線的光電編碼器,控制相對於 12線磁編碼器要簡單很多,當然價格 貴不少。。。控制電機的速度,我們第一步肯定是要使用 PWM波,先使用Stm32F407 生成一個我們需要的 佔空比可調的 頻率 符合要求的方波信號。(此處注意,方波信號的頻率不宜過高或者過低,過高容易導致電機驅動的晶閘管經常處於開關狀態--發熱巨大;過低則容易產生噪音,對電機也低頻的衝擊) 直接上代碼!第一部分是產生 可控方波的代碼程序大概就是這樣的,這一部分很簡單,只是簡單的定時器的 輸出配置第二部分是配置 一路編碼器接口,我們的 Stm32F407的定時器 1 2 3 4 5 8 支持編碼器的解碼功能,本次比賽中我們的 定時器
發表於 2020-04-14