乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      pwm電機(jī)調(diào)速的原理介紹與代碼實(shí)現(xiàn)

       shouzhuw 2021-12-21

      1、pwm實(shí)現(xiàn)調(diào)速的原理與介紹

      在這里插入圖片描述

      PWM(Pulse Width Modulation)脈沖寬度調(diào)制。

      1)占空比

      pwm占空比就是一個(gè)脈沖周期內(nèi)有效電平在整個(gè)周期所占的比例。

      通過(guò)調(diào)節(jié)PWM的占空比就能調(diào)節(jié)IO口上電壓的持續(xù)性變化,因此也能夠控制外設(shè)的功率進(jìn)行持續(xù)性變化,也就能控制直流電機(jī)的轉(zhuǎn)速快慢。
      那么重點(diǎn)就在于如何調(diào)節(jié)PWM波形的輸出。如下圖所示
      在這里插入圖片描述
      圖中的ARR是我們給定時(shí)器的一個(gè)預(yù)裝載值,CCRx的上下變化是產(chǎn)生PWM波的關(guān)鍵。我們假設(shè)ARR大于CCRx的部分輸出為高電平(即t1-t2、t3-t4、t5-t6),ARR小于CCRx的部分輸出為低電平(即0-t1、t2-t3、t4-t5),則改變CCRx的值就能改變輸出PWM的占空比。
      只要弄明白了上面那幅圖,那就不難理解想要控制PWM的輸出波形,重要的就是如何設(shè)置ARR與CCRx這兩個(gè)寄存器的值了。(此處如何設(shè)置寄存器的值我代碼里會(huì)注釋得非常清楚,可以先看看原理)

      • PWM模式、有效電平

      前面我們假設(shè)ARR大于CCRx時(shí)輸出為高電平,ARR小于CCRx時(shí)輸出為低電平,但在實(shí)際運(yùn)用中可能并非如此,有可能是相反的情況——ARR大于CCRx時(shí)輸出為低電平,ARR小于CCRx時(shí)輸出為高電平,至于到底是哪種情況,還要看PWM是哪種模式、有效電平又設(shè)置的是何種極性了。

      模式1:ARR小于CCRx時(shí)輸出為“有效”電平,ARR大于CCRx時(shí)輸出為“無(wú)效”電平。
      模式2:ARR小于CCRx時(shí)輸出為“無(wú)效”電平,ARR大于CCRx時(shí)輸出為“有效”電平。

      注意,我這里用的是“有效”和“無(wú)效”,而不是“高”和“低”,也就是說(shuō)有效電平可高可低,并非一定就是高電平。PWM模式、效電平極性,需要程序員自己配置相關(guān)的寄存器來(lái)實(shí)現(xiàn)。

      2)配置模式

      ● 向上計(jì)數(shù)配置
      當(dāng)TIM1_CR1寄存器中的DIR位為低的時(shí)候執(zhí)行向上計(jì)數(shù)。
      下面是一個(gè)PWM模式1的例子。當(dāng)TIM1_CNT<TIM1_CCRi時(shí),PWM參考信號(hào)OCiREF為高,否則為低。如果TIM1_CCRi中的比較值大于自動(dòng)重裝載值(TIM1_ARR),則OCiREF保持為’1’。如果比較值為0,則OCiREF保持為’0’。下圖為T(mén)IM1_ARR=8時(shí)邊沿對(duì)齊的PWM波形實(shí)例。
      在這里插入圖片描述
      ● 向下計(jì)數(shù)的配置
      當(dāng)TIM1_CR1寄存器的DIR位為高時(shí)執(zhí)行向下計(jì)數(shù)。
      在PWM模式1時(shí),當(dāng)TIM1_CNT>TIM1_CCRi時(shí)參考信號(hào)OCiREF為低,否則為高。如果TIM1_CCRi中的比較值大于TIM1_ARR中的自動(dòng)重裝載值,則OCiREF保持為’1’。該模式下不能產(chǎn)生0%的PWM波形。

      需要stm8寄存器參考手冊(cè)的可以去csdn下載或者評(píng)論一下

      2、pwm信號(hào)配置流程

      (此處以stm8配置TIM1為例)

      1)設(shè)置自動(dòng)重裝載數(shù)值

      既TIM1_ARR寄存器ARR[15:0]
      在這里插入圖片描述
      在這里插入圖片描述

      2)設(shè)置捕獲比較數(shù)值

      既TIM1_CCRx寄存器CCRi[15:0]
      在這里插入圖片描述
      在這里插入圖片描述

      3)設(shè)置pwm輸出模式及對(duì)齊方式

      既TIM1_CCMRx寄存器OCiM[1:0]和TIM1_CR1寄存器CMS[1:0]位
      在這里插入圖片描述
      在這里插入圖片描述

      4)配置信號(hào)輸出極性并使能輸出

      既TIM1_CCERx寄存器CCiP和CCiE
      在這里插入圖片描述

      5)使能計(jì)數(shù)器打開(kāi)總開(kāi)關(guān)

      既TIM1_CR1寄存器CEN位和TIM1_BKR寄存器MOE位(TIM3沒(méi)有MOE位)
      在這里插入圖片描述
      在這里插入圖片描述
      需要stm8寄存器參考手冊(cè)的可以去csdn下載或者評(píng)論一下

      3、pwm調(diào)速代碼

      (此處以stm8配置TIM3位例子)

      /****************************************************************///TIM3輸出比較功能初始化函數(shù)TIM3_init(),有形參F_PWM_SET,無(wú)返回值//Duty_CH1為通道一PD2的占空比//Duty_CH2為通道二PD0的占空比//F_PWM_SET為自動(dòng)重裝載寄存器數(shù)值/****************************************************************/void Motor_SpeedSet(unsigned long F_PWM_SET,float Duty_CH1,float Duty_CH2){
       
        //配置自動(dòng)重裝載寄存器
        TIM3_ARRH=F_PWM_SET/256;//配置自動(dòng)重裝載寄存器高位“ARRH”
        TIM3_ARRL=F_PWM_SET%256;//配置自動(dòng)重裝載寄存器低位“ARRL”
       
        TIM3_CH1_PWM_SET(F_PWM_SET,Duty_CH1);
        TIM3_CH2_PWM_SET(F_PWM_SET,Duty_CH2);
        
        TIM3_CR1|=0x01;//使能TIM1計(jì)數(shù)器功能“CEN=1”}//Duty_CH1為占空比//F_SET_CH1為輸出比較的數(shù)值//TIM3_CH1為PD2void TIM3_CH1_PWM_SET(unsigned long F_PWM_SET,float Duty_CH1){
       // F_SET_CH1 = 16000;        //TIM1輸出比較功能初始化配置
       // printf('start\n');
        
        float CompareNum;                  //變量為比較值,用于配置比較寄存器
        CompareNum=Duty_CH1*F_PWM_SET;     //利用占空比和預(yù)裝載數(shù)值來(lái)反求比較寄存器所需要設(shè)定的值
        
        /*
        //配置自動(dòng)重裝載寄存器
        TIM3_ARRH=F_PWM_SET/256;
        TIM3_ARRL=F_PWM_SET%256;         
        */
        
        //配置比較計(jì)數(shù)器
        TIM3_CCR1H=((u16)(CompareNum))/256;//配置捕獲/比較寄存器1高位“CCR1H”
        TIM3_CCR1L=((u16)(CompareNum))%256;//配置捕獲/比較寄存器1低位“CCR1L”
        
        //printf('計(jì)數(shù)器配置完成...\n');
        
        //配置向上計(jì)數(shù)模式邊沿對(duì)齊,不用設(shè)置,默認(rèn)向上計(jì)數(shù)
        //TIM1_CR1&=0x8F;
        
        //配置為PWM模式1,OC1M[2:0]=110,需要注意這里只是設(shè)置了有效電平,但是并沒(méi)有說(shuō)有效電平是高電平還是低電平
        //PWM模 - 在 計(jì)數(shù) 式1 向上無(wú)效電平;在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>則為有效電平(OC1REF=1)。
        //CC1通道被配置為輸出,CC1S[1:0]=00
        TIM3_CCMR1=0x60;
        
        //配置CC1P=0,OC1信號(hào)有效電平為高電平
        //也就是比TIM3_CCR小時(shí)輸出高電平,比TIM3_CCR大時(shí)輸出低電平
        TIM3_CCER1&=0xFD;         
        
        //配置CC1E=1,OC1信號(hào)輸出到對(duì)應(yīng)的輸出引腳
        TIM3_CCER1|=0x01;         
        
        //空閑狀態(tài)時(shí)OC1為高電平,不需要設(shè)置
        //TIM1_OISR|=0x01;          
          
        //TIM3_CR1|=0x01;//使能TIM1計(jì)數(shù)器功能“CEN=1”}//Duty_CH1為占空比//F_SET_CH1為輸出比較的數(shù)值//TIM3_CH1為PD0void TIM3_CH2_PWM_SET(unsigned long F_PWM_SET,float Duty_CH2){
       // F_SET_CH1 = 16000;        //TIM1輸出比較功能初始化配置
       // printf('start\n');
        
        float CompareNum;                  //變量為比較值,用于配置比較寄存器
        CompareNum=Duty_CH2*F_PWM_SET;     //利用占空比和預(yù)裝載數(shù)值來(lái)反求比較寄存器所需要設(shè)定的值
        
        /*
        //配置自動(dòng)重裝載寄存器
        TIM3_ARRH=F_PWM_SET/256;
        TIM3_ARRL=F_PWM_SET%256;         
        */
        
        //配置比較計(jì)數(shù)器
        TIM3_CCR2H=((u16)(CompareNum))/256;//配置捕獲/比較寄存器1高位“CCR1H”
        TIM3_CCR2L=((u16)(CompareNum))%256;//配置捕獲/比較寄存器1低位“CCR1L”
       
        
        //配置為PWM模式1,OC1M[2:0]=110,需要注意這里只是設(shè)置了有效電平,但是并沒(méi)有說(shuō)有效電平是高電平還是低電平
        //PWM模 - 在 計(jì)數(shù) 式1 向上無(wú)效電平;在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>則為有效電平(OC1REF=1)。
        //CC1通道被配置為輸出,CC1S[1:0]=00
        TIM3_CCMR2=0x60;
        
        //配置CC2P=0,OC2信號(hào)有效電平為高電平
        //也就是比TIM3_CCR小時(shí)輸出高電平,比TIM3_CCR大時(shí)輸出低電平
        TIM3_CCER1&=0xDF;         
        
        //配置CC2E=1,OC2信號(hào)輸出到對(duì)應(yīng)的輸出引腳
        TIM3_CCER1|=0x10;         
           
        //TIM3_CR1|=0x01;//使能TIM1計(jì)數(shù)器功能“CEN=1”}//將pwm信號(hào)接到l298n的使能端就可以了
       printf('現(xiàn)在開(kāi)始測(cè)試PWM信號(hào)產(chǎn)生...\n');
       case '1':
            Motor_SpeedSet(20000,0.2,0.2);      //一檔速
            break;
       case '2':
            Motor_SpeedSet(20000,0.4,0.4);      //二檔速
            break;
        
            Motor_SpeedSet(60000,0.8,0.8);	//可以配置不同當(dāng)?shù)乃俣?,只要你想?00檔速的小車(chē)都可以
         
            printf('信號(hào)已產(chǎn)生...\n');

      4、為什么pwm可以調(diào)速

      這里參考一篇文章—“STM32 PWM輸出原理和直流電機(jī)PWM驅(qū)動(dòng)原理詳解及例程”,在最下面的參考鏈接可以查看,這位博主寫(xiě)得非常好,這里我提取一些關(guān)鍵原理。

      在這里插入圖片描述
      意思就是說(shuō)當(dāng)燈熄滅了的一瞬間,其實(shí)你還感覺(jué)他是亮著的,當(dāng)燈不停的發(fā)亮再熄滅,只要中間間隔的時(shí)間極其短,我們看上去就像是它一直在亮著的一樣。

      那么這個(gè)時(shí)候思考一下,有兩個(gè)燈,供電電壓相同,在一段固定的時(shí)間內(nèi),A燈在不停地閃爍,頻率及其之快以至于人眼無(wú)法分別,其中有50%的時(shí)間亮著,50%熄滅,B燈一直亮著。那么這樣觀察上去就會(huì)明顯地感覺(jué)到A燈比B燈暗很多。那么這就是一種控制小燈亮度的辦法了。

      當(dāng)然你也可以理解為在相同的功率下,AB兩個(gè)燈都是在做把電能轉(zhuǎn)化為光能的工作,在一天里A燈斷斷續(xù)續(xù)地工作了12小時(shí),B燈連續(xù)不停工作了24小時(shí)。那么誰(shuí)轉(zhuǎn)化的光能更多就顯而易見(jiàn)了,誰(shuí)更亮也就不言而喻了
      在這里插入圖片描述
      這個(gè)時(shí)候只要能在極短時(shí)間內(nèi)控制燈的亮與滅就可以控制亮度了。

      在上圖中AB兩個(gè)燈的供電端電壓可以看成下圖這樣
      在這里插入圖片描述
      并不是!電機(jī)的線圈呢,你懂的哈,像電感類(lèi)似的結(jié)構(gòu),它具有電流的不可突變性,這個(gè)性質(zhì)呢也就是像高中老師說(shuō)的,電感線圈,通直流阻交流,它內(nèi)部產(chǎn)生的磁場(chǎng)不允許電流的突變,他會(huì)將電流產(chǎn)生的磁場(chǎng)用來(lái)抑制電流的變化。
      所以說(shuō)用PWM控制電機(jī)的話,不講驅(qū)動(dòng)電路板原理的話,可以簡(jiǎn)化理解為這樣:用芯片生成的PWM去使電機(jī)兩端的電源圖像變得像PWM信號(hào)一樣。至于他是怎么變得我們下回分解。
      意思就是說(shuō)如果用PWM控制電機(jī),那么電機(jī)兩端的電壓是010101這么突變的,但是電機(jī)電流卻不是,即使電壓為0,因線圈自感電動(dòng)勢(shì)的存在,電機(jī)中依舊有電流流過(guò),電機(jī)依舊繼續(xù)轉(zhuǎn)動(dòng),那么我們使用PWM 為什么可以控制轉(zhuǎn)速呢?
      你也許會(huì)想到高中物理老師說(shuō)的一個(gè)詞語(yǔ):等效電壓。
      我們通過(guò)PWM去控制等效電壓。這樣你就能理解了。
      你也可以根據(jù)能量守恒來(lái)想啊,電機(jī)轉(zhuǎn)起來(lái)過(guò)后,線圈電阻恒定不變,功率恒定不變,兩端電壓峰值也恒定不變,那么這樣情況下,電源電壓圖形上占空比的不同將導(dǎo)電機(jī)在這段時(shí)間內(nèi)致消耗能量的不同,以此達(dá)到轉(zhuǎn)化的機(jī)械能的不同,轉(zhuǎn)速是不是也不同了。這樣是不是很好理解了。

      大概截取就帶這里,如果想看全部的介紹,可以點(diǎn)擊一下文章底部的參考鏈接。

      參考鏈接:
      STM32 PWM輸出原理和直流電機(jī)PWM驅(qū)動(dòng)原理詳解及例程

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多