前言
在做 BLDC 電機(jī)控制時,需要 ADC 的采樣時刻和定時器產(chǎn)生的 PWM 波形相配合,才能獲取準(zhǔn)確的采樣值, 本文介紹了 CW32F030 系列芯片通過運用 DMA 功能實現(xiàn)高級定時器和 ADC 的同步觸發(fā)采樣的功能。
▇PWM 輸出實現(xiàn)
1.1 輸出端口的配置
根據(jù) GPIO 復(fù)用功能分配表(完整表格請參閱 CW32F030 用戶手冊中表 9-2 GPIO 復(fù)用功能分配表),選取期 望輸出互補(bǔ) PWM 波形的引腳,如本例中 PA8、PA9、PA10、PB13、PB14、PB15,如下表所示:
▼ GPIO 復(fù)用功能分配表
PA8 和 PB13 組成一對互補(bǔ)輸出通道 CH1,PA9 和 PB14 組成一對互補(bǔ)輸出通道 CH2,PA10 和 PB15 組成一 對互補(bǔ)輸出 CH3。
步驟如下:
1. 將相關(guān)的 GPIO 設(shè)置為輸出;
2. 將 GPIO 配置為 ATIM 的比較輸出復(fù)用功能。
代碼如下:
1.2 ATIM 的配置
ATIM 包含一個 16 位的計數(shù)器 / 定時器和 7 個比較單元。7 個比較單元中,有六個具有捕獲功能,并且這 6 個捕獲 / 比較單元可以成對使用,組成互補(bǔ)輸出的功能。
本文以產(chǎn)生一個驅(qū)動 BLDC 電機(jī)所需的 20kHz 的三路互補(bǔ)輸出的 PWM 波形為例,選取 ATIM 的時基信號為 PCLK。
本例中 PCLK 為 64MHz,并通過 ATIM 的預(yù)分頻器進(jìn)行 16 分頻后,以 4MHz 頻率進(jìn)行計數(shù)。
為方便設(shè)定 ADC 的采樣時間,ATIM 采用中央對齊模式計數(shù),設(shè)置 ATIM 的自動重載寄存器(ARR)為 100, 則 ATIM 的將先從 0 累加至 99,再從 100 遞減至 1,故計數(shù)周期為 2 倍的 ARR 寄存器的值,即 PWM 的頻率 為 20kHz。
通過設(shè)置 ATIM 的控制寄存器(CR)的 COMP 位為 1,使得 PWM 以互補(bǔ)的方式輸出,CH1A 和 CH1B 的脈寬 由通道 1比較 /捕獲寄存器 A(CH1CCRA)決定,CH1B的輸出脈寬不再由通道 1比較 /捕獲寄存器 B(CH1CCRB) 決定,CH1CCRB 仍可用于設(shè)定 CH1B 比較匹配的值。CH2A 和 CH2B,CH3A 和 CH3B 與之類似。
在設(shè)置輸出 PWM 互補(bǔ)輸出時,可以對互補(bǔ)通道加入死區(qū)時間,由死區(qū)時間寄存器(DTR)控制。
ATIM 配置輸出 3 對互補(bǔ)帶死區(qū)的 PWM 波形,詳細(xì)配置代碼如下:
▼ 產(chǎn)生的 PWM 波形如下:
1.3 ADC 的配置
1.3.1 序列采樣
當(dāng)需求的采樣通道小于等于 4 路時,可以通過 ADC 的序列采樣模式實現(xiàn),并且可以通過 ATIM 的通道 1~3 比 較 / 捕獲寄存器 B 中任意一個寄存器設(shè)定 ADC 的采樣時刻,這些操作都可以由硬件自動完成,減輕了 CPU 的工作量。
以采樣 AIN0~AIN3 這 4 路輸入為例,設(shè)定采樣時刻為 ATIM 計數(shù)達(dá)到 ARR 時,其參考代碼如下:
上述方法完全由硬件實現(xiàn),不需要 CPU 和中斷的參與,執(zhí)行效率非常高,不足的地方是采樣通道限制為 4 路。
1.3.2DMA 擴(kuò)展采樣
如果需要對超過 4 路的模擬量進(jìn)行采樣,則需要結(jié)合 DMA 的功能,以實現(xiàn)較少的 CPU 參與。其思路如下:
1. ADC 配置為單通道單次轉(zhuǎn)換,完成轉(zhuǎn)換后硬件觸發(fā) DMA;
2. DMA 的 CH1 用于將 ADC 的轉(zhuǎn)換結(jié)果傳輸?shù)?RAM 中,本例中將采樣 6 個 ADC 通道,因此傳輸次數(shù) CNT 為 6,源地址固定為 ADC 的 RESULT0 寄存器,目的地址需要遞增;
3. DMA 的 CH2 用于更改 ADC 的采樣通道,當(dāng) ADC 轉(zhuǎn)換完成后,從 RAM 中取 ADC 的通道配置參數(shù),自 動配置 ADC 的寄存器值,因此源地址為 RAM,地址遞增,目的地址為 ADC 的通道控制寄存器;
4. DMA 的 CH3 用于再次啟動 ADC,因為 ADC 配置為單次轉(zhuǎn)換,當(dāng)轉(zhuǎn)換完成后,ADC 自動停止轉(zhuǎn)換,所 以需要通過 DMA 向 ADC 的轉(zhuǎn)換啟動寄存器置位,以再次啟動 ADC 轉(zhuǎn)換;
5. DMA 的 CH1 傳輸完成后,ADC 的 6 路轉(zhuǎn)換也完成了,并且轉(zhuǎn)換結(jié)果也被傳輸?shù)?RAM,可通過 CH1 的 傳輸完成中斷,將 DMA 的參數(shù)重新配置,就實現(xiàn)了多路 ADC 的循環(huán)采樣;
6. 通過 ATIM 的比較通道 4,去觸發(fā) DMA 的 CH4,向 ADC 的轉(zhuǎn)換啟動寄存器置位,啟動 ADC。
其參考代碼如下:
? ADC 的配置:
ADC 配置為單次單通道采樣,采樣完成后可觸發(fā) DMA。
? DMA 的配置:
? ATIM 需要在之前的配置上增加通道 4 的設(shè)置,增加的代碼如下:
這種方法可以實現(xiàn)多于 4個模擬通道的采樣,采樣結(jié)果自動保存在內(nèi)存中,并且僅在最后一個通道采樣完成后, 進(jìn)入一次中斷服務(wù)程序?qū)?DMA 的配置進(jìn)行復(fù)位,所以 CPU 的開銷是比較小的,而且可以通過 ATIM 的比較 通道 4 靈活設(shè)置采樣時機(jī)。
-
微控制器
+關(guān)注
關(guān)注
48文章
7558瀏覽量
151460 -
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44560瀏覽量
635544 -
mcu
+關(guān)注
關(guān)注
146文章
17156瀏覽量
351280
發(fā)布評論請先 登錄
相關(guān)推薦
評論