廉佐政, 王海珍
(1. 齊齊哈爾大學 現代教育技術中心, 黑龍江 齊齊哈爾 161006;2. 齊齊哈爾大學 計算機與控制工程學院, 黑龍江 齊齊哈爾 161006)
基于STM32的PWM輸出實驗設計
廉佐政1, 王海珍2
(1. 齊齊哈爾大學 現代教育技術中心, 黑龍江 齊齊哈爾 161006;2. 齊齊哈爾大學 計算機與控制工程學院, 黑龍江 齊齊哈爾 161006)
為了提高學生對STM32系列處理器知識的理解和應用能力,設計了PWM輸出的可調照明實驗。硬件系統的設計采用STM32F103VC的ARM芯片,軟件設計采用keil MDK 4.53,結合STM32標準庫V3.5編寫程序。通過程序調試、運行,給出了實驗仿真結果。通過實驗操作,學生不僅掌握了PWM的原理及綜合應用,也進一步提高了對嵌入式系統課程知識的學習興趣,得到了良好的教學效果。
STM32系列處理器; PWM輸出; STM32標準庫; 嵌入式
嵌入式技術已經被廣泛應用到移動通信、PDA、高清電視、智能家電、汽車、醫療儀器、航天航空、互聯網等領域[1-3],嵌入式系統課程在網絡工程專業教學中占有舉足輕重的地位。但是,一些學校在嵌入式系統課程教學中往往重理論、輕項目應用和實踐操作[4]。為此,齊齊哈爾大學在該課程教學中選用嵌入式開發實例教材,以STM32系列的ARM處理器原理為主線,結合仿真實驗,提高了學生對課程知識的應用能力。
STM32系列ARM采用Cortex-M3內核,能夠滿足高性能、低成本、低功耗的嵌入式應用[5]。STM32系列分為STM32F103增強型系列和STM32F101基本型系列[6-8],嵌入式系統課程主要講授STM32F103系列處理器。其中,高級控制定時器TIM1輸出PWM(pulse width modulation,脈沖寬度調制)是該系列處理器的重要功能,也是課程學習的難點知識。
筆者設計了PWM控制的可調照明實驗。用LED模擬照明燈,通過TIM1的參數配置,使其依次輸出4路不同占空比的PWM波形,且每個PWM波形輸出分別對應不同的LED燈照明亮度,模擬實現照明系統不同的亮度調節。
在STM32F103增強型系列產品中,芯片包含1個高級控制定時器TIM1,它可以被看作一個分配到6個通道的三相PWM發生器,它還可以被當成一個完整的通用定時器。4個獨立的通道可以實現輸入捕獲、輸出比較、產生PWM和單脈沖輸出。PWM輸出是TIM1的主要功能。
PWM是利用微處理器的數字輸出對模擬電路進行控制的一種技術[9],它經濟、節約空間、抗噪性能強,已經被廣泛應用在電池涓流通電、照明系統亮度調節、電動機轉速調節等工程問題中[10-13]。
以PWM調節照明設備亮度為例,它是把每一個脈沖寬度均相等的脈沖列作為PWM波形,通過改變脈沖列的周期對輸出波形的頻率進行調整,以改變脈沖的寬度或占空比來實現對輸出電壓的調節。一般而言,只要采用適當的控制方法,即可使輸出的電壓和頻率協同變化。同樣,通過調整PWM波形的周期和占空比,可以實現對驅動電流的控制,從而調節照明系統的亮度。PWM調光的亮度基于人的眼睛對圖像(光線)的視覺暫留的特點,也稱為人眼的余輝效應。對于LED燈而言,如果光的頻率超過100 Hz,人眼可以看到的就是發光源的平均強度,而不是閃爍。
因此,可以采用PWM調節照明設備的亮度。這種調節方法的優點是從處理器到被控系統信號全部數字化,可以極大地延長通信距離,并且PWM波形控制也無需模數轉換。讓信號保持為數字形式,可將噪聲對輸出信號的影響降到最低。噪聲只有在強到足以將邏輯“1”電平轉換為邏輯“0”電平,或者將邏輯“0”電平轉換為邏輯“1”電平時,才能對數字信號產生影響。
實驗硬件系統采用STM32F103VC的ARM芯片,其外設設計用到的基本元器件如表1所示,電路如圖1所示。

表1 可調照明實驗裝置的硬件

圖1 電路圖
使用微處理器的GPIO端口PA.8—PA.11輸出PWM波形,并分別通過三極管Q1—Q4驅動LED1—LED4。PWM波形是按照一定頻率變換的,因此,三極管的狀態不是持續地導通,而是按照PWM方波的頻率間隔導通的,所以LED的狀態是間隔閃爍的。由于人眼對快速變化的光線存在視覺暫留效應,即人眼所看到的是LED的平均亮度,可以認為LED是發光的,只是亮度有所變化,從而達到調節亮度的目的。
軟件系統的設計使用keil MDK 4.53,先配置STM32標準庫V3.5,然后設計軟件程序,利用ARM處理器STM32F103VC中的TIM1高級定時器,在GPIOA端口輸出不同占空比的PWM脈沖信號,用于調節LED的亮度。PWM占空比和LED燈的亮度對應的關系見表2。由于各路輸出的PWM脈沖信號具有不同的占空比,因此LED燈的亮度也會有所不同。

表2 PWM占空比與照明亮度的關系
軟件系統設計主要實現兩個任務:一是在Keil MDK環境下進行STM32標準庫V3.5的配置,二是基于標準庫設計相關程序。
3.1 STM32標準庫V3.5的配置
在STM官網下載標準庫V3.5,然后進行配置[12]。
3.1.1 建立工程模板
如果工程模板建在C:KeilARMExamplesMeasure文件夾下,就在該文件下建立“MDK工程”文件夾,并在其下建立以下文件夾:
(1) Libraries文件夾:用于存放標準庫V3.5的STM32F10x_StdPeriph_Lib_V3.5.0 Libraries STM32F10x_StdPeriph_Driver下的inc和src文件夾;
(2) CMSIS文件夾:用于存放標準庫V3.5的STM32F10x_StdPeriph_Lib_V3.5.0 LibrariesCMSIS文件夾內容,并把CMSISCM3DeviceSupportSTSTM32F10x文件夾下的Startup文件夾剪切出來置于Libraries文件夾下;
(3) Project文件夾:用于存放項目文件及項目的輸出信息,建立Obj和List2個文件夾,分別存放目標文件和列表文件;再建立一個文件夾(如pro1),存放建立的工程文件;
(4) StartUp文件夾:用于存放標準庫V3.5的startuparm目錄下的startup_stm32f10x_hd.s文件;
(5) USER文件夾:建立main.c文件,只包含頭文件#include"stm32f10x.h"即可,再從標準庫V3.5的STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Templat目錄下復制stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h到該文件夾。
3.1.2 建立工程
啟動keil MDK,使用STM32標準庫V3.5新建一個工程,命名為pro1.uvproj,保存在Projectpro1文件夾下面,選擇使用STM32F103VC芯片,確定后,在彈出的“加載系統默認配置”窗口中選擇“否”。
3.1.3 添加文件
在test上單擊右鍵,選擇Manage Components,按圖2把文件加進去,在Libraries目錄下添加stm32f10x_flash.c、stm32F10x_tim.c 、stm32f10x_sdio.c,然后設置編譯文件的路徑。

圖2 工程文件目錄
3.1.4 存儲容量及標準庫選擇
main.c中有#include“stm32f10x.h”,打開該頭文件,找到0070行,取消對#defineSTM32F10X_HD的屏蔽;找到0105行,取消對#defineUSE_STDPERIPH_DRIVER的屏蔽。0070行是選擇存儲容量的型號,每種芯片不一樣,需要選擇;0105行是使用標準庫文件,默認是不用庫的,直接進行寄存器的操作,但由于設計程序時用了標準庫,所以必須選擇。也可以直接按圖3操作。

圖3 存儲容量及標準庫選擇
3.1.5 選項設置
在圖2的test上單擊右鍵,選擇Option for Target ‘test’,進行下面3項設置:
(1) 打開Output頁標簽,選中“Create HEX File”復選框,設置輸出文件所在的目錄為C:KeilARMExamplesMeasureMDK工程ProjectObj;
(2) 打開Listing頁標簽,設置列表文件所在的目錄為C:Keil ARM Examples Measure MDK工程ProjectList;
(3) 打開Debug頁標簽,按圖4設置。

圖4 目標選項設置
3.2 基于標準庫V3.5設計程序
(1) main函數設計。如圖2所示,雙擊main.c,打開main函數窗口,編寫GPIO配置子函數和定時器配置子函數。GPIO配置子函數使用GPIO_Init庫函數,實現PA.8—PA.11引腳輸出,最高工作頻率50 MHz。定時器配置子函數使用TIM_TimeBaseInit、TIM_OC1Init、TIM_OC1PreloadConfig、TIM_Cmd、TIM_CtrlPWMOutputs庫函數,實現定時器1為向上計數模式,4個通道工作在PWM2模式,裝入捕獲比較寄存器的值,與捕獲值相等時輸出低電平;使能TIM1在捕獲比較寄存器上的預裝載寄存器;使能GPIOA端口的PWM主輸出;使能計數器功能。
(2) 程序編譯。打開Project選單,執行rebuild all target files命令,對工程進行編譯。對出現的錯誤進行修改,直至編譯沒有錯誤,就可以調試。打開邏輯分析儀窗口,設置觀察PWM的引腳,連續運行程序,觀察PWM波形變化。
打開Debug選單,執行Start/Stop Debug Session命令,進入調試界面。在快捷工具欄上單擊Analysis Windows按鈕,打開Logic Analyzer窗口;單擊該窗口的左上角的Setup按鈕,設置可觀察的輸出信號。由于PA.8—PA.11輸出PWM信號,所以在“Current Logic Analyzer Signals”下創建4個PORTA,分別對應PA.8—PA.11。圖5所示為PA.8輸出信號設置實例,其他端口的輸出與此類似。設置完畢后單擊Close,關閉Setup Logic Analyzer。連續運行程序,即可觀察到如圖6所示的輸出波形。

圖5 Logic Analyzer的設置

圖6 實驗仿真結果
圖6中的波形由上到下是占空比分別為12.5%、25%、37.5%、50%的4個通道輸出的PWM波形,可以看到LED1—LED4越來越亮。可以通過修改捕獲寄存器的值來改變占空比,從而調節LED燈的亮度。
PWM輸出的主要特點是從處理器到被控系統信號都是數字形式的,無需進行數模轉換。伴隨全控型電力電子器件的出現和迅速發展,PWM得到了廣泛的應用。在嵌入式課程教學中安排可調照明實驗,可幫助學生深入理解STM32系列處理器PWM的原理、應用和實踐操作方法,提高學生的綜合應用能力。
References)
[1] 劉靜靜.基于ARM和μC/OS-Ⅱ的嵌入式應用系統的設計[D].青島:中國海洋大學,2016.
[2] 莫政洲.嵌入式技術在移動通信系統中的應用探析[J].科技創新與應用,2016(12):90.
[3] 周北明.嵌入式技術在船舶區域配電監控中的應用[J].艦船科學技術,2016(16):46-48.
[4] 徐文超,耿艷香,陳雷,等.嵌入式系統原理課程創新型教學改革研究[J].計算機教育,2015(8):55-57.
[5] 魏永輝.嵌入式STM32下無源蜂鳴器發聲[J].科技展望,2016,26(24):145.
[6] 劉火良,楊森.STM32庫開發實戰指南[M].北京:機械工業出版社,2013.
[7] 喻金錢.STM32F系列ARMCortex-M3核微控制器開發與應用[M].北京:清華大學出版社,2011.
[8] 陳志旺.STM32嵌入式微控制器快速上手[M].2版.北京:電子工業出版社,2014.
[9] 涂思涵.脈寬調制電源控制器芯片(PWM)電性能測試技術的研究[D].上海:復旦大學,2013.
[10] 任增田.基于PWM整流技術的充放電系統研究[D].哈爾濱:哈爾濱工程大學,2012.
[11] 趙祖明,李歧強,王榮麗.無線傳感網絡與模糊控制在照明系統中的應用[J].照明工程學報,2014(2):102-106.
[12] 蔡金華.風力發電機組的神經網絡自適應控制策略研究[D].武漢:華中科技大學,2012.
[13] 魯剛強.基于單片機PWM信號控制LED的軟件實現方法[J].電子世界,2012(9):46-47.
Design on experiment of PWM output based on STM32
Lian Zuozheng1, Wang Haizhen2
(1. Modern Educational Technology Center, Qiqihar University,Qiqihar 161006, China;2. College of Computer and Control Engineering, Qiqihar University, Qiqihar 161006, China)
In order to improve the students’ understanding and application ability of STM32 series processors, a kind of the adjustable illumination experiment based on PWM output is devised. The hardware system is designed with the ARM chip of STM32F103VC, and the software with keil MDK 4.53, combining the STM32 standard library V3.5 program. Through the program debugging and running, the experimental simulation results are presented. By the experimental operation, the students not only master PWM principle and its comprehensive application, but also stimulate their interest in learning the Embedded System course, and the good teaching effect is achieved.
STM32 series processor; PWM output; STM32 standard library; embedded system
10.16791/j.cnki.sjg.2017.08.034
2017-02-06
黑龍江省自然科學基金項目(F201218);黑龍江教育科學“十二五”規劃項目(GBC1213078);黑龍江高教學會規劃項目(14G146);齊齊哈爾大學青年教師科研啟動支持計劃項目(2011k-M05);齊齊哈爾市科技局攻關項目(GYGG-201507,NYGG-201304,GYGG-201315、GYZD2013007);齊齊哈爾大學教育科學研究項目(2014018)
廉佐政(1977—),男,黑龍江海倫,碩士,副教授,主要研究方向為智能Agent、數據挖掘和嵌入式技術.E-mail:lianzuozheng@163.com
TN761;TP391.9
A
1002-4956(2017)08-0137-04