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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PWM輸出配置方法

中科芯MCU ? 來源:中科芯MCU ? 2024-11-04 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MCU微課堂

CKS32F107xx TIM(二)

第四十七期 2024.11.01

PWM模式簡(jiǎn)介

從上節(jié)課的定時(shí)器分類圖中我們了解到,互補(bǔ)輸出是高級(jí)定時(shí)器(TIM1、TIM8)所獨(dú)有的,它可以輸出兩路互補(bǔ)信號(hào)。而在本節(jié)課中我們將通過一個(gè)簡(jiǎn)單的例程去介紹如何配置互補(bǔ)PWM輸出,同時(shí)為了演示在電機(jī)控制領(lǐng)域的入門應(yīng)用,該例程也增加了剎車和死區(qū)插入的功能。因此,接下來我們將先對(duì)PWM模式、互補(bǔ)輸出、死區(qū)插入、剎車功能這四個(gè)概念作簡(jiǎn)要介紹,然后通過一個(gè)實(shí)驗(yàn)例程來演示PWM輸出配置方法。

比較輸出是通過比較計(jì)數(shù)器CNT和捕獲/比較寄存器CCR的關(guān)系,來對(duì)輸出電平進(jìn)行置1、置0或翻轉(zhuǎn)的操作,而PWM模式輸出的是一種脈沖寬度可調(diào)的方波信號(hào),同時(shí)也是定時(shí)器(高級(jí)和通用)比較輸出模式中較為常用的一種,我們可以通過捕獲/比較模式寄存器CCMRx的位OCxM[2:0]來配置輸出。表1羅列了PWM1和PWM2的區(qū)別,并通過PWM1邊沿對(duì)齊的波形示例圖來簡(jiǎn)述下PWM輸出的原理。

表1 PWM1和PWM2模式區(qū)別

fabf8174-98c5-11ef-a511-92fbcf53809c.png

fad83a7a-98c5-11ef-a511-92fbcf53809c.png

圖1 邊沿對(duì)齊的PWM1波形(TIMx_ARR=8)

如上圖所示,當(dāng)CNT < CCR時(shí),參考信號(hào)OCxREF輸出為高,則通道OCx輸出1;當(dāng)CCR <= CNT <= ARR時(shí),參考信號(hào)OCxREF輸出為低,則通道OCx輸出0。并且當(dāng)計(jì)數(shù)器CNT與比較寄存器CCR值匹配時(shí),比較中斷寄存器CCxIF位會(huì)自動(dòng)由硬件置 1;而CNT計(jì)數(shù)達(dá)到ARR的值時(shí),會(huì)產(chǎn)生上溢事件,并且自動(dòng)清零,然后重新向上計(jì)數(shù),如此循環(huán)往復(fù)。因此,我們可以通過修改ARR和CCR的值來靈活調(diào)整PWM波形的頻率和占空比。

定時(shí)器產(chǎn)生PWM 輸出,除了上節(jié)課提到的ARR、PSC、CNT,不得不提的還有捕獲/比較模式寄存器CCMR。該寄存器共有兩個(gè),CCMR1(控制輸出通道1和2)和CCMR2(控制輸出通道3和4),且上面一層對(duì)應(yīng)比較輸出,下面一層對(duì)應(yīng)輸入捕獲,輸入捕獲模式將在下節(jié)課中介紹。由于本節(jié)課介紹的是互補(bǔ)PWM輸出,所以模式設(shè)置位OCxM[2:0],必須設(shè)置為110/111,對(duì)應(yīng)PWM1/PWM2,兩者區(qū)別是極性相反。下圖是CCMR1寄存器各位描述圖,具體請(qǐng)參照CKS32F107xx參考手冊(cè)。

fafa5ae2-98c5-11ef-a511-92fbcf53809c.png

圖2 CCMR1寄存器各位描述圖、

互補(bǔ)輸出和死區(qū)插入簡(jiǎn)介

接下來將先通過捕獲/比較通道的輸出概覽圖來展現(xiàn)輸出控制過程。

fb609e42-98c5-11ef-a511-92fbcf53809c.png

圖3 捕獲/比較通道的輸出部分(通道CH1~CH3)

如上圖,紅框中是CNT和CCR比較,輸出參考信號(hào)OCxREF,銜接上文。綠框表明參考信號(hào)OCxREF在經(jīng)過死區(qū)發(fā)生器之后會(huì)產(chǎn)生兩路帶死區(qū)的互補(bǔ)信號(hào)OCx_DT和OCxN_DT,并且需要特別說明下,高級(jí)定時(shí)器(TIM1、TIM8)只有通道CH1~CH3才有互補(bǔ)信號(hào)。藍(lán)框是輸出控制電路,若沒有死區(qū)控制,則進(jìn)入的信號(hào)即為OCxREF,且進(jìn)入的信號(hào)會(huì)被分成極性相反的兩路,并由寄存器CCER的位CCxP和CCxNP控制極性,由CxE和CCxNP位使能輸出。若增加了剎車功能,則寄存器BDTR的位MOE、OSSI和OSSR將共同影響輸出信號(hào)。

關(guān)于死區(qū)插入,其中一個(gè)較為典型的應(yīng)用就是半橋驅(qū)動(dòng)電路,比如上個(gè)時(shí)態(tài)MOS管M1導(dǎo)通,MOS管M2截止,下一時(shí)態(tài)需要M1截止,M2導(dǎo)通,由于工藝限制MOS管的關(guān)閉不能忽略不計(jì),這就會(huì)導(dǎo)致M1和M2有同時(shí)導(dǎo)通的時(shí)間,進(jìn)而損壞電路,所以可將M1關(guān)閉后等待一段時(shí)間再打開M2,這段時(shí)間可稱為死區(qū)時(shí)間。死區(qū)時(shí)間是通過寄存器BDTR的位DTG[7:0]來配置,死區(qū)時(shí)間的大小需要根據(jù)輸出通道相連接的器件特性來調(diào)整。下圖為帶死區(qū)插入的互補(bǔ)輸出圖,相信這樣能大家有個(gè)更為直觀的了解。

fb77f8f8-98c5-11ef-a511-92fbcf53809c.png

圖4 帶死區(qū)插入的互不輸出

剎車功能簡(jiǎn)介

電路控制電機(jī)轉(zhuǎn)動(dòng)出現(xiàn)異常時(shí),若用軟件來關(guān)閉信號(hào)輸出,出于軟件延時(shí)的影響,可能帶來不必要的后果。在此工況下,高級(jí)定時(shí)器中的剎車功能能發(fā)揮特定優(yōu)勢(shì),用戶只要將檢測(cè)端連接到TIMx_BKIN引腳,當(dāng)檢測(cè)到非正常態(tài),由硬件電路立刻關(guān)閉信號(hào)輸出,電機(jī)即可停止轉(zhuǎn)動(dòng)。剎車功能是一種硬件保護(hù)保護(hù),用戶需要配置剎車和死區(qū)寄存器BDTR,該寄存器各位描述如下:

fbbe1d1a-98c5-11ef-a511-92fbcf53809c.pngfbc7f100-98c5-11ef-a511-92fbcf53809c.png

圖5 BDTR寄存器各位描述圖

互補(bǔ)PWM輸出配置實(shí)驗(yàn)

本實(shí)驗(yàn)以高級(jí)定時(shí)器TIM1為例,并參照CKS32F107xx數(shù)據(jù)手冊(cè)的引腳定義章節(jié),分配了OC1(PA8)、OC1N(PB13)和BKIN(PB12)引腳。若我們?cè)诠こ讨羞x擇BKIN引腳高電平有效,那么當(dāng)BKIN引腳被置高時(shí),兩路互補(bǔ)PWM信號(hào)立刻停止輸出。主要的編程要點(diǎn)如下。

1、開啟GPIO時(shí)鐘,配置引腳

要使用GPIOA、GPIOB的相關(guān)引腳,需要開啟端口時(shí)鐘,調(diào)用的函數(shù)為:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

因?yàn)橐獙⑵胀℅PIO復(fù)用到定時(shí)器的相關(guān)引腳,所以要配置GPIO工作模式,示例代碼如下,以PA8配置為例,PB13和PB12配置雷同:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

2、TIM1時(shí)基結(jié)構(gòu)體設(shè)置

鑒于前一章節(jié)已詳述過,這里僅做代碼演示,針對(duì)TIM1時(shí)基初始化示例代碼格式如下:

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Prescaler= 8;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseStructure.TIM_Period=7;

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

根據(jù)前文定時(shí)時(shí)間的描述,當(dāng)TIM1工作時(shí)鐘配置為72MHz時(shí),那么示例代碼中配置的中斷次時(shí)間為:(8+1)*(7+1) / 72000000 = 1us,則PWM輸出的頻率為1MHz。

3、TIM1輸出比較結(jié)構(gòu)體設(shè)置

通過配置TIM1_CCMR1的相關(guān)位來設(shè)置TIM1_CH1的PWM模式。在庫(kù)函數(shù)中,PWM通道設(shè)置是通過函數(shù)TIM_OC1Init()~TIM_OC4Init()來設(shè)置的,不同通道的設(shè)置函數(shù)不一樣,使用時(shí)需要注意區(qū)分,這里我們選用CH1通道和CH1N通道,選用的庫(kù)函數(shù)如下:

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

輸出比較結(jié)構(gòu)體在庫(kù)函數(shù)中對(duì)應(yīng)名稱為TIM_OCInitTypeDef,下面是結(jié)構(gòu)體的定義:

typedef struct

{

uint16_t TIM_OCMode;

uint16_t TIM_OutputState;

uint16_t TIM_OutputNState;

uint16_t TIM_Pulse;

uint16_t TIM_OCPolarity;

uint16_t TIM_OCNPolarity;

uint16_t TIM_OCIdleState;

uint16_t TIM_OCNIdleState;

} TIM_OCInitTypeDef;

參數(shù)TIM_OCMode是用來設(shè)置比較輸出模式,這里我們選用PWM1模式。

參數(shù)TIM_OutputState和TIM_OutputNState用來配置OCx和OcxN通道輸出使能。

參數(shù)TIM_Pulse是設(shè)置比較寄存器CCR的值,決定脈沖寬度,對(duì)應(yīng)PWM1的占空比。

參數(shù)OCPolarity和TIM_OCNPolarity是設(shè)置OCx和OcxN通道極性,我們可以選擇高電平或低電平有效。

參數(shù)TIM_OCNIdleState和TIM_OCNIdleState是設(shè)置空閑狀態(tài)時(shí)OCx和OcxN通道輸出的電平。

針對(duì)TIM1輸出比較結(jié)構(gòu)體初始化示例如下:

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

TIM_OCInitStructure.TIM_Pulse = 4;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

TIM_OC1Init(TIM1, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

在該示例中,設(shè)置了工作模式PWM1,使能了OCx和OcxN通道,配置了脈沖寬度、輸出極性和空閑狀態(tài)下的輸出電平,所以PWM1的占空比為:CCR / (ARR + 1) = 50%。

4、TIM1斷路和死區(qū)結(jié)構(gòu)體設(shè)置

我們?cè)趲?kù)函數(shù)中設(shè)置剎車和死區(qū)參數(shù)是通過函數(shù)TIM_BDTRCon?g來實(shí)現(xiàn)的,其結(jié)構(gòu)體TIM_BDTRInitTypeDef中列出了各個(gè)成員,以下是結(jié)構(gòu)體的定義:

Typedefstruct

{

uint16_tTIM_OSSRState;

uint16_tTIM_OSSIState;

uint16_tTIM_LOCKLevel;

uint16_tTIM_DeadTime;

uint16_tTIM_Break;

uint16_tTIM_BreakPolarity;

uint16_tTIM_AutomaticOutput;

}TIM_BDTRInitTypeDef;

這里結(jié)構(gòu)體中的成員可以對(duì)照上文BDTR寄存器的各位來理解,在此不再贅述,本實(shí)驗(yàn)中我們針對(duì)TIM1斷路和死區(qū)結(jié)構(gòu)體初始化示例如下:

TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;

TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;

TIM_BDTRInitStructure.TIM_DeadTime = 11;

TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;

TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;

TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

在該示例中,配置的死區(qū)時(shí)間為11 / 72000000 = 152ns,配置BKIN引腳為高電平有效。

5、使能TIM1和主輸出

因?yàn)楸緦?shí)驗(yàn)是互補(bǔ)PWM輸出,所以除了要開啟定時(shí)器,也要對(duì)定時(shí)器主輸出進(jìn)行使能,配置示例如下:

TIM_Cmd(TIM1, ENABLE);

TIM_CtrlPWMOutputs(TIM1, ENABLE);

6、修改TIM1_CCR1來調(diào)整占空比

實(shí)際使用時(shí),用戶需要控制占空比來調(diào)整電機(jī)的轉(zhuǎn)速,我們能通過修改TIM1_CCR1則可以控制CH1的輸出占空比。在庫(kù)函數(shù)中,修改TIM1_CCR1占空比的函數(shù)是:

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);

同樣的,對(duì)于其他三個(gè)通道,也有如下對(duì)應(yīng)函數(shù)供調(diào)用,用戶使用時(shí)注意區(qū)分即可。

void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);

void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);

只要按照上述配置,用戶在主函數(shù)中調(diào)用即可,我們示波器的兩個(gè)輸入通道分別接PA8、PB13引腳,可觀測(cè)到兩路互補(bǔ)帶死區(qū)插入的PWM波形,頻率為1MHz,占空比默認(rèn)為50%(用戶可自行調(diào)整),死區(qū)時(shí)間為152ns左右。

fbedbeb2-98c5-11ef-a511-92fbcf53809c.png

如果將BKIN引腳拉高,可觀測(cè)到輸出信號(hào)立刻停止,若松開則恢復(fù)默認(rèn)輸出。

fbfcec20-98c5-11ef-a511-92fbcf53809c.png

至此,本實(shí)驗(yàn)已介紹完畢。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124474
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5511

    瀏覽量

    219390
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2291

    瀏覽量

    96406
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118920

原文標(biāo)題:MCU微課堂|CKS32F107xx TIM(二)

文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    高級(jí)定時(shí)器PWM輸入模式的配置方法

    我們將向大家介紹高級(jí)定時(shí)器的另一個(gè)常見應(yīng)用——PWM輸入模式。在本節(jié)課中,我們將先圍繞輸入捕獲模式展開,并重點(diǎn)描述PWM輸入模式和涉及的寄存器,最后通過一個(gè)實(shí)驗(yàn)例程去介紹PWM輸入模式的配置
    的頭像 發(fā)表于 11-08 16:48 ?4368次閱讀
    高級(jí)定時(shí)器<b class='flag-5'>PWM</b>輸入模式的<b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    靈動(dòng)微課堂《MM32 MCU使用分享》入駐智芯課堂

    :內(nèi)部溫度傳感器的配置方法11-1:DAC輸出配置方法12-1:TIMER定時(shí)器的配置
    發(fā)表于 06-05 15:55

    剎車配置PWM沒有輸出

    配置 TIM 剎車輸入遇到問題 如下是我的配置 和 原理圖這樣配置 PWM沒有輸出 但是如果將剎車極性改成High 就有
    發(fā)表于 01-08 09:35

    STM32產(chǎn)生PWM配置方法有哪些

    STM32定時(shí)器的原理是什么?PWM波形產(chǎn)生的原理是什么?STM32產(chǎn)生PWM配置方法有哪些?
    發(fā)表于 09-24 08:06

    PWM輸出是如何配置

    PWM輸出是如何配置的?怎么配置TIM定時(shí)器為編碼模式呢?
    發(fā)表于 11-16 06:55

    STM32產(chǎn)生PWM配置方法

    目錄:一、引腳映像與寄存器1、定時(shí)器引腳復(fù)用功能映像2、定時(shí)器二、定時(shí)器PWM產(chǎn)生原理三、STM32產(chǎn)生PWM配置方法--------------------------------
    發(fā)表于 12-06 06:25

    PWM波形的輸出方法

    本篇應(yīng)用說明介紹了以200us 為周期的三個(gè)正相、三個(gè)反相,共計(jì)六相PWM波(三相、鋸齒波調(diào)制、無死區(qū)時(shí)間)的輸出方法。 復(fù)位同步PWM輸出波形
    發(fā)表于 09-13 10:14 ?6次下載
    <b class='flag-5'>PWM</b>波形的<b class='flag-5'>輸出方法</b>

    如何使用MPLAB代碼配置配置增強(qiáng)型PWM模塊

    本視頻在之前實(shí)驗(yàn)的基礎(chǔ)上,繼續(xù)向大家介紹如何使用MPLAB代碼配置配置增強(qiáng)型PWM模塊,并使用生成的代碼產(chǎn)生增強(qiáng)型PWM輸出
    的頭像 發(fā)表于 07-01 10:07 ?3938次閱讀

    使用STM32輸出PWM波形

    本文目的是通過在STM32平臺(tái)上采用定時(shí)器的方法輸出PWM波形,進(jìn)而熟悉和掌握PWM的原理和產(chǎn)生。目錄(一)PWM簡(jiǎn)介1.關(guān)于
    發(fā)表于 11-30 14:21 ?42次下載
    使用STM32<b class='flag-5'>輸出</b><b class='flag-5'>PWM</b>波形

    PWM輸出實(shí)驗(yàn)詳細(xì)示例

    目錄PWM輸出實(shí)驗(yàn)PWM的工作原理(以向上計(jì)數(shù)為例)PWM與AFIO引腳重映射綜合實(shí)驗(yàn)庫(kù)函數(shù)使用說明PWM
    發(fā)表于 12-20 18:58 ?2次下載
    <b class='flag-5'>PWM</b><b class='flag-5'>輸出</b>實(shí)驗(yàn)詳細(xì)示例

    MBD模型設(shè)計(jì)的PWM輸出步驟和方法

    本篇筆記主要記錄基于MBD模型設(shè)計(jì)的PWM輸出步驟和方法。前期工具箱的安裝不在本文檔討論范圍內(nèi)。
    的頭像 發(fā)表于 01-20 14:48 ?1991次閱讀
    MBD模型設(shè)計(jì)的<b class='flag-5'>PWM</b><b class='flag-5'>輸出</b>步驟和<b class='flag-5'>方法</b>

    SMT32的PWM波形輸出配置總結(jié)

    本文分享STM32之PWM波形輸出配置總結(jié)。
    的頭像 發(fā)表于 02-22 15:36 ?2051次閱讀

    基于MBD模型設(shè)計(jì)的PWM輸出步驟和方法

    本篇筆記主要記錄基于MBD模型設(shè)計(jì)的PWM輸出步驟和方法。前期工具箱的安裝不在本文檔討論范圍內(nèi)。
    的頭像 發(fā)表于 04-20 14:19 ?1434次閱讀
    基于MBD模型設(shè)計(jì)的<b class='flag-5'>PWM</b><b class='flag-5'>輸出</b>步驟和<b class='flag-5'>方法</b>

    STM32的PWM波形輸出配置的大神總結(jié)

    STM32的PWM波形輸出配置的大神總結(jié)
    的頭像 發(fā)表于 10-24 16:00 ?4696次閱讀
    STM32的<b class='flag-5'>PWM</b>波形<b class='flag-5'>輸出</b><b class='flag-5'>配置</b>的大神總結(jié)

    STM32無法正常輸出PWM信號(hào)的原因及解決方法

    無法正常輸出PWM信號(hào)的問題。本文將探討STM32無法正常輸出PWM信號(hào)的原因,并提供解決方法。 一、引腳
    的頭像 發(fā)表于 01-02 17:38 ?1.3w次閱讀