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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32F103移相全桥PWM寄存器实现

發(fā)布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F103移相全桥PWM寄存器实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

STM32F103移相全橋PWM寄存器實現(xiàn)

由于項目需求需要使用單片做一個移相全橋的DCDC電源。采用STM32F103芯片,采用直接控制寄存器實現(xiàn)PWM移相控制

基本原理

兩橋臂分別使用定時器TIM1和TIM8產(chǎn)生互補輸出信號,TIM8作為從定時器,其計數(shù)器復位由TIM1控制

TIM1初始化

void time1_pwm_init(u16 arr,u16 ccr1,u16 ccr2) {////調(diào)整ccr1從0 到500,實現(xiàn)移相角度從0到180度RCC->APB2ENR|=1<<0;//輔助功能IO時鐘使能 RCC->APB2ENR|=1<<2; //使能PORTA時鐘,IO口A時鐘使能RCC->APB2ENR|=1<<3; //使能PORTB時鐘,IO口B時鐘使能RCC->APB2ENR|=1<<11;//TIM1時鐘使能GPIOA->CRH&=0XFFFFFF0F; //PA9 推挽輸出CHZGPIOA->CRH|=0X000000B0; //輸出GPIOB->CRH&=0XF0FFFFFF; //PB14 推挽輸出GPIOB->CRH|=0X0B000000; //輸出TIM1->ARR=arr;//自動重裝載寄存器(TIM1_ARR)TIM1->PSC=0;//預分頻器(TIM1_PSC),等于fCK_PSC/( PSC[15:0]+1)TIM1->CCMR1|=6<<12;//PWM模式1TIM1->CCMR1|=1<<11;//開啟TIM1_CCR1寄存器的預裝載功能 // TIM1->RCR=0x0000;//在邊沿對齊模式下, PWM周期的數(shù)目(REP+1)對應著//使TIME1的OC1為TIM8的復位信號TIM1->CCMR1|=7<<4;//OC1M[2:0]:輸出比較1模式- 在向上計數(shù)時PWM2TIM1->CCMR1|=1<<3;//開啟TIM1_CCR1 OC1PE輸出比較1預裝載使能TIM1->CR2|=4<<4;//MMS[1:0]:主模式選擇100:比較 – OC1REF信號被用于作為觸發(fā)輸出(TRGO)。TIM1->CCMR1|=1<<10;//OC2FE 01: 輸出比較2快速使能 TIM1->CCER|=1<<4;//開啟- OC2信號輸出到對應的輸出引腳TIM1->CCER|=1<<6;//開啟- OC2N信號輸出到對應的輸出引腳TIM1->CR1&=~(1<<4);//向上計數(shù) TIM1->CR1&=~(1<<4);//向上計數(shù)TIM1->CR1&=~(3<<5);//邊沿對齊模式TIM1->CCR1=ccr1;//(1599+1)/2-1TIM1->CCR2=ccr2;//(1599+1)/2-1 TIM1->CR1|=1<<7;//TIM1_ARR寄存器被裝入緩沖器TIM1->CR1|=1<<0;//開啟計數(shù)器TIM1->EGR|=1<<0;TIM1->BDTR|=0<<13;//剎車極性TIM1->BDTR|=0<<12;//剎車使能TIM1->BDTR|=90<<0;//Tdtg = 1× TDTSTIM1->BDTR|=1<<15;//則開啟OC和OCN輸出}

TIM8初始化

void time8_pwm_init(u16 arr,u16 ccr2) {RCC->APB2ENR|=1<<0; //輔助功能IO時鐘使能 RCC->APB2ENR|=1<<3; //使能PORTB時鐘,IO口B時鐘使能RCC->APB2ENR|=1<<4; //使能PORTC時鐘,IO口C時鐘使能RCC->APB2ENR|=1<<13; //TIM8時鐘使能GPIOB->CRL&=0XFFFFFFF0; //PB0 推挽輸出CHZGPIOB->CRL|=0X0000000B; //輸出GPIOC->CRL&=0X0FFFFFFF; //PC7 推挽輸出GPIOC->CRL|=0XB0000000; //輸出TIM8->ARR=arr;//自動重裝載寄存器(TIM1_ARR)TIM8->PSC=0;//預分頻器(TIM1_PSC),等于fCK_PSC/( PSC[15:0]+1)TIM8->CCMR1|=6<<12;//PWM模式1- 在向上計數(shù)時,一旦TIM1_CNT<TIM1_CCR1時通道1為有效電平,否 //則 為 無 效 電 平 ; 在 向 下 計 數(shù) 時 , 一 旦 TIM1_CNT>TIM1_CCR1 時 通 道 1 為 無 效 電 平 //(OC1REF=0),否則為有效電平(OC1REF=1)。TIM8->CCMR1|=1<<11;//開啟TIM1_CCR1寄存器的預裝載功能//使TIME8的接收TIME1的OCref信號TIM8->SMCR|=1<<7;//主/從模式TIM8->SMCR|=4<<0;//SMS:從模式選擇,100 復位模式 ,選中的觸發(fā)輸入(TRGI)的上升沿重新初始化計數(shù)器TIM8->SMCR|=0<<4;//TS[2:0]:觸發(fā)選擇 000: ITR0 TIMx內(nèi)觸部觸發(fā)連接TIM8->SMCR|=0<<5;TIM8->SMCR|=0<<6;TIM8->CCER|=0<<0;TIM8->CCMR1|=1<<0; TIM8->CCMR1|=1<<10;//OC2FE 01: 輸出比較2快速使能 TIM8->CCER|=1<<4;//開啟- OC2信號輸出到對應的輸出引腳TIM8->CCER|=1<<6;//開啟- OC2N信號輸出到對應的輸出引腳TIM8->CR1&=~(1<<4);//向上計數(shù)TIM8->CR1|=1<<7;//TIM1_ARR寄存器被裝入緩沖器TIM8->CR1|=1<<0;//開啟計數(shù)器TIM8->CNT;TIM8->CCR2=ccr2;//(1599+1)/2-1TIM8->EGR|=1<<0;TIM8->BDTR|=0<<13;//剎車極性TIM8->BDTR|=0<<12;//剎車使能TIM8->BDTR|=90<<0;//Tdtg = 1× TDTSTIM8->BDTR|=1<<15;//則開啟OC和OCN輸出}

代碼的關鍵是如何讓TIM1的CCR1產(chǎn)生的OC1REF去觸發(fā)TIM8的計數(shù)復位
關鍵部分如下:

//使TIME1的OC1為TIM8的復位信號TIM1->CCMR1|=7<<4;//OC1M[2:0]:輸出比較1模式- 在向上計數(shù)時PWM2TIM1->CCMR1|=1<<3;//開啟TIM1_CCR1 OC1PE輸出比較1預裝載使能TIM1->CR2|=4<<4;//MMS[1:0]:主模式選擇100:比較 – OC1REF信號被用于作為觸發(fā)輸出(TRGO)。 //使TIME8的接收TIME1的OC1ref信號TIM8->SMCR|=1<<7;//主/從模式TIM8->SMCR|=4<<0;//SMS:從模式選擇,100 復位模式 ,選中的觸發(fā)輸入(TRGI)的上升沿重新初始化計數(shù)器TIM8->SMCR|=0<<4;//TS[2:0]:觸發(fā)選擇 000: ITR0 TIMx內(nèi)觸部觸發(fā)連接TIM8->SMCR|=0<<5;TIM8->SMCR|=0<<6;TIM8->CCER|=0<<0;TIM8->CCMR1|=1<<0;

通過調(diào)整TIM1->CCR1的值從0到500即可調(diào)整占空比從0到100%變化
當TIM1->CCR1=100時的波形:

總結(jié)

以上是生活随笔為你收集整理的STM32F103移相全桥PWM寄存器实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。