女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

本來同步的信號為何有相差了?

茶話MCU ? 來源:茶話MCU ? 2023-03-08 09:44 ? 次閱讀

有人使用STM32H7系列芯片開發產品,其中用到TIM1/TIM8兩個定時器做PWM輸出,并且TIM1/TIM8建立起主從關系同時啟動,使用完全相同的時間參數和PWM配置,各自輸出3路同頻同相的PWM驅動信號。不過,在使用過程中,可能時不時地需要暫停兩個定時器的輸出,等到適當時機再啟動全部通道PWM輸出。可他發現,2個定時器的PWM輸出剛開始還同步得好好的,但隨著程序的運行,一段時間后,來自兩個定時器的PWM輸出明顯不再同步了,而是出現了相移。

我這里各選TIM1/TIM8的CH1來做說明。比方說,程序剛開始運行時,來自2個定時器的2個通道PWM輸出是完全同步的,如下圖所示:

c67b6b32-bcfb-11ed-bfe3-dac502259ad0.png

LATER……

經過一段時間后,2個定時器的PWM輸出變得有相差了,就像下面的樣子,兩個定時器的PWM輸出相差隨著程序的運行還在不停變化,輸出不再有同步可言。

c68d8e2a-bcfb-11ed-bfe3-dac502259ad0.png

經過測試發現,如果沒有中途時不時的通道啟、停動作,2個定時器的PWM輸出倒是一直同步得很好。也就是說,中途不時地對輸出通道的啟、停導致了PWM輸出的相移。

查看了他的相關操作代碼,大致是這樣操作的。【下面是我參考客戶寫法重寫的驗證代碼。TIM8是MASTER,TIM1是SLAVE。功能簡單、清晰,就是讓來自TIM1和TIM8的2個通道先運行一會,然后暫停一會,這樣循環。下面代碼重點看while(1)循環體。】

HAL_TIM_PWM_Start(&htim1,  TIM_CHANNEL_1); //Start PWM of TIM1_CH1
HAL_TIM_PWM_Start(&htim8,  TIM_CHANNEL_1); //Start PWM of TIM8_CH1
。。。。。。
while (1)
  {
   HAL_TIM_PWM_Stop(&htim1,  TIM_CHANNEL_1);//Stop PWM of TIM1_CH1
   HAL_TIM_PWM_Stop(&htim8,  TIM_CHANNEL_1);//Stop PWM of TIM8_CH1


    HAL_Delay(2000);
    
  HAL_TIM_PWM_Start(&htim1,  TIM_CHANNEL_1); //Start PWM of TIM1_CH1
  HAL_TIM_PWM_Start(&htim8,  TIM_CHANNEL_1); //Start PWM of TIM8_CH1


    HAL_Delay(2000);
  }

使用上面測試代碼運行一陣子后,本來同步得很好的2路PWM波形就漸漸產生相移了。

這里調用的HAL_TIM_PWM_Stop()函數來關閉指定通道的PWM輸出,是有效的。不過,當我們點進該函數里面去閱讀時,該函數不僅關閉了相應通道的輸出功能,連計數器也關閉了。下面截圖是該函數的內容,其中箭頭所指是關閉定時器的計數器的代碼。

c6b2dd10-bcfb-11ed-bfe3-dac502259ad0.png

根據客戶的需求,每次關閉通道輸出只是臨時性的,每次一同把計數器也關斷似乎太過了,不是很合適的做法,明顯不必要。那么,如果我們把這個函數換成只針對定時器通道的輸出功能做關閉、開啟的函數會怎么樣呢?

在HAL庫里,有個函數就是實現此功能的:

//關閉通道輸出功能

TIM_CCxChannelCmd(TIMx, TIM_CHANNEL_1, TIM_CCx_DISABLE);

//啟用通道輸出功能

TIM_CCxChannelCmd(TIMx, TIM_CHANNEL_1, TIM_CCx_ENABLE);

我們把前面的測試代碼改換成下面的寫法再來驗證。

HAL_TIM_PWM_Start(&htim1,  TIM_CHANNEL_1); //Start PWM of TIM1_CH1
HAL_TIM_PWM_Start(&htim8,  TIM_CHANNEL_1); //Start PWM of TIM8_CH1
。。。。。。
while (1)
  {
TIM_CCxChannelCmd(htim1.Instance,TIM_CHANNEL_1,TIM_CCx_DISABLE);//關閉輸出
TIM_CCxChannelCmd(htim8.Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); //關閉輸出


    HAL_Delay(2000);
    
TIM_CCxChannelCmd(htim1.Instance,TIM_CHANNEL_1,TIM_CCx_ENABLE);//啟用輸出
TIM_CCxChannelCmd(htim8.Instance,TIM_CHANNEL_1,TIM_CCx_ENABLE);//啟用輸出


    HAL_Delay(2000);
  }

針對修改過的測試代碼進行驗證,結果發現來自2個定時器的PWM輸出同步得很好很穩定,不飄不移了。

第2種新寫法跟原寫法的最大差別就在于-----新寫法的代碼里對通道輸出做啟停操作時完全不涉及計數器的開、關, 2個TIMER的計數器自始至終就不曾受到其它干預而影響正常計數,一直在持續地、按部就班地、周期性地計數,因為完全相同的時間參數,所以2個計數器的計數也保持著很好的同步。

現在的問題是,為何第一種寫法會讓2個定時器的PWM輸出產生相移呢?

原因就出在使用HAL_TIM_PWM_Stop()函數來關閉通道輸出這個做法上,這里調用它來實現通道的關閉不合理。前面我們分析了,該函數不僅關閉通道輸出,而且還停止了相應計數器。我們看看其中的兩行關閉通道PWM輸出的代碼:

c6cc6d16-bcfb-11ed-bfe3-dac502259ad0.png

在程序里面,一前一后,即先停止TIM1的計數器,然后才停止TIM8的計數器。顯然,因為這個先后關系,導致TIM8停止時總要比TIM1多計些數。這里我們簡單點以便于溝通,假設TIM8停止計數時比TIM1多計2個數。也就是說每次對2個通道做關閉操作時,同時對2個計數器也做一次停止操作,每次對定時器的停止操作使得TIM8比TIM1多計2個數。隨著這種操作次數的增加,每次重新啟動2個定時器時,2個計數器的起點值的差距也在增加【當然,這個差距變化可能會有周期性】,最終導致2個定時器的PWM輸出產生了相移,而且相移還在不斷變化。

關于頻繁啟停通道導致2個計數器每次停止后再次啟動時的計數器起始值的差值總在變化的結論,我換個比較通俗形象的類比說法來解釋。

假設有2個運動員A和B,下圖中的紅星和綠星分別代表這兩個運動員。他倆經常一起繞圈跑步訓練,跑步速度一樣。我們現在模擬2個場景。

第一個場景,就是他倆一起從某點開始跑步,要跑就一起跑,要停就一起停。顯然,這樣的話,任何時候他倆都是在一起,物理上來看二人相對靜止。此場景對應下圖中的左邊圓圈情形。

第二個場景,還是他倆一起繞圈跑步,跑步速度始終一樣,不過這時旁邊多了個教練。當他倆從某點開始跑起來后,若要停下歇息需得到教練指令。這個教練有個習慣,每次都是先叫A停下,然后才叫B停下歇息,導致每次2個人停下歇息時,B總要比A多跑兩步,但二人每次重新起跑時又是同時的。就這樣持續,不難想象二人之間的距離總是在變化,再也看不到場景1情形下的相對靜止了。這兩個運動員在跑道上的間距變化就像基于第一種代碼寫法下的2個計數器值的差值變動。見下圖的右邊圓圈紅星與綠星的間距變化。這里只畫一圈示意下。

c6e4c8f2-bcfb-11ed-bfe3-dac502259ad0.png

我們知道,這里定時器的PWM輸出是根據TIMER比較器的值與計數器值的比較結果而決定其輸出電平。盡管2個定時器的基本配置參數都一樣,但由于頻繁啟停計數器,導致每次啟動時計數初始值都在變化,進而導致PWM波形輸出不再保持同步。

這樣說可能有點抽象,我們不妨結合下面圖形看看會直觀點。下圖帶箭頭斜線示意計數方向、計數起點、終點。紅色虛線表示2個定時器CH1設置的CCR值的水平。

基于客戶原寫法代碼,假設經過多次針對通道的啟、停操作后的某個時刻【Tx】重新啟動2個定時器及PWM輸出,A,B兩點表示TIM1和TIM8計數器在Tx時刻的起始值,其它配置參數都一樣。下面是基于應用當前場景,分別來自TIM1/TIM8的2路PWM輸出波形示意圖。【這里假定TIM1和TIM8的使用相同配置,且當CCR>CNT時輸出高,否則輸出低】

c7022622-bcfb-11ed-bfe3-dac502259ad0.png

因2個定時器采用完全相同的配置,所以2路PWM波形特征是一樣的。但由于啟動時刻2個定時器的計數初值不一樣,輸出的波形卻有了相差,如上圖所示。

這里或許有人會問,原始寫法里調用HAL_TIM_PWM_Start();是不是也不太合理呢?談不上不合理,但用得不太合適,從功能實現上看不夠簡潔、利落。這里TIM1/TIM8基于觸發啟動的主從關系,作為主定時器的TIM8的啟動放在TIM1的后面就可以了,TIM8啟動的同時啟動從TIM1。

結合這里的應用,改過寫的第2種代碼比較清爽簡潔。那么,順便問一句,可否在原寫法的代碼基礎上不做大的改寫,只做局部微調來解決問題呢?答案是肯定的,我也做過較長時間的驗證測試。有興趣的話可以自行研究下,其實前面文字里也隱含了答案。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PWM
    PWM
    +關注

    關注

    116

    文章

    5344

    瀏覽量

    217790
  • 信號
    +關注

    關注

    11

    文章

    2839

    瀏覽量

    77843
  • 定時器
    +關注

    關注

    23

    文章

    3284

    瀏覽量

    117023
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70179
  • stm32h7
    +關注

    關注

    0

    文章

    37

    瀏覽量

    1753

原文標題:本來同步的信號為何有相差了?

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    DAC3162EVM輸出信號為何總是正負信號

    我購買了德州的dac3162和其評估版,根據軟件存入的數據表都是正的信號,存入一個階梯波的excel數據,但最終輸出的波形出來的卻是正負電壓的波形,波形正確,但電壓不對,請問為何以及如何解決呢?
    發表于 11-22 06:30

    DDC112的CLK和CONV引腳如果同步效果差,比如相差0.1us,會影響什么?

    1.芯片的CLK和CONV引腳如果同步效果差,比如相差0.1us,會影響什么?如果影響,原理是什么? 2.芯片CLK是用來做什么功能的? 3.芯片可以測量電流方向從芯片流向帶檢測設備的信號
    發表于 12-12 06:09

    求教兩正弦信號同步的問題

    各位大神我想請教下兩正弦信號同步的問題,一路信號為fpga內部產生的dds信號,另一路信號由外部輸入給fpga,已知兩
    發表于 01-15 17:52

    請問如何利用ADF4351實現多路相干信號

    `具體要求是這樣的,要利用ADF4351產生多路同頻并具有特定相位差(如相差為0)的信號。目前我利用同一個外部時鐘和STM32f103RCT6控制板實現4路同頻信號(我這里是151M
    發表于 11-18 18:06

    同步信號為鋸齒波的觸發電路的優點是什么

    】符合下列真值表的是( )門電路。(D)A、與非B、或非C、或D、非2、【單選題】變壓器油應無氣味,若感覺有酸味時,說明( )。(D)A、油干燥時過熱B、油內水分含量高C、油內產生過電弧D、油嚴重老化3、【單選題】下列不屬于同步信號為鋸齒波的觸發電路的優點是( )。(D
    發表于 09-10 06:23

    直流聲光控開關電路放大器U1A輸出信號為何出現失真?

    直流聲光控開關電路放大器U1A輸出信號為何出現失真?失真對功能實現有影響嗎?
    發表于 04-25 10:33

    M261的比較器為何正負計數數值相差很多?

    M261的比較器,為何正負計數數值相差很多?
    發表于 06-20 06:15

    用AD9680做多通道同步,多次用脈沖信號同步觸發后,顯示相差不固定是為什么?

    用AD9680做多通道同步,同源時鐘,normal模式下,采集正弦波,多次用脈沖信號同步觸發后,顯示相差不固定。按照一般理解,射頻前端不變情況下,差值應該是不變的。
    發表于 11-30 07:37

    同步信號為鋸齒波的觸發電路

    同步信號為鋸齒波的觸發電路 相控電
    發表于 06-24 23:05 ?1.5w次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>信號為</b>鋸齒波的觸發電路

    信號為能量收集設計提供傳感器解決方案

    本文檔內容介紹基于信號為能量收集設計提供傳感器解決方案,供網友參考。
    發表于 09-15 19:19 ?2次下載
    <b class='flag-5'>信號為</b>能量收集設計提供<b class='flag-5'>了</b>傳感器解決方案

    5G信號為何難以入室

    5G信號為何難以“登堂入室” ?一家運營商的相關工作人員告訴記者,上世紀80年代的1G頻率為800MHz,如今5G的頻率已經可以達到4900MHz。電磁波頻率越高,波長越短,衰減也越快,更容易被
    發表于 09-02 11:48 ?801次閱讀

    同步信號為什么會出現相差

    的PWM驅動信號。不過,在使用過程中,可能時不時地需要暫停兩個定時器的輸出,等到適當時機再啟動全部通道PWM輸出。可他發現,2個定時器的PWM輸出剛開始還同步得好好的,但隨著程序的運行,一段時間后,來自兩個定時器的PWM輸出明顯不再同步
    發表于 03-08 15:24 ?947次閱讀
    <b class='flag-5'>同步</b>的<b class='flag-5'>信號為</b>什么會出現<b class='flag-5'>相差</b>

    已經電阻為何還要有電導?

    已經電阻為何還要有電導? 在電學領域中,電阻和電導是兩個基本的概念。電阻是電路中表征電阻器等元器件抵抗電流的量,而電導則是電路中表征導電性的量。雖然它們的定義是相反的,但在電路中同時存在著電阻
    的頭像 發表于 10-24 10:43 ?1923次閱讀

    高速信號為啥要走表層?

    高速信號為啥要走表層?
    的頭像 發表于 12-05 15:16 ?796次閱讀
    高速<b class='flag-5'>信號為</b>啥要走表層?

    觸發電路中同步電壓與同步信號何區別

    觸發電路中同步電壓與同步信號何區別? 觸發電路中同步電壓與同步
    的頭像 發表于 01-31 10:57 ?1605次閱讀