1. 程式人生 > >利用28335的epwm產生spwm波的總結

利用28335的epwm產生spwm波的總結

一、SPWM設計簡介

設計的內容是產生倍頻的SPWM波,也即是用的是同一個調製波,兩個橋臂上的載波相差180度。產生spwm時,利用TB產生載波,也即是三角波。(計數方式採用增減模式即可),CC中放的是要比較的數值,當TB中的值等於CC中的值就可產生相應的動作。此動作可由AQ進行設定。當達到一定條件的時候也可以觸發中斷。我採用的是規則取樣法,所以一個載波週期後產生中斷,在此中斷內修改比較暫存器的值。      

二、ePWM概要                        

28335有多個epwm模組,每個epwm模組可以產生2個波。這是28335的epwm模組的結構圖及外部連線圖。



其中EPWMxSYNCI為時間基準同步輸入,用來將時間基準計數器和ePWM模組同步。對於第一個ePWM模組,該訊號來自外部引腳,而其他模組該訊號來自其他ePWM模組。

EPWMxSYNCO為時間基準同步輸出。

三、ePWM各子模組講解


ePWM模組總共有7個模組:

3.1時間基準模組   ----------TB    

為輸出PWM產生時鐘基準TBCLK,配置PWM的時鐘基準計數器TBCTR,設定計數器的計數模式,配置硬體或軟體同步時鐘基準計數器,確定ePWM同步訊號輸出源;

TBCTL(控制暫存器)配置定時器的時鐘、計數模式、同步模式

TBSTS(狀態暫存器)

TBPHSHR(高速PWM用)

TBPHS(相位暫存器)計數器的起始計數位置,例如暫存器為0x0100則計數器從0x0100開始計數

TBCTR(計數器)

TBPRD(週期暫存器)設定計數器的計數週期。只有TBPRD(週期暫存器)有影子暫存器。


當TBCTL[PHSEN]置位的時候,若有同步訊號EPWMxSYNCI過來,此時該ePWM模組的時基計數器(TBCTR)將會自動裝載相位暫存器(TBPHS)儲存的值,然後從此值開始計數。也可直接向TBCTR寫入開始計數的值,但是隻要時鐘訊號一到就開始計數了,無法與上個ePWM模組保持一個相位的延時(不過似乎可以先計算出產生這樣一個延時的應該放入TBCTR的值)。

為了使下一級的ePWM模組與該ePWM模組之間有個延時,可以在下一級的TBPHS中賦給相應的值,然後由這一級的ePWM模組產生同步訊號EPWMxSYNCO來使下一級的ePWM載入TBPHS,從而完成相應的延時。如上圖所示,同步的方法有好多種,由TBCTL[SYNCOSEL]控制。(此級的EPWMxSYNCO接的是下一級的EPWMxSYNCI



3.2計數器比較模組----------CC

確定PWM佔空比,以及ePWM輸出高低電平切換時間;

CMPCTL (比較控制暫存器)設定CMPA、CMPB的過載模式

CMPAHR(高速PWM用),

CMPA(比較值暫存器A)設定EPWMxA的比較值,有影子暫存器。

CMPB(比較值暫存器B)設定EPWMxB的比較值,有影子暫存器。


3.3動作限定模組   ----------AQ

確定計數器和比較暫存器匹配時產生動作,即ePWM 高低電平的切換;

AQCTLA (輸出A比較方式控制暫存器)設定EPWMA的比較方式有CBD、CBU、CAD、CAU、PRD、ZRO,無影子暫存器,立即裝載

AQCTLB (輸出B比較方式控制暫存器)設定EPWMB的比較方式有CBD、CBU、CAD、CAU、PRD、ZRO,無影子暫存器,立即裝載

AQSFRC (軟體強制控制暫存器)設定AQCSFRC過載方式(RLDCSF),通過(OTSFB、ACTSFB)設定EPWMB、(OTSFA、ACTSFA)設定EPWMA啟動一次強制置位無效、置零、置高、反向,當OTSFB、OTSFA被寫1時,動作一次,寫0無效,無影子暫存器

AQCSFRC (軟體連續強制控制暫存器)可以強制EPWMA、EPWMB的輸出為low或high或AQCSFRC不起作用,有影子暫存器,當寄存期被載入後的第二個時鐘開始作用,如TBCLK=0時載入,TBCLK=1時開始起作用

說明:

CBD為TBCTR(計數器)與CMPB在down計數時相等使輸出為low或high或反向或不動作

CBU為TBCTR(計數器)與CMPB在up計數時相等使輸出為low或high或反向或不動作

CAD為TBCTR(計數器)與CMPA在down計數時相等使輸出為low或high或反向或不動作

CAU為TBCTR(計數器)與CMPA在up計數時相等使輸出為low或high或反向或不動作

PRD為TBCTR(計數器)與TBPRD(週期暫存器)相等時使輸出為low或high或反向或不動作

ZRO為TBCTR(計數器)計到零時使輸出為low或high或反向或不動作

注意:以上均是相等時起作用,其它時間不管,只有AQCSFRC(軟體連續強制控制暫存器)持續起作用

Action-qualifier (AQ) module比較方式預設模組配置如下:AQCTLA (輸出A比較方式控制暫存器)的CAU置高,CAD置低,其它無效。在初始化中配置。

AQCSFRC (軟體連續強制控制暫存器)通過AQSFRC(軟體強制控制暫存器)的RLDCSF配置為TBCTR(計數器)計到零時裝載,根據需要每次中斷配置CSFA置高、置低或軟體連續強制無效。其優先順序最高,強制時CAU置高,CAD置低不起作用,無效時CAU置高,CAD置低起作用。

AQSFRC(軟體強制控制暫存器)的ACTSFA配置為置低,當本週期軟體連續強制無效時,向OTSFA寫1,保證有效高週期的起始是低狀態,防止上一週期結束時為高。

3.4死區控制模組   ----------DB

配置輸出PWM上升沿或下降沿延時時間,也可以將A、B兩通道配置成互補模式,我做的逆變器就是將ePWM配置成互補模式。死區時間可以程式設計確定;

DBCTL(死區控制暫存器)設定S5,S4,S3,S2,S1,S0開關選擇的

DBRED(死區上升沿延時)上升沿延時時間

DBFED(死區下降沿延時)下降沿延時時間




死區控制中的極性控制這個暫存器,既然有這個選項,那麼一開始動作限定模組還選擇達到比較的值後epwmb的輸出是什麼幹啥呢?因為完全可以只選擇epwma輸出什麼,然後此處互補輸出就行了啊?
1. 上升沿和下降沿都是EPWMA的輸入波形來產生,EPWMB靠的是EPWMA的反相。高電平有效互補就是說輸出的電平還是PWMA是高電平。
2. 是可以這麼做呀,只要PWMA就可以產生互補波形。只不過C2000的PWM很靈活,滿足其他應用的需求。

所以我輸入選擇預設模式,輸出選擇高電平有效互補輸出的時候相當於EPWMxB的輸入沒有使用,EPWMxB的輸出是通過EPWMxA得到的。(可以通過上面的框圖得出,所以

對暫存器的配置功能不明白的時候或有疑問的時候可以看下該模組結構圖,這樣可能會使你明白,也能更好的決定選擇何種配置方案)

3.5PWM斬波模組 ----------PC

程式設計載波頻率

程式設計第一個脈衝寬度

程式設計第二個和後續脈衝的佔空比

可以不使用該功能


3.6錯誤控制模組   ----------TZ

當外部有錯誤訊號產生時,對PWM輸出進行相應處理,比如全置高,或拉低,或置為高阻態,從而起到保護作用。當然該功能也可以通過軟體強制產生;


3.7事件觸發模組   ----------EZ

使能ePWM中斷,使能ePWM觸發ADC取樣,確定事件產生觸發的速度和清除相關事件標誌位。

Event-trigger (ET) module中斷事件模組

ETSEL(中斷選擇暫存器)使能及事件源選擇(SOCA觸發ADC轉換,SOCB觸發ADC轉換,中斷)

ETPS(中斷預設暫存器)xxxCNT記錄時間發生次數,當與xxxPRD相等時,發出中斷訊號,xxxCNT停止計數,當標誌為清除時xxxCNT置零重新計數

ETFLG(中斷標誌暫存器)狀態標誌位,中斷時為1

ETCLR(中斷標誌清除暫存器)寫1清除相應標誌位

ETFRC(強制中斷暫存器)寫1強制相應中斷髮生

ePWM模組的7個模組就像一條生產線,一級一級的經過,但DSP更高階,可以實現通過配置,使得ePWM只經過我選擇的生產線,沒有被選擇上的就不要經過。例如,死區控制模組可以需要也可以不需要,這就看實際系統需不需要了。在實際使用ePWM時,正常的發出PWM波往往只要要配置TBCCAQDBET五個模組。

以上部分內容參考了這篇部落格http://blog.163.com/[email protected]/blog/static/164918622201310217233945/,在此表示感謝。

相關推薦

利用28335的epwm產生spwm總結

一、SPWM設計簡介 設計的內容是產生倍頻的SPWM波,也即是用的是同一個調製波,兩個橋臂上的載波相差180度。產生spwm時,利用TB產生載波,也即是三角波。(計數方式採用增減模式即可),CC中放的是要比較的數值,當TB中的值等於CC中的值就可產生相應的動作。此動作可由A

STM32產生SPWM

SPWM釋義 SPWM(Sinusoidal PWM)法是一種比較成熟的,目前使用較廣泛的PWM法。前面提到的取樣控制理論中的一個重要結論:衝量相等而形狀不同的窄脈衝加在具有慣性的環節上時,其效果基本相同。SPWM法就是以該結論為理論基礎,用脈衝寬度按正弦規律變化而和正弦波等效的PWM波形

H橋SPWM產生電路及死區電路的分析

1、 H橋電路 H橋的工作原理如下,正半波時Q1,Q4導通,Q2,Q3截止;負半波時Q2,Q3導通,Q1,Q4截止。而且要保證Q3和Q4,Q1和Q2不能同時導通。即Q3與Q4,Q1與Q2要有死區,所謂

appcan打包後產生的問題總結

appcan class 發現 過程 祖先 只需要 最終 light fun 以appcan為基礎的項目,最終需要打包後進行調試。在調試過程中,主要的樣式問題在蘋果手機上,下面將這些問題總結起來,以防下次再犯。 1:ios 7 以上的手機中,狀態欄與內容重疊: 問題描述:在

利用矩陣求斐那契數列

利用矩陣的快速冪求斐波那契數列的程式碼實現 #include<stdio.h> #include<string.h> #define MOD 1000000007 struct juzhen { long long aa[2][

idea配置spark開發環境時產生的錯誤總結

錯誤一 null>bin>winutils.exe not found 這種情況下只是需要winutils.exe檔案即可,不需要下載所有hadoop winutils.exe下載連結 然後放在hadoop/bin資料夾下,環境變數加上HAD

DE2實踐之WM8731產生正弦

經歷近三週的時間,終於搞定了wm8731產生1khz正弦波的那個DEMO。現在就將這三週來的收穫做一個記錄,希望大家與我共同分享,共同進步。 一.本DEMO 的目的 通過fpga控制音訊編解碼晶片wm8731產生一個1khz的正弦波,接上de2板上的耳機介面,試聽此正弦

利用MATLAB產生各種隨機數

Matlab中隨機數生成器 betarnd 貝塔分佈的隨機數生成器 binornd 二項分佈的隨機數生成器 chi2rnd 卡方分佈的隨機數生成器 exprnd 指數分佈的隨機數生成器 注:exprnd(a,b,c)為產生期望為a的b×c的隨機數矩陣,

Java利用BigInteger計算斐那契數列(不死神兔)

package demo01; /* * 1.用迴圈實現不死神兔 故事得從西元1202年說起,話說有一位義大利青年,名叫斐波那契。 在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔, 再過一個月就能生下一對小兔,並且此後每個月都生一對小

如何計算產生SPWM所需要的佔空比

在上一篇文章裡貼上了STM32產生SPWM的程式碼,我在編寫這些程式碼時最大的問題就是如何得到佔空比,就是程式碼中的陣列 Duty[]。他的思想就是對正弦波取樣,在取樣點出用PWM的佔空比來代替正弦波在該點的數值。最容易想到就是用定時器的ARR值乘以sin(2*pi*f*t

STM32產生SPWM

/** @author Mei Jilin @date 2013/9/2 @brief 加入生成SPWM部分 **/ #include "timer.h" #include "led.h" static uint16_t CCR3_Val = 1800

利用MATLAB計算SPWM脈衝寬度與並應用STM32輸出

轉自 光電科技協會 王誠博 http://blog.csdn.net/wcb425499094/article/details/76703042 先上一張spwm波形生成原理圖: 首先利用MATLAB產生三角波與正弦波疊加: [cpp] view plain copy print? %%

Android利用ffmpeg產生推流

目標 在安卓手機客戶端有一個視訊檔案,利用ffmpeg產生推流。 藉助nginx-rtmp-module推送給另一客戶端(簡單起見用PC上的VLC)。 VLC播放這個視訊流。 本次實驗重點是第一步,即利用ffmpeg產生推流。 1、獲得ffmpeg庫 1/1 可以直接在

R如何利用R產生隨機數

1)如何在[a,b]內產生n個隨機數 利用sample(a:b,n,replace) 當replace=T時是在[a,b]內有放回的隨機抽出n個整數 set.seed()是設定隨機種子 如

利用 python 產生測試資料 Faker

在專案開放過程中,總是需要生成測試資料來看平臺的展示效果,這時候大量的資料就成為了必須。 如果自己一點一點的做就太慢了,所以我們可以使用外部的模組。 faker 是 python 的一個模組,你可以

python:利用pandas進行繪圖(總結)繪圖格式

利用python進行資料分析 第八章:繪圖和視覺化 pandas繪圖工具 22.5 Plot Formatting(繪圖格式) 22.5.1 Controlling the Legend(圖例管理) You may set the legend arg

python:利用pandas進行繪圖(總結)繪圖工具

利用python進行資料分析 第八章:繪圖和視覺化 pandas繪圖工具 >>> from pandas.plotting import scatter_matrix >>> from pandas impor

unity中利用C#產生隨機不相同的一組數

using UnityEngine; using System.Collections; using System.Collections.Generic; public class game : M

如何利用隨機數產生驗證碼(java基礎知識)

pen lean display void 生成 font length break cdd   以前我們通用的驗證碼都是五個不同的大小寫字母,那麽今天我就帶大家學習一下利用Java基礎怎麽生成驗證碼。首先我們應該有一個清晰的思路:首先定義一個固定長度的數組用來存儲需要

分析筆記一:小產生的背景和歷史

小波分析最近在看哈工大教授冉啟文的小波分析的視頻,講的非常好,推薦給大家。這裏是第一講筆記。第一講:小波產生的背景和歷史一、“點”的概念(重要) 1、以前我們認為在一維空間,點就是一個數;在二維空間,點就是兩個數(x,y),N維空間的點 (x0,x1...xn)以此類推。 2、線性代數