久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6729|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

[零基礎(chǔ)學(xué)習(xí)STM32]第八講:定時(shí)器PWM實(shí)驗(yàn)—呼吸燈

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:278743 發(fā)表于 2018-3-14 13:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 kkhkbb 于 2018-3-15 09:12 編輯

一、 概述
1、 PWM簡(jiǎn)介
      PWM即脈沖寬度調(diào)制,是一種模擬控制方式,其根據(jù)相應(yīng)載荷的變化來(lái)調(diào)制晶體管基極或MOS管柵極的偏置,來(lái)實(shí)現(xiàn)晶體管或MOS管導(dǎo)通時(shí)間的改變,從而實(shí)現(xiàn)開(kāi)關(guān)穩(wěn)壓電源輸出的改變。這種方式能使電源的輸出電壓在工作條件變化時(shí)保持恒定,是利用微處理器的數(shù)字信號(hào)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。
      PWM的主要應(yīng)用:在STM32中如調(diào)節(jié)屏幕亮度、音調(diào)等應(yīng)用都可以通過(guò)PWM控制占空比進(jìn)行實(shí)現(xiàn)。下面我們會(huì)為大家舉例介紹如何利用PWM控制LED的亮暗,以實(shí)現(xiàn)呼吸燈的效果。
2、PWM的工作原理
      脈寬調(diào)制基本原理:其控制方式就是對(duì)電路開(kāi)關(guān)器件的通斷進(jìn)行控制,使輸出端得到一系列幅值相等的脈沖,用這些脈沖來(lái)代替正弦波或所需要的波形。也就是在輸出波形的半個(gè)周期中產(chǎn)生多個(gè)脈沖,使各脈沖的等值電壓為正弦波形,所獲得的輸出平滑且低次諧波少。按一定的規(guī)則對(duì)各脈沖的寬度進(jìn)行調(diào)制,即可改變電路輸出電壓的大小,也可改變輸出頻率。
    (1)脈寬調(diào)制原理
      脈寬調(diào)制調(diào)制模式可以生產(chǎn)一個(gè)由TIMx_ARR寄存器確定頻率,由TIMx_CCRx確定占空比的信號(hào)。如下圖所示:
                          圖8_0脈寬調(diào)制原理示意圖
        圖中可知0到t2為一個(gè)周期時(shí)間,而占空比由CCRx值決定。一個(gè)周期時(shí)間可以由以下公式計(jì)算:
        其中:ARR為重新裝載值;PSC為預(yù)分頻系數(shù);TCLK為定時(shí)器時(shí)鐘頻率。如本次實(shí)驗(yàn)中TCLk為84M,選擇ARR為499,PSC為83,其一個(gè)周期為0.5ms。
   (2)脈寬調(diào)制原理
          PWM主要工作過(guò)程如下:

                             圖8_1 PWM工作過(guò)程示意圖
     PWM工作步驟解析:        
    a. CCR1捕獲比較值寄存器設(shè)置比較值,將其與當(dāng)前值寄存器的值比較,要說(shuō)明的是修改TIM_CCMR1寄存器的OC1M[2:0]位可控制       PWM模式,方法如下:
  • 110:PWM模式1——向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為有效電平,否則為無(wú)效電平;在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為無(wú)效電平(OC1REF=0),否則有效電平(OC1REF=1)。
  • 111:PWM模式2——在向上計(jì)數(shù)時(shí),一旦TIMx_CNT<TIMx_CCR1時(shí)通道1為無(wú)效電平,否則為有效電平;在向下計(jì)數(shù)時(shí),一旦TIMx_CNT>TIMx_CCR1時(shí)通道1為有效電平,否則為無(wú)效電平。
   b. 經(jīng)過(guò)輸出控制器后,得到OC1ref電平還要經(jīng)過(guò)一個(gè)選擇,其由TIMx_CCRE寄存器的CC1P位控制:輸入/捕獲1輸出極性。0:高 電平有效。1:低電平有效
   c. 選擇完成后經(jīng)過(guò)輸出電路來(lái)輸出,輸出電路由TIM_xCCRE寄存器的CC1E位控制。
       控制方式為0:關(guān)閉  1:打開(kāi)

二、 實(shí)驗(yàn)原理

       STM32的定時(shí)器有PWM功能,iCore3的三個(gè)LED都連接在定時(shí)器的輸出接口上,可以通過(guò)定時(shí)器的PWM輸出控制LED的亮度,從而實(shí)現(xiàn)呼吸燈的功能。硬件連接示意圖如下圖所示:
                        圖8_2  驅(qū)動(dòng)示意圖

三、源代碼

1、主函數(shù)

  1. /*
  2. * Name                : main
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 11/21/2015
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. int main(void)
  15. {
  16.         int i;
  17.         int brightness = 99;
  18.         pwm.initialize();
  19.         float temp = 0.0;
  20.         int data = 0;

  21.         //紅色LED燈循環(huán)由亮變暗,由暗變亮
  22.         while(1){
  23.                 for(i = 0;i < 1000000;i++);
  24.                 brightness ++;
  25.                 if(brightness == 100){
  26.                         brightness = 0;
  27.                 }

  28.                 temp = sin(PI / 99.0 * brightness) * 0.5 + 0.5;
  29.                 temp *= 499;
  30.                 data = (int)temp;

  31.                 pwm.set_compare(data);
  32.         }
  33. }
復(fù)制代碼
2.PWM初始化
   以下是TIM8初始化及PWM設(shè)置程序:
  1. /*
  2. * Name               : initialize
  3. * Description        : ---
  4. * Author             : ysloveivy.
  5. *
  6. * History
  7. * -------------------
  8. * Rev                : 0.00
  9. * Date               : 11/21/2015
  10. *
  11. * create.
  12. * -------------------
  13. */
  14. static int initialize(void)
  15. {  
  16.         GPIO_InitTypeDef           GPIO_InitStructure;
  17.         TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
  18.         TIM_OCInitTypeDef          TIM_OCInitStructure;

  19.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);                       //開(kāi)啟TIM8定時(shí)器的時(shí)鐘
  20.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE);                     //開(kāi)啟GPIOI的時(shí)鐘
  21.         GPIO_PinAFConfig(GPIOI,GPIO_PinSource5,GPIO_AF_TIM8);                     //PI5復(fù)用為TIM8
  22.         //GPIO初始化設(shè)置
  23.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                              //模式設(shè)為復(fù)用
  25.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  26.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                            //復(fù)用推挽輸出
  27.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  28.         GPIO_Init(GPIOI,&GPIO_InitStructure);
  29.         //TIM8初始化
  30.         TIM_TimeBaseStructure.TIM_Prescaler = 83;                                 //設(shè)置預(yù)分頻值
  31.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;               //向上計(jì)數(shù)模式
  32.         TIM_TimeBaseStructure.TIM_Period = 499;                                   //自動(dòng)重裝載值
  33.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;   
  34.        //設(shè)置時(shí)鐘分割           
  35.         TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);
  36.         //TIM8 CH1 LED_RED
  37.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                         //設(shè)置為PWM模式2
  38.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;             //比較輸出使能
  39.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;                //互補(bǔ)輸出使能
  40.         TIM_OCInitStructure.TIM_Pulse = 0;                                        //設(shè)置待裝入捕獲比較寄存器的脈沖值
  41.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                  //當(dāng)定時(shí)器的值小于脈沖值時(shí),輸出低電平
  42.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  43.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  44.         TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  45.         TIM_OC1Init(TIM8, &TIM_OCInitStructure);

  46.         TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);                         //使能輸出比較預(yù)裝載

  47.         TIM_ARRPreloadConfig(TIM8,ENABLE);                                      //使能TIM8自動(dòng)重裝載的預(yù)裝載寄存器允許位
  48.         TIM_Cmd(TIM8, ENABLE);                                                    //TIM8使能
  49.         TIM_CtrlPWMOutputs(TIM8, ENABLE);                                         //使能主輸出

  50.         return 0;
  51. }
復(fù)制代碼
3.修改占空比函數(shù)
  1. static int set_compare(int temp)
  2. {
  3.         TIM_SetCompare1(TIM8,temp);                                                      //修改占空比
  4.         return 0;
  5. }
復(fù)制代碼
4.小知識(shí)
   在上面程序中有一段函數(shù)為:
   GPIO_PinAFConfig(GPIOI,GPIO_PinSource5,GPIO_AF_TIM8);
   它的功能是將PI5復(fù)用為TIM8_CH1,初學(xué)者可能會(huì)問(wèn)了為什么PI5可以復(fù)用為TIM8_CH1,其他引角可不可以。這就要借助該芯片的數(shù)據(jù)手冊(cè)了,芯片上眾多引角他們往往帶有自己特殊的使命,如以下從數(shù)據(jù)手冊(cè)上的截屏:
                  圖8_3 芯片引腳功能示意圖
      其在數(shù)據(jù)手冊(cè)的Pinouts and pin description——STM32F40xxx pin and ball definitions目錄下。前面六列為該芯片手冊(cè)包含的芯片類型,接下來(lái)第七列是引腳的名稱,第八列是引腳類型如可以輸入輸出的I/O口,第八列中有FT標(biāo)識(shí)的引腳表示能承受5V電壓,第九列是注釋,第十列為可復(fù)用功能如PI5要復(fù)用為TIM8_CH1功能則可通過(guò)剛剛介紹的函數(shù)實(shí)現(xiàn),第十一列為可重映射功能。
四、 實(shí)驗(yàn)現(xiàn)象:
      iCore3 雙核心板紅色LED燈亮度從亮到暗,然后從暗到亮。
五、 代碼包下載鏈接
      網(wǎng)盤:http://pan.baidu.com/s/1dEnH5dB


iCore3_8_PWM.rar

940.07 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品1区2区3区 爱爱综合网 | 麻豆91精品91久久久 | 又黑又粗又长的欧美一区 | 亚洲嫩草| 亚洲毛片 | 欧美精品久久久久久 | 亚洲成av片人久久久 | 欧美一区二区三区国产 | 精品乱码一区二区 | 日日碰狠狠躁久久躁96avv | 中文字幕一区二区三区精彩视频 | 性高朝久久久久久久3小时 av一区二区三区四区 | 成人性生交大片免费看r链接 | 欧美日韩成人在线 | 狠狠入ady亚洲精品经典电影 | 成人精品鲁一区一区二区 | 日本在线精品视频 | 欧美h| 99久久精品免费看国产四区 | 亚洲啪啪一区 | 久久精品毛片 | 日本久久久影视 | 日韩av网址在线观看 | 天天躁日日躁狠狠躁2018小说 | 成人国产精品色哟哟 | 成人亚洲视频 | 欧美一区2区三区3区公司 | 日韩精品一二三 | 亚洲欧美日韩在线不卡 | 热久久免费视频 | 国产亚洲一区二区三区在线观看 | 最新av在线播放 | 欧美一级免费看 | 亚洲国产一区在线 | 久久久久久网站 | 欧美日韩亚 | 国产有码 | 久久综合伊人一区二区三 | 日本爱爱视频 | 国产高清自拍视频在线观看 | 国产日韩一区二区三免费高清 |