DSP28379D ePWM同步觸發差分AD

2021-10-04 09:33:05 字數 3547 閱讀 4831

介紹使用epwm週期觸發16位的差分ad取樣,保證每次取樣在控制週期的起始位置。因與epwm的內在聯絡,可以在諧波的固定位置取樣,有利於取樣的穩定性,使數字控制系統更標準,利於傳函應用,避免影響到與時間密切相關的一些數字濾波器。

重點放於et上,基礎的pwm發波不再贅述。事件觸發子模組管理時基模組、計數比較模組和數字比較模組生成的事件,以在發生選定事件時向cpu生成中斷,或向adc生成轉換脈衝的開始。計數比較模組共有四個:cmpa、cmpb、cmpc、cmpd。前兩者通常用於控制pwm的占空比,tbprd的數值控制pwm的週期,那麼可以通過設定etsel、etps兩個暫存器,使能並選擇在何時產生觸發事件。可以選擇觸發條件為tbctr=0或者tbctr=tbprd,產生adc的同步觸發訊號。當tbctr為在增減計數模式時,即生成pwm為中心對稱模式,則可以理解為,可以在每個pwm週期開始或者中間,可以進行ad同步轉換。再進一步,可以選定在差分輸入電壓訊號的波峰或者波谷進行取樣,避免一會兒在紋波的波峰取樣,一會兒在波谷,引起數值不穩。

建立在資料手冊、技術參考手冊和官方例程理解的基礎上,闡明epwm子模組et的使用配置流程:

① 設定時基模組工作模式。配置時基週期,計數模式,分頻係數等,時基週期為電機控制週期。

② 選擇產生socx中斷的條件。socxsel共八種模式,不同的模式可以選擇不同的觸發條件。

③ 設定觸發事件分頻係數。etps可以設定三種方式,1.中斷條件滿足即觸發(不分頻);2.中斷條件滿足兩次後觸發(二分頻);3.中斷條件滿足三次後觸發(三分頻)。

④使能socx中斷。socxen=1,當上週所講adc也配置好之後,開啟中斷。

void

initepwm1

(void

)

片上的adc支援12位和16位取樣精度,12位僅為單端轉換使用,16位僅為差分轉換使用。adc模組支援多重觸發源,包括定時器0/1/2、epwm等。

建立在資料手冊、技術參考手冊和官方例程理解的基礎上,闡明adc模組的使用配置流程:

①配置adcclk時鐘。dsp28379d共有4個adc模組,使用時需要分別配置4個模組的時鐘。adc的取樣保持電路由系統時鐘sysclk計時,而adc的轉換過程由adcclk計時。

②配置取樣精度和模式。12位精度對應單端模式,16位精度對應差分模式。這其中存在乙個重新注入trim值的過程,與ti出廠時adc的標定有關,例程只給出12位精度時的線性修剪校正,16位精度尚未明確,可能不需要做線性修剪校正。

③配置中斷脈衝發生位置(adcint flag)。存在兩種位置:1.在取樣保持結束時刻;2.在轉換結束時刻。通常使用2位置,將adcint flag置位,此時轉換結果已存入結果暫存器中。

④adc加電。給一定的時間讓adc加電執行。

⑤配置epwm模組。將epwm的socx、cmpx、tbprd、tbctl等暫存器,按照需要賦值,產生adc的socx單元的同步觸發訊號。需要理解事件觸發子模組。

⑥配置adc的soc。 根據硬體設計的實際引腳情況,設定取樣保持視窗時間,選擇與步驟⑤對應的觸發方式,使能相應的標誌位功能,並復位。

⑦中斷服務程式中讀取adc結果暫存器中的資料。控制程式可以放在adc中斷中。

adc同步取樣的關鍵在於:

①盡量保證每個adc的soc配置相同(設定相同的取樣保持時間與觸發源)。

②由於硬體設計不一定保證每個adc下的soc數量相同,故觸發源觸發時間間隔,應大於擁有soc數量最多的adc完成轉換的總時長。

③若存在不同取樣精度,應並行處理。同一時刻保證不同的adc是相同的取樣精度。

//  adca

//write configurations

adcaregs.adcctl2.bit.prescale =6;

//set adcclk divider to /4

adcsetmode

(adc_adca, adc_resolution_16bit, adc_signalmode_differential)

;//set pulse positions to late

adcaregs.adcctl1.bit.intpulsepos =1;

//power up the adcs

adcaregs.adcctl1.bit.adcpwdnz =1;

//delay for 1ms to allow adc time to power up

delay_us

(1000);

...// adca

adcaregs.adcsoc14ctl.bit.chsel =

2;

adcaregs.adcsoc15ctl.bit.chsel =

4;

adcaregs.adcsoc14ctl.bit.acqps =

139;

//sample window is 140 sysclk cycles

adcaregs.adcsoc15ctl.bit.acqps =

139;

//sample window is 140 sysclk cycles

adcaregs.adcsoc14ctl.bit.trigsel =5;

//trigger on epwm1 soca

adcaregs.adcsoc15ctl.bit.trigsel =5;

//trigger on epwm1 soca

adcaregs.adcintsel1n2.bit.int1sel =15;

//end of soc15 will set int1 flag

adcaregs.adcintsel1n2.bit.int1e =1;

//enable adcint1

adcaregs.adcint***clr.bit.adcint1 =1;

//make sure int1 flag is cleared..

. interrupt void

adca1_isr

(void

) piectrlregs.pieack.all = pieack_group1;

}

受限於條件,疫情期間家裡蹲。使用12位的dac輸出(0~3v),16位的adc進行取樣,觸發條件為epwm的載波計數為0。如下圖所示,簡單地換算一下,我們可以看到,功能實現完畢。

ti的c2000ware是非常值得參考的,雖然不能面面俱到,但是給出思路,有跡可循。再者,技術參考手冊和資料手冊需要配合使用,才能不遺漏一點,都是些比較細節的東西,配置難度不高,關鍵是看使用者是否真正想要使用好數字控制。如有不縝密的地方,歡迎大佬指點。

《tms320f2837xd dual-core microcontrollers technical reference manual》adc、epwm、dac章節

《tms320f2837xd dual-core microcontrollers datasheet》模擬外設章節

《launchxl-f28379d overview》

c2000ware有關adc的所有例程

定點dsp與浮點dsp的比較

定點運算dsp在應用中已取得了極大的成功,而且仍然是dsp應用的主體。然而,隨著對dsp處理速度與精度 儲存器容量 程式設計的靈活性和方便性要求的不斷提高 自80年代中後期以來,各dsp生產廠家陸續推出了各自的32bit浮點運算dsp。和定點運算dsp相比,浮點運算dsp具有許多優越性 浮點運算ds...

dsp經典書籍

1 linear systems and signals b.p.lathi 這本書個人覺得很不錯,是一本線性系統和訊號的入門好書。可以適用於通訊 電路 控制等專業。雖說是入門的好書,但是本書的編排是內容由淺入深,講述可是深入淺出。我通 讀全書後,覺得深有體會,看這本書就像在看 一般,對於乙個話題的...

DSP小數變換

在dsp世界中,由於dsp晶元的限制,經常使用定點小數運算。所謂定點小數,實際上就是用整數來進行小數運算。下面先介紹定點小數的一些理論知識,然後以c語言為例,介紹一下定點小數運算的方法。在ti c5000 dsp系列中使用16位元為最小的儲存單位,所以我們就用16位元的整數來進行定點小數運算。先從整...