STM32F103移相全桥PWM寄存器实现
生活随笔
收集整理的這篇文章主要介紹了
STM32F103移相全桥PWM寄存器实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
STM32F103移相全橋PWM寄存器實現
由于項目需求需要使用單片做一個移相全橋的DCDC電源。采用STM32F103芯片,采用直接控制寄存器實現PWM移相控制
基本原理
兩橋臂分別使用定時器TIM1和TIM8產生互補輸出信號,TIM8作為從定時器,其計數器復位由TIM1控制
TIM1初始化
void time1_pwm_init(u16 arr,u16 ccr1,u16 ccr2) {////調整ccr1從0 到500,實現移相角度從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周期的數目(REP+1)對應著//使TIME1的OC1為TIM8的復位信號TIM1->CCMR1|=7<<4;//OC1M[2:0]:輸出比較1模式- 在向上計數時PWM2TIM1->CCMR1|=1<<3;//開啟TIM1_CCR1 OC1PE輸出比較1預裝載使能TIM1->CR2|=4<<4;//MMS[1:0]:主模式選擇100:比較 – OC1REF信號被用于作為觸發輸出(TRGO)。TIM1->CCMR1|=1<<10;//OC2FE 01: 輸出比較2快速使能 TIM1->CCER|=1<<4;//開啟- OC2信號輸出到對應的輸出引腳TIM1->CCER|=1<<6;//開啟- OC2N信號輸出到對應的輸出引腳TIM1->CR1&=~(1<<4);//向上計數 TIM1->CR1&=~(1<<4);//向上計數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;//開啟計數器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- 在向上計數時,一旦TIM1_CNT<TIM1_CCR1時通道1為有效電平,否 //則 為 無 效 電 平 ; 在 向 下 計 數 時 , 一 旦 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 復位模式 ,選中的觸發輸入(TRGI)的上升沿重新初始化計數器TIM8->SMCR|=0<<4;//TS[2:0]:觸發選擇 000: ITR0 TIMx內觸部觸發連接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);//向上計數TIM8->CR1|=1<<7;//TIM1_ARR寄存器被裝入緩沖器TIM8->CR1|=1<<0;//開啟計數器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產生的OC1REF去觸發TIM8的計數復位
關鍵部分如下:
通過調整TIM1->CCR1的值從0到500即可調整占空比從0到100%變化
當TIM1->CCR1=100時的波形:
總結
以上是生活随笔為你收集整理的STM32F103移相全桥PWM寄存器实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: strtok
- 下一篇: Jenkins基础入门-9-构建触发器之