日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SPWM基本原理详解(图文并茂+公式推导+C程序实现)

發布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SPWM基本原理详解(图文并茂+公式推导+C程序实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

加入技術交流群

基本原理

SPWM的全稱是(Sinusoidal PWM),正弦脈沖寬度調制是一種非常成熟,使用非常廣泛的技術;

之前在PWM的文章中介紹過,基本原理就是面積等效原理,即沖量相等而形狀不同的窄脈沖加在具有慣性的環節上時,其效果基本相同 。

換句話說就是通過一系列形狀不同的窄脈沖信號,相對應時間的積分相等(面積相等),其最終效果相同

所以SPWM就是輸入一段幅值相等的脈沖序列去等效正弦波,因此輸出為高的脈沖時間寬度基本上呈正弦規律變化;

這里通常使用的采樣方法是:自然采樣法和規則采樣法;

自然采樣法

自然采樣法是用需要調制的正弦波與載波鋸齒波的交點,

來確定最終PWM脈沖所需要輸出的時間寬度,最終由此生成SPWM波;

具體如下圖所示,這里會對局部①部分進行簡單分析,下面進一步介紹;

局部①的情況如下圖所示;簡單分析一下整個圖形的情況;

  • 鋸齒波和調制正弦波的交點為AB
  • 因此A點所需時間為T1B點所需時間為T2
  • 所以在該周期內,PWM所需要的脈沖時間寬度Ton滿足:Ton=T1+T2T_{on} = T_1 + T_2Ton?=T1?+T2?
  • 最終結論就是,只要求出A點B點位置,就可以求出TonT_{on}Ton?

這里對于求解A,B位置的推導不做介紹,但是計算量比較大,因此在微處理器中進行運算會占用大量資源,下面再介紹另一種優化的采樣方法:規則采樣法

規則采樣法

根據載波PWM的電壓極性,一般可以分為單極性SPWM和雙極性SPWM;下面進一步介紹;

單極性

單極性SPWM在正弦波的正版周期,PWM只有一種極性,在正弦波的負半周期,PWM同樣只有一種極性,但是與正半周期恰恰相反,具體如下圖所示;下面取正弦波的正半周期的情況進行分析;

正弦波的正半周期整體如下所示;由圖中我們可以知道以下幾點;

  • 載波PWM的周期為T
  • 線段BO為當前這個等腰三角形的垂線;
  • 線段BO與正弦曲線 sin(wt)sin(wt)sin(wt) 相較于點A
  • 所以在該周期內T1=T2T_1=T_2T1?=T2?,PWM所需要的脈沖時間寬度Ton滿足:Ton=T1+T2T_{on} = T_1 + T_2Ton?=T1?+T2?

具體的推導過程如下:

  • 第一步:由于O點的位置比較好確認,因此,線段AO=sin(wto)AO = sin(wt_o)AO=sin(wto?)

  • 第二步:這里載波鋸齒波的最大幅值為1,因此線段BO=1BO = 1BO=1

  • 第三步:根據初中學過的相似三角形定理,滿足:
    {BOAO=TT1+T2T1=T2AO=sin(wto)BO=1Ton=T1+T2\begin{cases} \cfrac{BO}{AO} = \cfrac{T}{T_1 + T_2}\\ \\ T_1=T_2\\ \\ AO=sin(wt_o)\\ \\ BO=1\\ \\ T_{on}=T_1+T_2 \end{cases} ??????????????????????????????????????AOBO?=T1?+T2?T?T1?=T2?AO=sin(wto?)BO=1Ton?=T1?+T2??

最終簡化得到:AOBO=TonT→Ton=Tsin(wto)\cfrac{AO}{BO} = \cfrac{T_{on}}{T} \rightarrow T_{on}=Tsin(wt_o)BOAO?=TTon??Ton?=Tsin(wto?)

這里對載波的幅值做了歸一化處理,如果鋸齒波的最大值為UUU,正弦波的幅值最大為UcU_cUc?,則Ton=TUcsin(wto)UT_{on} = \cfrac{TU_csin(wt_o)}{U}Ton?=UTUc?sin(wto?)?;

雙極性

只要符合面積等效原理,PWM還可以是雙極性的,具體如下圖所示;這種調制方式叫雙極性SPWM,在實際應用中更為廣泛。

如何編寫程序

上面講到這里PWM的TonT_{on}Ton?時間滿足:

Ton=TUcsin(wto)UT_{on} = \cfrac{TU_csin(wt_o)}{U}Ton?=UTUc?sin(wto?)?

其中UcU_cUc?為正弦波幅值,UUU為載波鋸齒波幅值;

那么下面以STM32為例,介紹以下如何進行程序編寫;

首先得先STM32是如何產生PWM?

通過數據手冊可以知道,STM32通過TIM輸出PWM,這里有幾個寄存器;

  • 計數寄存器:CNT
  • 比較寄存器:CCR (決定了占空比,決定了脈沖寬度)
  • 自動重裝寄存器:AAR(決定了PWM的周期T)

可能這么說,還是云里霧里的,先看下圖;

STM32中PWM的模式有普通的PWM,和中央對齊的PWM,上圖使用的就是中央對齊PWM;

產生PWM的過程可以分為以下幾個過程;

  • 第一步:配置好TIM,通常時基和ARR都會配置好,這時候PWM的周期就已經被設定好了,另外時基決定了CNT計數寄存器增加一次技術所需的時間;
  • 第二步:剛開始,CNT<CCR,并且CNT開始增加,這時候PWM的輸出都是低電平;當CNT>CCR之后,PWM輸出為高電平;
  • 第三步:當CNT的值等于AAR之后,CNT開始減少,同理CNT<CCR,PWM的輸出低電平;當CNT>CCR,PWM輸出為高電平;
  • 第四步:循環上述三個步驟;

程序中如何實現?

從上述STM32產生PWM的過程中不難發現,TonT_{on}Ton?滿足;
Ton=ARR?CCRARR?①T_{on}=\cfrac{{ARR-CCR}}{ARR} \cdots ① Ton?=ARRARR?CCR??
上一節推導的公式如下:
Ton=Ucsin(wto)U?②T_{on} = \cfrac{U_csin(wt_o)}{U} \cdots ② Ton?=UUc?sin(wto?)??
結合①式和②式,可以得到:
CCR=ARR?Ucsin(wto)U?ARR?③CCR = ARR-\cfrac{U_csin(wt_o)}{U}*ARR \cdots ③ CCR=ARR?UUc?sin(wto?)??ARR?

上面公式中用CCR表示CCR寄存器中的值,ARR表示ARR寄存器中的值;

最后需要做的三件事

  • 計算出ARR,一般配置TIM定時器的時候能在數據手冊找到公式;
  • 調制比,也就是UcU\cfrac{Uc}{U}UUc?的系數;
  • 根據③式生成正弦表,然后查表(實時計算因為涉及到較多運算量,所以利用查表,空間換時間,提高效率),利用PWM的事件去觸發中斷,更新下一次CCR的值

正弦函數表

const uint16_t indexWave[] = {0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 89, 98,107, 116, 125, 133, 142, 151, 159, 168, 176,184, 193, 201, 209, 218, 226, 234, 242, 249,257, 265, 273, 280, 288, 295, 302, 310, 317, 324, 331, 337, 344, 351, 357, 364, 370, 376, 382, 388, 394, 399, 405, 410, 416, 421, 426, 431, 436, 440, 445, 449, 454, 458, 462, 465, 469, 473, 476, 479, 482, 485, 488, 491, 493, 496, 498, 500, 502, 503, 505, 506, 508, 509, 510, 510, 511, 512, 512, 512, 512, 512, 512,511, 510, 510, 509, 508, 506, 505, 503, 502,500, 498, 496, 493, 491, 488, 485, 482, 479,476, 473, 469, 465, 462, 458, 454, 449, 445, 440, 436, 431, 426, 421, 416, 410, 405, 399, 394, 388, 382, 376, 370, 364, 357, 351, 344, 337, 331, 324, 317, 310, 302, 295, 288, 280, 273, 265, 257, 249, 242, 234, 226, 218, 209, 201, 193, 184, 176, 168, 159, 151, 142, 133, 125, 116, 107, 98, 89, 81, 72, 63, 54, 45, 36,27, 18, 9, 0 };

中斷服務函數:

extern uint16_t indexWave[]; extern __IO uint32_t rgb_color;/* 呼吸燈中斷服務函數 */ void BRE_TIMx_IRQHandler(void) { static uint16_t pwm_index = 0; //用于PWM查表static uint16_t period_cnt = 0; //用于計算周期數static uint16_t amplitude_cnt = 0; //用于計算幅值等級if (TIM_GetITStatus(BRE_TIMx, TIM_IT_Update) != RESET) //TIM_IT_Update{ amplitude_cnt++;//每個PWM表中的每個元素有AMPLITUDE_CLASS個等級,//每增加一級多輸出一次脈沖,即PWM表中的元素多使用一次//使用256次,根據RGB顏色分量設置通道輸出if(amplitude_cnt > (AMPLITUDE_CLASS-1)){ period_cnt++;//每個PWM表中的每個元素使用period_class次if(period_cnt > period_class){ //標志PWM表指向下一個元素pwm_index++; //若PWM表已到達結尾,重新指向表頭if( pwm_index >= POINT_NUM){pwm_index=0;}//重置周期計數標志period_cnt = 0;}//重置幅值計數標志amplitude_cnt=0; }else{ //每個PWM表中的每個元素有AMPLITUDE_CLASS個等級,//每增加一級多輸出一次脈沖,即PWM表中的元素多使用一次//根據RGB顏色分量值,設置各個通道是否輸出當前的PWM表元素表示的亮度//紅if(((rgb_color&0xFF0000)>>16) >= amplitude_cnt) {//根據PWM表修改定時器的比較寄存器值BRE_TIMx->BRE_RED_CCRx = indexWave[pwm_index]; }else{//比較寄存器值為0,通道輸出高電平,該通道LED燈滅BRE_TIMx->BRE_RED_CCRx = 0; }//綠if(((rgb_color&0x00FF00)>>8) >= amplitude_cnt){//根據PWM表修改定時器的比較寄存器值BRE_TIMx->BRE_GREEN_CCRx = indexWave[pwm_index]; }else{//比較寄存器值為0,通道輸出高電平,該通道LED燈滅BRE_TIMx->BRE_GREEN_CCRx = 0; } //藍if((rgb_color&0x0000FF) >= amplitude_cnt){//根據PWM表修改定時器的比較寄存器值BRE_TIMx->BRE_BLUE_CCRx = indexWave[pwm_index]; }else{//比較寄存器值為0,通道輸出高電平,該通道LED燈滅 BRE_TIMx->BRE_BLUE_CCRx = 0; }//必須要清除中斷標志位TIM_ClearITPendingBit (BRE_TIMx, TIM_IT_Update); }} }

總結

本文簡單介紹了SPWM的原理和調制方法,推導了SPWM的PWM脈沖寬度的計算時間,最后給出了基于STM32單片機產生SPWM驅動呼吸燈的部分代碼,完整代碼關注公眾號私信發送SPWM獲取

由于作者能力和水平有限,文中難免存在錯誤和紕漏,請不吝賜教。

加入技術交流群

總結

以上是生活随笔為你收集整理的SPWM基本原理详解(图文并茂+公式推导+C程序实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产乱淫av片免费看 | av高清不卡 | 国产av人人夜夜澡人人爽麻豆 | 99精品免费视频 | 欧美一区二区三区免费视频 | 欧美美女在线 | 国产高清久久 | 51 吃瓜网 | 成人做受黄大片 | 亚洲精品在线播放视频 | 精品91久久久 | brazzers欧美极品少妇 | 久久久久久国产精品三级玉女聊斋 | 天天澡天天狠天天天做 | 999久久| 欧美精品国产精品 | 亚洲69 | 男女视频免费 | 国产不卡毛片 | 中文字幕一区二区三区四区五区 | 中文字幕一区二区三区久久久 | 丁香伊人 | 欧美一区二区三区在线视频 | 日日噜噜噜噜久久久精品毛片 | 亚洲免费av一区二区 | 操碰视频在线 | 日日夜夜免费精品 | 在线免费看av网站 | 亚洲字幕av一区二区三区四区 | 久久精品片| 日本黄区免费视频观看 | 亚洲成人av在线播放 | 欧美日韩一二三四区 | 高潮毛片又色又爽免费 | 国产一区精品在线 | 欧美顶级少妇做爰 | 9191久久 | 有码一区| 精品999视频| 欧美亚色| 黄色网页免费在线观看 | av福利在线免费观看 | 亚洲精品xxxx | 久久性感美女视频 | 粉嫩小泬无遮挡久久久久久 | 国产福利在线播放 | 欧美色综合网站 | 欧美激情久久久久久久 | 国产精品久久国产精麻豆96堂 | 少妇高潮一区二区三区99 | 欧美在线色 | 色婷婷综合久久 | 欧美美女视频 | 美国一级片网站 | 亚洲av无码乱码在线观看性色 | 九色网址| 多毛的亚洲人毛茸茸 | 日韩在线播放av | 日韩精品一区二区三区不卡 | 91国产一区| 深爱开心激情网 | 在线一区av | 亚洲视频在线观看网址 | 欧美日韩一区二区在线观看 | 午夜在线观看免费视频 | 国产传媒第一页 | 啊av在线| 成人在线观看一区二区 | 欧美精品在线视频观看 | 国产精品国产三级国产三级人妇 | 色臀| 欧美福利网| 三级性生活视频 | 超碰97在线人人 | 韩国无码av片在线观看网站 | 久久久久香蕉视频 | 七七久久| 欧美二区在线 | 波多野吉衣一二三区乱码 | 69视频在线观看免费 | 国产精品av在线 | 风间由美在线观看 | 欧美卡一卡二 | 伊人成人在线观看 | av这里只有精品 | 天天操夜夜欢 | 九七人人爽 | 欧美区一区二区 | 涩视频在线观看 | 精品国产成人 | 国内精品国产成人国产三级 | 天天操天天射天天爱 | 91免费看国产 | 欧美日韩免费 | 国产真人真事毛片 | 亚洲国产综合视频 | 天天草视频 | 免费中文字幕在线观看 | 日韩3p |