色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

基于STM32芯片三路互補PWM輸出的設(shè)計實現(xiàn)

冬至子 ? 來源:兔子問烏龜 ? 作者:Mr Ma ? 2023-07-21 16:26 ? 次閱讀

硬件:Stm32f103c8t6最小系統(tǒng)。

開發(fā)平臺:MDK-Arm

目的:使用Stm32高級定時器TIM1。配置中心對齊模式輸出三路互補PWM。

(1)Stm32的高級定時器:

Stm32f103c8t6有一個高級定時器TIM1。STM32的高級定時器比通用定時器增加了可編程死區(qū)互補輸出,重復(fù)計數(shù)器,帶剎車(短路)功能。這些功能為電機控制提供了便利。其中重復(fù)計數(shù)器下篇文章單獨講。

TIM1的IO分配:

1.jpg

2)高級定時器框圖分析:

圖片

圖1

圖1高級定時器框圖,可分為6部分,①時鐘源選擇,②控制器,③時基單元,④輸入捕獲,⑤輸出比較,⑥剎車斷路。

①時鐘選擇:

時鐘源有:內(nèi)部時鐘(CK_INT),外部時鐘模式1,外部時鐘模式2,內(nèi)部觸發(fā)輸入(ITRx)。具體可以看TIMx_SMCR寄存器SMS位和ECE位這里我們使用內(nèi)部時鐘64MHz(沒使用外部晶振,系統(tǒng)時鐘是64MHz)。

②控制器

控制器部分包含觸發(fā)控制器,從模式控制器,編碼器接口。觸發(fā)控制器可以為片內(nèi)外設(shè)提供觸發(fā)信號

③⑤時基單元和輸出比較

時基單元的計數(shù)模式選中心對齊模式和比較輸出的比較模式選PWM模式來講解。

首先時鐘源通過預(yù)分頻寄存器PSC分頻得到CK_CNT,得到計數(shù)器CNT計數(shù)頻率,計數(shù)器開始從0向上計數(shù),每計一次,和CCR比較一次,當(dāng)CRR>CNT, 輸出高電平,反之輸出低電平,計數(shù)器CNT繼續(xù)計數(shù),當(dāng)計數(shù)器等于ARR值時,計數(shù)器向下計數(shù),當(dāng)計數(shù)器CNT>CCR時,輸出低電平,反之輸出高電平。計數(shù)器周而復(fù)始向上向下計數(shù)并不斷的和CRR值比較,參考圖2。

圖片

圖2

實際此過程我們可以看成一個比較器,CRR作為參考電壓,接到比較器同相輸入端,CNT作為信號電壓,接到比較器反相輸入端,這樣根據(jù)比較輸出PWM。反之把CNT和CRR調(diào)換位置,會輸出相反極性的PWM,參考圖2.

計數(shù)器計數(shù)模式有:向上計數(shù),向下計數(shù),中心對齊計數(shù)。

比較輸出比較模式:凍結(jié),匹配時設(shè)置通道x為有效電平,匹配時設(shè)置通道x為無效電平,翻轉(zhuǎn),強制為無效電平,強制為有效電平,PWM1,PWM2。

死區(qū)發(fā)生器:

通過寄存器BDTR的位UTG[7:0]來配置死區(qū)時間,關(guān)于死區(qū)時間設(shè)置可以這篇文章:

⑥短路功能

斷路功能用于電控的剎車功能,可以通過寄存器BDTR的BKE位使能斷路功能,BKP位設(shè)置斷路輸入引腳的有效電平

④輸入捕獲

輸入捕獲可以對輸入的信號的上升沿,下降沿或者雙邊沿進(jìn)行捕獲,常用的有測量輸 入信號的脈寬和測量 PWM 輸入信號的頻率和占空比這兩種。

輸入捕獲的大概的原理就是,當(dāng)捕獲到信號的跳變沿的時候,把計數(shù)器 CNT 的值鎖存 到捕獲寄存器 CCR 中,把前后兩次捕獲到的 CCR 寄存器中的值相減,就可以算出脈寬或者頻率。如果捕獲的脈寬的時間長度超過你的捕獲定時器的周期,就會發(fā)生溢出,這個我 們需要做額外的處理。

(3)程序設(shè)計

程序使用ST官方固件庫,編程步驟:

①GPIO初始化;

②時基結(jié)構(gòu)體TIM_TimeBaseInitTypeDef 初始化;

③比較結(jié)構(gòu)體 TIM_OCInitTypeDef 初始化;

④剎車和死區(qū)結(jié)構(gòu)體 TIM_BDTRInitTypeDef 初始化。

程序分析:

①宏定義:

#define   RCC_TIMGPIO_CLK      RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB
#define   TIM_CHxGPIO_Pinx     GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
#define   TIM_CHxGPIOx         GPIOA
#define   TIM_CHxNGPIO_Pinx    GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15
#define   TIM_CHxNGPIOx        GPIOB
#define   TIM_BKINGPIO_Pinx    GPIO_Pin_2
#define   TIM_BKINGPIOx        GPIOB

//TIM1 macro definition

/ PWM頻率和死區(qū)時間計算 */

//電機控制載波頻率一般配置在15-20KHz,頻率配置低了電機噪聲大,配置高了,對MOS

//管開關(guān)頻率要求高,且開關(guān)損耗大,這里載波配置為20KHz。

//計數(shù)器頻率計算CK_CNT = 64MHz/(PSC+1) = 64MHz/1=64MHz

//中心對齊PWM頻率=CK_INT/2(ARR+1)=64M/2(1599+1)=20KHz。

//死區(qū)時間配置為2us

//64M/(CKD+1)/ UTG = 500KHz,換算成時間位2us

// TIMx_CR1寄存器CKD 位,TIMx_BDTR寄存器UTG位。

#define   TIMx                 TIM1
#define   RCC_TIM_CLK          RCC_APB2Periph_TIM1
#define   TIM_ARR              1599
#define   TIM_CK_PSC           0
#define   TIM_RCR              0
#define   TIM_CCRx             799
#define   PWM_DeadTime         128

②GPIO初始化:

static void GPIO_TIM_Config(void){
   GPIO_InitTypeDef GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_TIMGPIO_CLK, ENABLE);
   //TIM1_PA8CH1 PA9CH2 PA10CH3 PA11CH4
   GPIO_InitStructure.GPIO_Pin =  TIM_CHxGPIO_Pinx;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   //PB13CH1N PB14CH2N PB15CH3N PB12BKIN      
   GPIO_InitStructure.GPIO_Pin =  TIM_CHxNGPIO_Pinx; 
   GPIO_Init(TIM_CHxNGPIOx, &GPIO_InitStructure);      
   //PB12BKIN
   GPIO_InitStructure.GPIO_Pin =  TIM_BKINGPIO_Pinx; 
   GPIO_Init(TIM_BKINGPIOx, &GPIO_InitStructure);          
   GPIO_ResetBits(TIM_BKINGPIOx,TIM_BKINGPIO_Pinx);//剎車
}

③定時器時基單元,輸出比較,剎車死區(qū)初始化:

static void AdvanceTIM1_Config(void){
  //開啟定時器時鐘,即內(nèi)部時鐘CK_INT=64MHz
  RCC_APB2PeriphClockCmd(RCC_TIM_CLK,ENABLE);
/*--------------------時基結(jié)構(gòu)體初始化-------------------------*/
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     
  TIM_TimeBaseStructure.TIM_Period = TIM_ARR;   //自動重裝載寄存器的值,累計TIM_Period+1個頻率后產(chǎn)生一個更新或者中斷      
  TIM_TimeBaseStructure.TIM_Prescaler = TIM_CK_PSC;   //驅(qū)動CNT計數(shù)器的時鐘 = Fck_int/(psc+1)
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;  //時鐘分頻因子 ,配置死區(qū)時間時需要用到             
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //中心對齊1             
  TIM_TimeBaseStructure.TIM_RepetitionCounter = TIM_RCR;  //重復(fù)計數(shù)器的值,沒用到不用管      
  TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure);  //初始化定時器
/*--------------------輸出比較結(jié)構(gòu)體初始化-------------------*/             
  TIM_OCInitTypeDef  TIM_OCInitStructure;     
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                //PWM1模式
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //輸出使能
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;  //互補輸出使能       
  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_OCInitStructure.TIM_Pulse = TIM_CCRx;                        //設(shè)置占空比大小    
  TIM_OC1Init(TIMx, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable);
  TIM_OC2Init(TIMx, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable); 
  TIM_OC3Init(TIMx, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIMx, TIM_OCPreload_Enable);               
/*-------------------剎車和死區(qū)結(jié)構(gòu)體初始化-------------------*/
  //有關(guān)剎車和死區(qū)結(jié)構(gòu)體的成員具體可參考BDTR寄存器的描述
  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;
  //輸出比較信號死區(qū)時間配置,具體如何計算可參考 BDTR:UTG[7:0]的描述
  //這里配置的死區(qū)時間為2uS
  TIM_BDTRInitStructure.TIM_DeadTime = 128;
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
  //當(dāng)BKIN引腳檢測到高電平的時候,輸出比較信號被禁止,就好像是剎車一樣
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  TIM_BDTRConfig(TIMx, &TIM_BDTRInitStructure);
  TIM_Cmd(TIMx, ENABLE);      
  //主輸出使能,當(dāng)使用的是通用定時器時,這句不需要
  TIM_CtrlPWMOutputs(TIMx, ENABLE);                  
}

4)程序燒錄驗證:圖3是一對PWM互補輸出波形。

圖片

圖3

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

    關(guān)注

    3547

    文章

    1910

    瀏覽量

    269791
  • PWM波
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    17033
  • 預(yù)分頻器
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    8218
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    110

    文章

    162

    瀏覽量

    84440
  • stm32定時器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2336
收藏 人收藏

    評論

    相關(guān)推薦

    STM32CubeIDE下配置STM32F103輸出帶死區(qū)的互補PWM

    STM32F103的TIM1和TIM8是高級定時器,可以產(chǎn)生嵌入死區(qū)時間的互補PWM波,使用STM32CubeIDE完成相關(guān)配置,可以直接生成代碼,
    的頭像 發(fā)表于 11-01 09:41 ?8875次閱讀
    <b class='flag-5'>STM32</b>CubeIDE下配置<b class='flag-5'>STM32</b>F103<b class='flag-5'>輸出</b>帶死區(qū)的<b class='flag-5'>互補</b><b class='flag-5'>PWM</b>波

    STM32F429的TIM4定時器輸出PWM,為什么第四PB9一直輸出低電平?

    芯片型號:STM32F429ZGT6 用TIM4輸出4PWM,用的是PB6PB7PB8PB9程序是一樣的配置,前
    發(fā)表于 04-03 07:43

    TC387 MCAL如何配置互補PWM

    請問有用MCAL配過三路互補PWM輸出嗎?研究了好幾天了,沒找到MCAL配置互補PWM的地方
    發(fā)表于 07-03 07:20

    請問一輸入控制三路輸出,怎么實現(xiàn)

    請問一輸入高電平時,三路輸出也是高電平,它們之間不能互相影響,怎么實現(xiàn)
    發(fā)表于 08-04 23:24

    關(guān)于STM32PWM輸出的問題

    想利用stm32的tim3的個通道輸出三路pwm,頻率相互獨立,分別控制個電機。還想控制每一
    發(fā)表于 05-07 17:40

    ADUC7020產(chǎn)生三路PWM輸出,第三路不知道怎么輸出了?

    我想用ADUC7020產(chǎn)生三路PWM,并輸出,但是7020能配置成PWM的管教只有P3.0-P3.7,按我的理解,PLA的block2產(chǎn)生三路
    發(fā)表于 09-25 11:48

    STM32F103RCT6 6互補信號有三路PWM有缺陷

    我的STM32F103RCT6 Tim8輸出6互補信號中有三路PWM有缺陷,請問可能是什么原因
    發(fā)表于 04-29 09:01

    如何使用STM32F407ZG的實現(xiàn)互補PWM輸出

    如何使用STM32F407ZG的實現(xiàn)互補PWM輸出
    發(fā)表于 11-26 07:45

    怎樣通過三路PWM輸出進(jìn)行RGB燈調(diào)色呢

    怎樣通過三路PWM輸出進(jìn)行RGB燈調(diào)色呢?其原理是什么?
    發(fā)表于 03-09 07:01

    三路輸出電路圖

    三路輸出電路圖 圖 三路輸出電路圖
    發(fā)表于 07-18 12:01 ?2093次閱讀
    <b class='flag-5'>三路</b><b class='flag-5'>輸出</b>電路圖

    三路輸出 LED 驅(qū)動器驅(qū)動多達(dá) 24 個 500mA LED 并提供 3000:1 的 True Color PWM 調(diào)光能力

    三路輸出 LED 驅(qū)動器驅(qū)動多達(dá) 24 個 500mA LED 并提供 3000:1 的 True Color PWM 調(diào)光能力
    發(fā)表于 03-20 22:36 ?2次下載
    <b class='flag-5'>三路</b><b class='flag-5'>輸出</b> LED 驅(qū)動器驅(qū)動多達(dá) 24 個 500mA LED 并提供 3000:1 的 True Color <b class='flag-5'>PWM</b> 調(diào)光能力

    ADP1828三路輸出電壓

    ADP1828三路輸出電壓
    發(fā)表于 04-23 15:09 ?9次下載
    ADP1828<b class='flag-5'>三路</b><b class='flag-5'>輸出</b>電壓

    STM32 TIM 多通道互補PWM波形輸出配置快速入門

    platform:stm32f103cb前言在做相逆變的時候,需要軟件生成SVPWM波形,具體的算法需要產(chǎn)生互補PWM,這樣可以驅(qū)動
    發(fā)表于 12-07 18:36 ?24次下載
    <b class='flag-5'>STM32</b> TIM 多通道<b class='flag-5'>互補</b><b class='flag-5'>PWM</b>波形<b class='flag-5'>輸出</b>配置快速入門

    普通定時器輸出互補PWM帶死區(qū)

    普通定時器輸出互補PWM帶死區(qū)一般來說相半橋電路需要互補PWM驅(qū)動,而且
    發(fā)表于 12-16 16:59 ?24次下載
    普通定時器<b class='flag-5'>輸出</b><b class='flag-5'>互補</b><b class='flag-5'>PWM</b>帶死區(qū)

    STM32CUbeMX之兩互補pwm波 以及死區(qū)時間設(shè)置

    STM32CUbeMX之兩互補pwm波 以及死區(qū)時間設(shè)置STM32CUbeMX的配置keil工程里的代碼
    發(fā)表于 12-22 19:40 ?32次下載
    <b class='flag-5'>STM32</b>CUbeMX之兩<b class='flag-5'>路</b><b class='flag-5'>互補</b><b class='flag-5'>pwm</b>波 以及死區(qū)時間設(shè)置
    主站蜘蛛池模板: z00兽200俄罗斯 | 国产中文字幕一区 | 草699一码二码三码四码 | 毛茸茸womansex | 久久99AV无色码人妻蜜 | 51精品少妇人妻AV一区二区 | 久久精品免费电影 | 久久综合色悠悠 | 囯产精品久久久久免费蜜桃 | 久久66热在线视频精品 | 小草影院免费 | 一日本道伊人久久综合影 | 一个人HD在线观看免费高清视频 | 国产欧美另类久久久精品免费 | 国产看午夜精品理论片 | 尹人久久大香找蕉综合影院 | 欧美黑人经典片免费观看 | 大陆老太交xxxxxhd在线 | 国产伦精品一区二区三区精品 | 偷拍精品视频一区二区三区 | 熟妇少妇任你躁在线无码 | 真实处破女全过程完免费观看 | 国产蜜臀AV在线一区视频 | 99视频在线观看免费视频 | 饥渴的护士自慰被发现 | 无码区国产区在线播放 | 狠狠狠色丁香婷婷综合久久 | 日韩人妻无码精品久久中文字幕 | 女同志videos最新另 | 亚洲欧美在无码片一区二区 | 97视频免费上传播放 | 国产精品人妻无码久久久蜜桃臀 | 亚洲人成7777 | 羞羞漫画在线播放 | 涩涩免费网站 | 国产精品高清视频在线 | 起碰免费公开97在线视频 | 国产成久久免费精品AV片天堂 | 日本免费无码A专区在线观看 | 91精选国产 | 好湿好紧水多AAAAA片秀人网 |