STM32-PWM輸出總結(jié)講課講稿_第1頁(yè)
STM32-PWM輸出總結(jié)講課講稿_第2頁(yè)
STM32-PWM輸出總結(jié)講課講稿_第3頁(yè)
STM32-PWM輸出總結(jié)講課講稿_第4頁(yè)
STM32-PWM輸出總結(jié)講課講稿_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、學(xué)習(xí)后發(fā)現(xiàn) stm32 的定時(shí)器功能確實(shí)很強(qiáng)大,小總結(jié)一下方便以后使用的時(shí)候做參考。 stm32 定時(shí)器一共分為三種:tim1 和 tim8 是高級(jí)定時(shí)器,6 和 7 是基本定時(shí)器,25 是通 用定時(shí)器。從名字就可以看得出來(lái)主要功能上的差異。今天我主要是用定時(shí)器做 pwm 輸出, 所以總結(jié)也主要是針對(duì) pwm 方面的。先大致說(shuō)下通用和高級(jí)定時(shí)器的區(qū)別。通用的可以輸出四路pwm 信號(hào)互不影響。高級(jí) 定時(shí)器可以輸出三對(duì)互補(bǔ) pwm 信號(hào)外加 ch4 通道,也就是一共七路。所以這樣算下來(lái) stm32 一共可以生成 4*5+7*2=30 路 pwm 信號(hào)。接下來(lái)還有功能上的區(qū)別: 通用定時(shí)器的 pwm

2、 信號(hào)比較簡(jiǎn)單,就是普通的調(diào)節(jié)占空比調(diào)節(jié)頻率(別的不常用到的沒(méi)去 深究);高級(jí)定時(shí)器的還帶有互補(bǔ)輸出功能,同時(shí)互補(bǔ)信號(hào)可以插入死區(qū),也可以使能剎車 功能,從這些看來(lái)高級(jí)定時(shí)器的 pwm 天生就是用來(lái)控制電機(jī)的。pwm 輸出最基本的調(diào)節(jié)就是頻率和占空比。頻率當(dāng)然又和時(shí)鐘信號(hào)扯上了關(guān)系。高級(jí)定時(shí) 器是掛接到 apb2 上,而通用定時(shí)器是掛接到 apb1 上的。apb1 和 apb2 的區(qū)別就要在于 時(shí)鐘頻率不同。apb2 最高頻率允許 72mh,而 apb1 最高頻率為 36mhz。這樣是不是通用 定時(shí)器只最高 36mhz 頻率呢,不是的;通用定時(shí)器時(shí)鐘信號(hào)完整的路線應(yīng)該是下面這樣的: ahb(7

3、2mhz)apb1 分頻器(默認(rèn) 2)apb1 時(shí)鐘信號(hào)(36mhz)倍頻器(*2 倍) 通用定時(shí)器時(shí)鐘信號(hào)(72mhz)。在 apb1 和定時(shí)器中間的倍頻器起到了巨大的作用,假如紅色字體的“apb1 分頻器”假如不 為 1(默認(rèn)是 2),倍頻器會(huì)自動(dòng)將 apb1 時(shí)鐘頻率擴(kuò)大 2 倍后作為定時(shí)器信號(hào)源,這個(gè)它內(nèi) 部自動(dòng)控制的不用配置。設(shè)置這個(gè)倍頻器的目的很簡(jiǎn)單就是在 apb1 是 36mhz 的情況下通 用定時(shí)器的頻率同樣能達(dá)到 72mhz。我用的庫(kù)函數(shù)直接調(diào)用函數(shù) systeminit(); 這個(gè)函數(shù)之后 時(shí)鐘配置好了:通用定時(shí)器和高級(jí)定時(shí)器的時(shí)鐘現(xiàn)在都是 72mhz(你也可以自己再配置一

4、下 rcc 讓他的頻率更低,但是不能再高了)。定時(shí)器接下來(lái)還有一個(gè)分頻寄存器:timx_psc 經(jīng) 過(guò) 他 的 分 頻 后 , 才 是 定 時(shí) 器 計(jì) 數(shù) 的 頻 率 。 所 以 真 正 的 時(shí) 鐘 頻 率 應(yīng) 該 是 72mhz/(timx_psc-1),我們?cè)O(shè)為 tim_frepuency 下面還會(huì)用到。stm32 的時(shí)鐘頻率弄得確實(shí)是很饒人的,所以關(guān)鍵就是先要把思路理清楚。時(shí)鐘的頻率弄好 了下面終于可以開(kāi)說(shuō)重點(diǎn) pwm 了。當(dāng)然還少不了頻率:pwm 主要就是控制頻率和占空比 的:這兩個(gè)因素分別通過(guò)兩個(gè)寄存器控制:timx_arr 和 timx_ccrx。arr 寄存器就是 自動(dòng)重裝寄存器

5、,也就是計(jì)數(shù)器記到這個(gè)數(shù)以后清零再開(kāi)始計(jì),這樣 pwm 的頻率就是 tim_frequency/(timx_arr-1)。在計(jì)數(shù)時(shí)會(huì)不停的和 ccrx 寄存器中的數(shù)據(jù)進(jìn)行比較,如 果小于的話是高電平或者低電平,計(jì)數(shù)值大于 ccrx 值的話電平極性反相。所以這也就控 制了占空比。下面是定時(shí)器 1 的配置代碼:gpio_inittypedef gpio_initstructure2;tim_timebaseinittypedef tim_timebasestructure;tim_ocinittypedef tim_ocinitstructure;tim_bdtrinittypedef tim_b

6、dtrinitstructure;/第一步:配置時(shí)鐘rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_gpiob|rcc_apb2periph_tim1,enable);/第二步,配置 goio 口/*tim1_ch1 引腳配置*/gpio_initstructure2.gpio_pin=gpio_pin_8;gpio_initstructure2.gpio_speed=gpio_speed_50mhz; gpio_initstructure2.gpio_mode=gpio_mode_af_pp; / 設(shè)置為復(fù)用浮空輸出gpi

7、o_init(gpioa,&gpio_initstructure2);/*tim1_ch1n 引腳配置*/ gpio_initstructure2.gpio_pin=gpio_pin_13;gpio_initstructure2.gpio_speed=gpio_speed_50mhz; gpio_initstructure2.gpio_mode=gpio_mode_af_pp; / 設(shè)置為復(fù)用浮空輸出gpio_init(gpiob,&gpio_initstructure2);/第三步,定時(shí)器基本配置tim_timebasestructure.tim_period=1000-1; / 自動(dòng)重裝載

8、寄存器的值 tim_timebasestructure.tim_prescaler=72-1; / 時(shí)鐘預(yù)分頻數(shù) tim_timebasestructure.tim_clockdivision=tim_ckd_div1; / 采樣分頻 tim_timebasestructure.tim_countermode=tim_countermode_up;/ 向上計(jì)數(shù) tim_timebasestructure.tim_repetitioncounter=0;/重復(fù)寄存器,用于自動(dòng)更新 pwm 占空比/第四步 pwm 輸出配置tim_timebaseinit(tim1, &tim_timebasest

9、ructure);tim_ocinitstructure.tim_ocmode=tim_ocmode_pwm2; / 設(shè)置為 pwm1 輸出模式tim_ocinitstructure.tim_pulse=500; / 設(shè)置占空 比時(shí)間tim_ocinitstructure.tim_ocpolarity=tim_ocpolarity_low; / 設(shè)置輸出 極性tim_ocinitstructure.tim_outputstate=tim_outputstate_enable; /使能該通道 輸出/下面幾個(gè)參數(shù)是高級(jí)定時(shí)器才會(huì)用到,通用定時(shí)器不用配置 tim_ocinitstructure.ti

10、m_ocnpolarity=tim_ocnpolarity_high; / 設(shè)置互補(bǔ)端輸出極性tim_ocinitstructure.tim_outputnstate=tim_outputnstate_enable;/ 使能互補(bǔ)端輸 出tim_ocinitstructure.tim_ocidlestate=tim_ocidlestate_reset; / 死區(qū)后輸出 狀態(tài)tim_ocinitstructure.tim_ocnidlestate=tim_ocnidlestate_reset;/ 死區(qū)后互補(bǔ)端輸 出狀態(tài)tim_oc1init(tim1,&tim_ocinitstructure);

11、/ 按 照指定參數(shù)初始化/第五步,死區(qū)和剎車功能配置,高級(jí)定時(shí)器才有的,通用定時(shí)器不用配置 tim_bdtrinitstructure.tim_ossrstate = tim_ossrstate_disable;/ 運(yùn)行模式下輸出選擇tim_bdtrinitstructure.tim_ossistate = tim_ossistate_disable;/空閑模式下輸出選 擇tim_bdtrinitstructure.tim_locklevel = tim_locklevel_off; / 鎖定設(shè)置 tim_bdtrinitstructure.tim_deadtime = 0x90; /死區(qū)時(shí)間

12、設(shè)置tim_bdtrinitstructure.tim_break = tim_break_disable; /剎車功能使 能tim_bdtrinitstructure.tim_breakpolarity = tim_breakpolarity_high;/剎車輸入極性 tim_bdtrinitstructure.tim_automaticoutput = tim_automaticoutput_enable;/ 自動(dòng)輸出使能tim_bdtrconfig(tim1,&tim_bdtrinitstructure);/第六步,使能端的打開(kāi)tim_oc1preloadconfig(tim1, tim_ocpreload_enable); / 使能 timx 在 ccr1 上的預(yù)裝載寄存 器tim_arrpreloadconfig(tim1, enable); /使能 timx 在 arr 上的預(yù)裝載寄存 器tim_cmd(tim1,enable); / 打開(kāi)tim2/下面這句是高級(jí)定時(shí)器才有的,輸出 pwm 必須打開(kāi)tim_ctrlpwmoutputs(tim1, enable); /pwm 輸出使能, 一定要記得打開(kāi)tim_oc1preloadconfig(),t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論