日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> STM32 PWM的輸出與Keil軟件仿真
新聞資訊
NEWS INFORMATION

STM32 PWM的輸出與Keil軟件仿真

發(fā)布時間:2019-05-22

導(dǎo)讀:(Pulse Width Modulation)控制——脈沖寬度調(diào)制技術(shù),通過對一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要波形(含形狀和幅值)。 控制技術(shù)在逆變電路中應(yīng)用最廣,應(yīng)用的逆變電路絕大部分是型,廣泛應(yīng)用在從測量、通信到功率控制與變換的許多領(lǐng)域中。

本文引用地址:http://www.eepw.com.cn/article/272990.htm

 

——PWM原理

  脈寬調(diào)制(PWM)基本原理:控制方式就是對逆變電路開關(guān)器件的通斷進(jìn)行控制,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來代替正弦波或所需要的波形。也就是在輸出波形的半個周期中產(chǎn)生多個脈沖,使各脈沖的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。按一定的規(guī)則對各脈沖的寬度進(jìn)行調(diào)制,即可改變逆變電路輸出電壓的大小,也可改變輸出頻率。

  例如,把正弦半波波形分成N等份,就可把正弦半波看成由N個彼此相連的脈沖所組成的波形。這些脈沖寬度相等,都等于 ∏/n ,但幅值不等,且脈沖頂部不是水平直線,而是曲線,各脈沖的幅值按正弦規(guī)律變化。如果把上述脈沖序列用同樣數(shù)量的等幅而不等寬的矩形脈沖序列代替,使矩形脈沖的中點和相應(yīng)正弦等分的中點重合,且使矩形脈沖和相應(yīng)正弦部分面積(即沖量)相等,就得到一組脈沖序列,這就是PWM波形。可以看出,各脈沖寬度是按正弦規(guī)律變化的。根據(jù)沖量相等效果相同的原理,PWM波形和正弦半波是等效的。對于正弦的負(fù)半周,也可以用同樣的方法得到PWM波形。

  在PWM波形中,各脈沖的幅值是相等的,要改變等效輸出正弦波的幅值時,只要按同一比例系數(shù)改變各脈沖的寬度即可,因此在交-直-交變頻器中,PWM逆變電路輸出的脈沖電壓就是直流側(cè)電壓的幅值。

  根據(jù)上述原理,在給出了正弦波頻率,幅值和半個周期內(nèi)的脈沖數(shù)后,PWM波形各脈沖的寬度和間隔就可以準(zhǔn)確計算出來。按照計算結(jié)果控制電路中各開關(guān)器件的通斷,就可以得到所需要的PWM波形。

  下圖為輸出時的PWM波的實時波形。

——特點

  PWM的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進(jìn)行數(shù)模轉(zhuǎn)換,讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1改變?yōu)檫壿?或?qū)⑦壿?改變?yōu)檫壿?時,也才能對數(shù)字信號產(chǎn)生影響。

  對噪聲抵抗能力的增強是PWM相對于模擬控制的另外一個優(yōu)點,而且這也是在某些時候?qū)WM用于通信的主要原因。從模擬信號轉(zhuǎn)向PWM可以極大地延長通信距離。在接收端,通過適當(dāng)?shù)腞C或LC網(wǎng)絡(luò)可以濾除調(diào)制高頻方波并將信號還原為模擬形式。

  由產(chǎn)生的PWM調(diào)速系統(tǒng)

  總之,PWM既經(jīng)濟(jì)、節(jié)約空間、抗噪性能強,是一種值得廣大工程師在許多設(shè)計應(yīng)用中使用的有效技術(shù)。

STM32 PWM的輸出

脈沖寬度模式(PWM模式)可以用來產(chǎn)生一個由TIMx_ARR寄存器確定平率,由TIMx_CCRx寄存器確定占空比的信號。在STM32開發(fā)中,由于官方提供了較為完善的庫函數(shù),使得我們的開發(fā)工作變得相當(dāng)?shù)妮p松,甚至可以在不需要太多了解硬件結(jié)構(gòu)的條件下,完成我的開發(fā)工作,實現(xiàn)我們所需要的功能。在此,筆者也建議大家,在初學(xué)的時候盡量去熟悉固件庫中提供的函數(shù)來調(diào)節(jié)PWM的頻率和占空比,對底層寄存器的操作應(yīng)盡量減少。

本文使用的STM32F103RB的芯片,輸出通道是TIM2_CH2通道,STM32有較強的可移植性,如果讀者的芯片類型跟我不一樣,可以做適當(dāng)?shù)男薷模瓿勺约旱拈_發(fā)。

使用到的庫函數(shù)有: 
stm32f10x.h:用以系統(tǒng)的初始化,無論做什么開發(fā),該庫必須包含 
stm32f10x_tim.h:TIM定時器庫函數(shù) 
stm32f10x_rcc.h:時鐘配置庫函數(shù) 
stm32f10x_gpio.h:GPIO配置庫函數(shù)

由以上的庫函數(shù)可知,我們需要初始化的內(nèi)容有TIM2定時器,時鐘使能配置,GPIO的使能配置。

void RCC_Config(void);
void GPIO_Config(void);
void TIM_Config(void);

接下來就是編寫各個函數(shù)的函數(shù)體,在這些內(nèi)容里面,其實官方已經(jīng)給出了示例,我們按照官方給的函數(shù)庫進(jìn)行配置,然后修改一下官方的一些變量屬性即可。

RCC_Config函數(shù)體

void RCC_Config(void)
{
        //使能GPIOA,TIM2
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
}

GPIO_Config函數(shù)體

void GPIO_Config(void)
{
//GPIO的配置,官方庫有給出需要配置的一些參數(shù),如果忘記了,參照一下即可,我這里配置的是GPIOA_Pin_1
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}

TIM_Config函數(shù)體 
在配置函數(shù)體之前,先了解一下stm32的占空比以及頻率是如何計算的 
①頻率:我們使用的APB1時鐘源是72MHz的,在此我們不做分頻,通過配置相關(guān)的參數(shù)來設(shè)置輸入頻率,計算方法:輸入頻率=APB1時鐘/(預(yù)分頻系數(shù)+1)=72000000Hz/360=200000Hz 
②TIM_TImeBaseStructure.TIM_Period參數(shù)決定了輸出PWM波形的頻率,輸出PWM波形的頻率=定時器的輸入頻率/TIM_TImeBaseStructure.TIM_Period,本例程20000Hz/100=200Hz,即5ms一個周期 
③配置占空比:占空比=配置占空比的值/ TIM_TImeBaseStructure.TIM_Period,以此計算來確定占空比,本案例的占空比為50/100=50% 
④定時器使能

void TIM_Config(void)
{
        TIM_TimeBaseInitTypeDef TIM_TImeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

    //配置TIM2的時鐘輸出頻率,以及其它相關(guān)參數(shù)初始化
        TIM_TImeBaseStructure.TIM_Prescaler=360-1;//設(shè)置PWM的頻率
        TIM_TImeBaseStructure.TIM_CounterMode=0;
        TIM_TImeBaseStructure.TIM_Period=100;
        TIM_TimeBaseInit(TIM2,&TIM_TImeBaseStructure);


    //設(shè)置PWM的輸出方式
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        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_OCIdleState_Reset;   
    //配置占空比
        TIM_OCInitStructure.TIM_Pulse=50;

        TIM_OC2Init(TIM2,&TIM_OCInitStructure);
        TIM_ForcedOC1Config(TIM2,TIM_ForcedAction_Active);
        TIM_Cmd(TIM2,ENABLE);
        TIM_CtrlPWMOutputs(TIM2,ENABLE);

}

 

由此,我們的整個PWM配置完成 

Main函數(shù)

int main()
{
        RCC_Config();
        GPIO_Config();
        TIM_Config();
        while(1)
        {
                ;
        }
}

接下來,我們講解一下,在Keil里面看我們的GPIOA_Pin_1引腳的輸出頻率,波形

Keil軟件仿真

①配置調(diào)試工具 
這里寫圖片描述

②打開調(diào)試,并設(shè)置并檢測GPIO的輸出引腳 
這里寫圖片描述
這里寫圖片描述 
這里寫圖片描述

③全速運行,觀察示波器 
這里寫圖片描述 
這里寫圖片描述

 

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

旬邑县| 兴山县| 云林县| 葵青区| 鲁甸县| 万山特区| 衡南县| 安泽县| 克什克腾旗| 玉龙| 运城市| 金门县| 讷河市| 于田县| 荔浦县| 东乌珠穆沁旗| 竹山县| 石家庄市| 张掖市| 额尔古纳市| 永春县| 华亭县| 鄂伦春自治旗| 荣成市| 定州市| 商城县| 永清县| 西峡县| 深圳市| 高台县| 墨玉县| 吉木乃县| 孝义市| 肇东市| 永修县| 铁岭县| 金寨县| 太湖县| 汨罗市| 即墨市| 包头市|