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