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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于STM32的直流電機(jī)PID調(diào)速系統(tǒng)設(shè)計報告

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:314503 發(fā)表于 2018-4-23 15:22 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式


《電氣控制技術(shù)》
研究生課程設(shè)計報告




題    目 基于STM32的直流電機(jī)PID調(diào)速系統(tǒng)
學(xué)    院   機(jī)械與汽車工程學(xué)院         
專業(yè)班級          車輛工程               
學(xué)    號 22160*            
學(xué)生姓名           李*               
指導(dǎo)教師         康 *               


目錄

1.緒論

2.設(shè)計方案

3.系統(tǒng)硬件電路設(shè)計

3.1整體電路設(shè)計

3.2最小單片機(jī)系統(tǒng)設(shè)計

3.2.1STM32F103復(fù)位電路

3.2.2電源電路

3.3電機(jī)驅(qū)動電路設(shè)計

3.4光電碼盤編碼器電路設(shè)計

3.5 顯示電路設(shè)計

3.6按鍵電路設(shè)計

4.系統(tǒng)軟件設(shè)計

4.1 PID算法

4.2電機(jī)速度采集算法

5.系統(tǒng)調(diào)試

5.1 軟件調(diào)試

5.2 系統(tǒng)測試與分析

6.總結(jié)與展望

附錄一


《智能控制基礎(chǔ)》研究生課程設(shè)計報告

1.緒論

本文主要研究了利用STM32系列單片機(jī),通過PWM方式控制直流電機(jī)調(diào)速的方法。PWM控制技術(shù)以其控制簡單、靈活和動態(tài)響應(yīng)好的優(yōu)點(diǎn)而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,也是人們研究的熱點(diǎn)。由于當(dāng)今科學(xué)技術(shù)的發(fā)展已經(jīng)沒有了學(xué)科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振軟開關(guān)技術(shù)將會成為PWM控制技術(shù)發(fā)展的主要方向之一。

本文就是利用這種控制方式來改變電壓的占空比實(shí)現(xiàn)直流電機(jī)速度的控制。采用的芯片組成了PWM信號的發(fā)生系,然后通過L298N放大來驅(qū)動電機(jī)。利用光電編碼盤器測得電機(jī)速度,然后反饋給單片機(jī),在內(nèi)部進(jìn)行PID運(yùn)算,輸出控制量完成閉環(huán)控制,實(shí)現(xiàn)電機(jī)的調(diào)速控制。

2.設(shè)計方案

根據(jù)系統(tǒng)設(shè)計的任務(wù)和要求,設(shè)計系統(tǒng)方框圖如圖1所示。圖中控制器模塊為系統(tǒng)的核心部件,鍵盤和顯示器用來實(shí)現(xiàn)人機(jī)交互功能,其中通過鍵盤將速度參數(shù)輸入到單片機(jī)中,并且通過控制器顯示到顯示器上。在運(yùn)行過程中控制器產(chǎn)生PWM脈沖送到電機(jī)驅(qū)動電路中,經(jīng)過放大后控制直流電機(jī)轉(zhuǎn)速,同時利用速度檢測模塊將當(dāng)前轉(zhuǎn)速反饋到控制器中,控制器經(jīng)過數(shù)字PID運(yùn)算后改變PWM脈沖的占空比,實(shí)現(xiàn)電機(jī)轉(zhuǎn)速實(shí)時控制的目的。

圖1  系統(tǒng)方案框圖

3.系統(tǒng)硬件電路設(shè)計3.1整體電路設(shè)計

單片機(jī)直流調(diào)速系統(tǒng)可實(shí)現(xiàn)對直流電動機(jī)的平滑調(diào)速。PWM是通過控制固定電壓的直流電源開關(guān)頻率,從而改變負(fù)載兩端的電壓,進(jìn)而達(dá)到控制要求的一種電壓調(diào)整方法。在PWM驅(qū)動控制的調(diào)整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并根據(jù)需要改變一個周期內(nèi)“接通”和“斷開”時間的長短。通過改變直流電機(jī)電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動機(jī)的轉(zhuǎn)速。因此,PWM又被稱為“開關(guān)驅(qū)動裝置”。本系統(tǒng)以STM32單片機(jī)為核心,通過單片機(jī)控制,C語言編程實(shí)現(xiàn)對直流電機(jī)的平滑調(diào)速。

本直流電機(jī)調(diào)速系統(tǒng)以單片機(jī)系統(tǒng)為依托,根據(jù)PWM調(diào)速的基本原理,以直流電機(jī)電樞上電壓的占空比來改變平均電壓的大小,從而控制電動機(jī)的轉(zhuǎn)速為依據(jù),實(shí)現(xiàn)對直流電動機(jī)的平滑調(diào)速,并通過單片機(jī)控制速度的變化。本文所研究的直流電機(jī)調(diào)速系統(tǒng)主要是由硬件和軟件兩大部分組成。硬件部分是前提,是整個系統(tǒng)執(zhí)行的基礎(chǔ),它主要為軟件提供程序運(yùn)行的平臺。而軟件部分,是對硬件端口所體現(xiàn)的信號,加以采集、分析、處理,最終實(shí)現(xiàn)控制器所要實(shí)現(xiàn)的各項(xiàng)功能,達(dá)到控制器自動對電機(jī)速度的有效控制。

本系統(tǒng)硬件資源分配見圖2所示。采用STM32F103單片機(jī)作為核心器件,轉(zhuǎn)速檢測模塊作為電機(jī)轉(zhuǎn)速測量裝置,通過STM32F103的PA1(A相)將電脈沖信號送入單片機(jī)處理,L298作為直流電機(jī)的驅(qū)動模塊,利用320×240TFTLCD顯示器和3個獨(dú)立按鍵作為人機(jī)接口。

圖2 系統(tǒng)電路連接及硬件資源分配圖

3.2最小單片機(jī)系統(tǒng)設(shè)計

STM32F103ZETT6作為MCU,該芯片是STM32F103里面配置非常強(qiáng)大的了,它擁有的資源包括:64KB SRAM、512KB FLASH、2個基本定時器、4個通用定時器、2個高級定時器、2個DMA控制器(共12個通道)、3個SPI、2個IIC、5個串口、1個USB、1個CAN、3個12位ADC、1個12位DAC、1個SDIO接口、1個FSMC接口以及112個通用IO口。該芯片的配置十分強(qiáng)悍,并且還帶外部總線(FSMC)可以用來外擴(kuò)SRAM和連接LCD等,通過FSMC驅(qū)動LCD,可以顯著提高LCD的刷屏速度,是STM32F1家族常用型號里面,最高配置的芯片了。

3.2.1STM32F103復(fù)位電路

STM32F103的復(fù)位電路如圖3所示:

                         圖3 復(fù)位電路圖

因?yàn)镾TM32是低電平復(fù)位的,所以我們設(shè)計的電路也是低電平復(fù)位的,這里的R3和C12構(gòu)成了上電復(fù)位電路。同時,開發(fā)板把TFT_LCD的復(fù)位引腳也接在RESET上,這樣這個復(fù)位按鈕不僅可以用來復(fù)位MCU,還可以復(fù)位LCD。

3.2.2電源電路

STM32F103板載的電源供電部分,其原理圖如圖4所示:

圖4 電源電路

圖中,總共有3個穩(wěn)壓芯片:U12/U13/U15,DC_IN用于外部直流電源輸入,范圍是DC6~24V,輸入電壓經(jīng)過U13 DC-DC芯片轉(zhuǎn)換為5V電源輸出,其中D4是防反接二極管,避免外部直流電源極性搞錯的時候,燒壞開發(fā)板。K2為開發(fā)板的總電源開關(guān),F(xiàn)1為1000ma自恢復(fù)保險絲,用于保護(hù)USB。U12為3.3V穩(wěn)壓芯片,給開發(fā)板提供3.3V電源,而U15則是1.8V穩(wěn)壓芯片,供VS1053的CVDD使用。

3.3電機(jī)驅(qū)動電路設(shè)計

驅(qū)動模塊是控制器與執(zhí)行器之間的橋梁,在本系統(tǒng)中單片機(jī)的I/O口不能直接驅(qū)動電機(jī),只有引入電機(jī)驅(qū)動模塊才能保證電機(jī)按照控制要求運(yùn)行,在這里選用L298N電機(jī)驅(qū)動芯片驅(qū)動電機(jī),該芯片是由四個大功率晶體管組成的H橋電路構(gòu)成,四個晶體管分為兩組,交替導(dǎo)通和截止,用單片機(jī)控制達(dá)林頓管使之工作在開關(guān)狀態(tài),通過調(diào)整輸入脈沖的占空比,調(diào)整電動機(jī)轉(zhuǎn)速。其中輸出腳(SENSEA和SENSEB)用來連接電流檢測電阻,Vss接邏輯控制的電源。Vs為電機(jī)驅(qū)動電源。IN1-IN4輸入引腳為標(biāo)準(zhǔn)TTL 邏輯電平信號,用來控制H橋的開與關(guān)即實(shí)現(xiàn)電機(jī)的正反轉(zhuǎn),ENA、ENB引腳則為使能控制端,用來輸入PWM信號實(shí)現(xiàn)電機(jī)調(diào)速。其電路如圖5所示,利用兩個光電耦合器將單片機(jī)的I/O與驅(qū)動電路進(jìn)行隔離,保證電路安全可靠。這樣單片機(jī)產(chǎn)生的PWM脈沖控制L298N的選通端,使電機(jī)在PWM脈沖的控制下正常運(yùn)行,其中四個二極管對芯片起保護(hù)作用。





圖5 電機(jī)驅(qū)動電路
3.4光電碼盤編碼器電路設(shè)計

在本系統(tǒng)中由于要將電機(jī)本次采樣的速度與上次采樣的速度進(jìn)行比較,通過偏差進(jìn)行PID運(yùn)算,因此速度采集電路是整個系統(tǒng)不可缺少的部分。本次設(shè)計中應(yīng)用了比較常見的光電測速方法來實(shí)現(xiàn),其具體做法是將電機(jī)軸上固定一圓盤,且其邊緣上有N個等分凹槽如圖6所示,在圓盤的一側(cè)固定一個發(fā)光二極管,其位置對準(zhǔn)凹槽處,在另一側(cè)和發(fā)光二極光平行的位置上固定一光敏三極管,如果電動機(jī)轉(zhuǎn)到凹槽處時,發(fā)光二極管通過縫隙將光照射到光敏三極管上,三極管導(dǎo)通,反之三極管截止,電路如圖7所示,從圖中可以得出電機(jī)每轉(zhuǎn)一圈在PA3的輸出端就會產(chǎn)生N個低電平。這樣就可根據(jù)低電平的數(shù)量來計算電機(jī)此時轉(zhuǎn)速了。例如當(dāng)電機(jī)以一定的轉(zhuǎn)速運(yùn)行時,PA3將輸出如圖7所示的脈沖,若知道一段時間t內(nèi)傳感器輸出的低脈沖數(shù)為n,則可求出電機(jī)轉(zhuǎn)速。

圖6 電機(jī)速度采集方案

  圖7 傳感器輸出脈沖波形
3.5 顯示電路設(shè)計

根據(jù)設(shè)計要求要對電機(jī)的轉(zhuǎn)速進(jìn)行讀取,因此在電路中加入顯示模塊是很有必要的。在系統(tǒng)運(yùn)行過程中需要顯示的數(shù)據(jù)比較多,而且需要漢字顯示,在這里選用320×240液晶顯示器比較適合,它是一種圖形點(diǎn)陣液晶顯示器,主要由行驅(qū)動器/列驅(qū)動器及320×240全點(diǎn)陣液晶顯示器組成,可完成漢字顯示。

TFTLCD模塊采用16位的并方式與外部連接,之所以不采用8位的方式,是因?yàn)椴势恋臄?shù)據(jù)量比較大,如果用8位數(shù)據(jù)線,就會比16位方式慢一倍以上,我們當(dāng)然希望速度越快越好,所以我們選擇16位的接口。

3.6按鍵電路設(shè)計

根據(jù)設(shè)計需求,本系統(tǒng)中使用了3個獨(dú)立按鍵用以實(shí)現(xiàn)對電機(jī)轉(zhuǎn)速的設(shè)定以及復(fù)位功能。

鍵盤操作說明:在系統(tǒng)開始運(yùn)行時,320×240TFTLCD將顯示開機(jī)界面,按KEY_2增加速度,按KEY_3減少速度,按KEY_RESET鍵是復(fù)位,使程序回到初始狀態(tài)。

4.系統(tǒng)軟件設(shè)計4.1 PID算法

本系統(tǒng)設(shè)計的核心算法為PID算法,它根據(jù)本次采樣的數(shù)據(jù)與設(shè)定值進(jìn)行比較得出偏差,對偏差進(jìn)行P、I、D運(yùn)算最終利用運(yùn)算結(jié)果控制PWM脈沖的占空比來實(shí)現(xiàn)對加在電機(jī)兩端電壓的調(diào)節(jié),進(jìn)而控制電機(jī)轉(zhuǎn)速。其運(yùn)算公式為:

(1)

如何選擇控制算法的參數(shù),要根據(jù)具體過程的要求來考慮。一般來說,要求被控過程是穩(wěn)定的,能迅速和準(zhǔn)確地跟蹤給定值的變化,超調(diào)量小,在不同干擾下系統(tǒng)輸出應(yīng)能保持在給定值,操作變量不宜過大,在系統(tǒng)和環(huán)境參數(shù)發(fā)生變化時控制應(yīng)保持穩(wěn)定。顯然,要同時滿足上述各項(xiàng)要求是很困難的,必須根據(jù)具體過程的要求,滿足主要方面,并兼顧其它方面。

PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,它根據(jù)給定值與實(shí)際輸出值構(gòu)成的控制偏差:                    =                           (2)

將偏差的比例、積分、微分通過線性組合構(gòu)成控制量,對控制對象進(jìn)行控制,故稱為PID調(diào)節(jié)器。在實(shí)際應(yīng)用中,常根據(jù)對象的特征和控制要求,將P、I、D基本控制規(guī)律進(jìn)行適當(dāng)組合,以達(dá)到對被控對象進(jìn)行有效控制的目的。例如,P調(diào)節(jié)器,PI調(diào)節(jié)器,PID調(diào)節(jié)器等。

模擬PID調(diào)節(jié)器的控制規(guī)律為

                                    (3)

式中,為比例系數(shù),為積分時間常數(shù),為微分時間常數(shù)。

簡單的說,PID調(diào)節(jié)器各校正環(huán)節(jié)的作用是:

(1)比例環(huán)節(jié):即時成比例地反應(yīng)控制系統(tǒng)的偏差信號,偏差一旦產(chǎn)生,調(diào)節(jié)器立即產(chǎn)生控制作用以減少偏差;

(2)積分環(huán)節(jié):主要用于消除靜差,提高系統(tǒng)的無差度。積分作用的強(qiáng)弱取決于積分時間常數(shù)越大,積分作用越弱,反之則越強(qiáng);

(3)微分環(huán)節(jié):能反映偏差信號的變化趨勢(變化速率),并能在偏差信號的值變得太大之前,在系統(tǒng)中引入一個有效的早期修正信號,從而加快系統(tǒng)的動作速度,減少調(diào)節(jié)時間。

4.2電機(jī)速度采集算法

本系統(tǒng)中電機(jī)速度采集是一個非常重要的部分,它的精度直接影響到整個控制的精度。在設(shè)計中采用了光電傳感器做為測速裝置,其計算公式為:   

                            v= r/min                         (3)

式中,速度v的誤差主要是由圓盤邊緣上的凹槽數(shù)的多少決定的,為了減少系統(tǒng)誤差應(yīng)盡量提高凹槽的數(shù)量,在本次設(shè)計中取凹槽數(shù)N為260,采樣時間t為10ms。

5.系統(tǒng)調(diào)試5.1 軟件調(diào)試

在程序編寫的過程中,出現(xiàn)了很多問題,包括鍵盤掃描處理、PWM信號發(fā)生電路的控制、以及單片機(jī)控制直流電機(jī)的轉(zhuǎn)動方向等問題,雖然問題不是很大,但是也讓我研究了好長時間,在解決這些問題的時候,我不斷向老師和同學(xué)請教,希望能通過大家一塊的努力把軟件編寫的更完整,讓系統(tǒng)的功能更完備。經(jīng)過多天的努力探索,也經(jīng)過老師的指導(dǎo),大部分問題都已經(jīng)解決,就是程序還是不能實(shí)現(xiàn)應(yīng)該實(shí)現(xiàn)的功能,這讓我很著急。后來經(jīng)過一點(diǎn)一點(diǎn)的調(diào)試,并認(rèn)真總結(jié),發(fā)現(xiàn)了問題其實(shí)在編寫中斷處理程序時出現(xiàn)了錯誤,修改后即可實(shí)現(xiàn)直流電機(jī)調(diào)速的目的。總結(jié)這次軟件調(diào)試,讓我認(rèn)識到了做軟件調(diào)試的基本方法與流程:

(1)認(rèn)真檢查源代碼,看是否有文字或語法錯誤

(2)逐段子程序進(jìn)行設(shè)計,找出錯誤出現(xiàn)的部分,重點(diǎn)排查

(3)找到合適的方法,仔細(xì)檢查程序,分步調(diào)試直到運(yùn)行成功

5.2 系統(tǒng)測試與分析

為了確定系統(tǒng)與設(shè)計要求的符合程度,需要進(jìn)行系統(tǒng)測試與分析,下面以PID調(diào)節(jié)器為例,具體說明經(jīng)驗(yàn)法的整定步驟:

①讓調(diào)節(jié)器參數(shù)積分系數(shù)=0,實(shí)際微分系數(shù)=0,控制系統(tǒng)投入閉環(huán)運(yùn)行,由小到大改變比例系數(shù),讓擾動信號作階躍變化,觀察控制過程,直到獲得滿意的控制過程為止。

②取比例系數(shù)為當(dāng)前的值乘以5,由小到大增加積分系數(shù),同樣讓擾動信號作階躍變化,直至求得滿意的控制過程。

③積分系數(shù)保持不變,改變比例系數(shù),觀察控制過程有無改善,如有改善則繼續(xù)調(diào)整,直到滿意為止。否則,將原比例系數(shù)增大一些,調(diào)整積分系數(shù),力求改善控制過程。如此反復(fù),直到找到滿意的比例系數(shù)和積分系數(shù)為止。

④引入適當(dāng)?shù)膶?shí)際微分系數(shù)和實(shí)際微分時間,此時可適當(dāng)增大比例系數(shù)和積分系數(shù)。和前述步驟相同,微分時間的整定也需反復(fù)調(diào)整,直到控制過程滿意為止。

根據(jù)上訴方法,通過觀察得出該系統(tǒng)比較合適的P、I、D三者的參數(shù)值為: =5, =0.00105, =0。

6.總結(jié)與展望

這一段時間過的無比的充實(shí),每天都在忙碌著,查閱資料,翻看文檔,了解相關(guān)的知識,每一個設(shè)計細(xì)節(jié)都要仔細(xì)的考慮,每一個環(huán)節(jié)都要查閱相關(guān)的資料,爭取做到完美。在這個系統(tǒng)中以前學(xué)的很多東西現(xiàn)在都用上了,數(shù)碼管的移位顯示等等都是在以前學(xué)習(xí)的基礎(chǔ)上慢慢調(diào)試出來的,所以在寫這篇論文的時候又讓我對以前的知識進(jìn)行了一次回顧,對知識又有了新的認(rèn)識!真是受益匪淺!

通過本次課程設(shè)計,我學(xué)到了許多了東西,知道光靠書本上的東西是不夠的,需額外去查資料。無論是在硬件、軟件還是設(shè)計思路上,我都遇到了不少的問題,在克服困難的過程中,我學(xué)到了許多。知道了PID算法的應(yīng)用,以前總覺得PID就是像做數(shù)學(xué)一樣,不知道實(shí)際應(yīng)用。通過本次設(shè)計,讓我很好的鍛煉了理論與具體項(xiàng)目、課題相結(jié)合開發(fā)、設(shè)計產(chǎn)品的能力。既讓我們懂得了怎樣把理論應(yīng)用于實(shí)際,又讓我們懂得了在實(shí)踐中遇到的問題怎樣用理論去解決。


單片機(jī)源程序如下:
  1. <Main.c>
  2. #include "stm32f10x.h"
  3. #include "delay.h"
  4. #include "exti.h"
  5. #include "lcd.h"
  6. #include "text.h"
  7. #include <DCMotor_PWM.h>
  8. #include <PID_Controller.h>

  9. float WishSpeedMax=360;
  10. float WishSpeedMin=0;
  11. float WishSpeed;
  12. extern  float U_Out[2];

  13. u8 WishSpeedChar[11];
  14. u8 RealSpeedChar[11];
  15. int main(void)
  16. {
  17.               SystemInit();
  18.               delay_init(72);
  19.               NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  20.               EXTI_Config();
  21.               PID_ParameterReckon();
  22.               Tim3_Init();
  23.               DCMotor_Init();
  24.   DCMotor_Out(U_Out[0]);
  25.               WishSpeed=200;   
  26.               POINT_COLOR=BLUE;
  27.               BACK_COLOR=WHITE;
  28.   LCD_Init();
  29.               LCD_Clear(WHITE);
  30.               LCD_ShowString(30,50,"Wished Speed",POINT_COLOR);
  31.               WishSpeedLCDShow();
  32.               LCD_ShowString(30,90,"Real   Speed",POINT_COLOR);
  33.               while(1)
  34.               {
  35.                                           Add_PID_Control();
  36.               }
  37. }
  38. PID_Controller.c

  39. #include <PID_Controller.h>
  40. #include <DCMotor_PWM.h>

  41. extern float WishSpeed;
  42. extern float RealSpeed;

  43. float U_OutMAX=1000;//Õ¼¿Õ±È100%
  44. float U_OutMIN=0;

  45. float Kp;
  46. float Ki;
  47. float Kd;

  48. float Error[3];
  49. float U_Out[2];
  50. float U_Add;

  51. void PID_ParameterReckon(void)
  52. {
  53.               Kp=5;
  54.               Ki=0.00105;
  55.               Kd=0;
  56.   U_Out[0]=0.0;
  57.               Error[2]=0.0;
  58.               Error[1]=0.0;
  59.               Error[0]=0.0;
  60. }
  61. void Add_PID_Control(void)
  62. {
  63.               Error[2]=WishSpeed-RealSpeed;
  64.               if((Error[2]>(-0.05*WishSpeed))&&((Error[2]<(0.05*WishSpeed))))
  65.               {
  66.                             Error[2]=0;
  67.               }
  68.               U_Add=Kp*(Error[2]-Error[1])+Ki*Error[2]+Kd*(Error[2]-2*Error[1]+Error[0]);

  69.               U_Out[1]=U_Add+U_Out[0];
  70.               if(U_Out[1]>U_OutMAX)
  71.                             U_Out[1]=U_OutMAX;
  72.               if(U_Out[1]<U_OutMIN)
  73.                             U_Out[1]=U_OutMIN;
  74.               DCMotor_Out(((int16_t)(U_Out[1])));
  75.               U_Out[0]=U_Out[1];
  76.             
  77.               Error[0]=Error[1];
  78.               Error[1]=Error[2];
  79. }


  80. Dcmotor_PWM.c
  81. #include <DCMotor_PWM.h>
  82. #include "delay.h"

  83. extern  float U_Out[2];
  84. int InPWM_HzNew;
  85. int InPWM_HzOld;
  86. int16_t OutPWM;

  87. static void Tim2_Init(void)
  88. {
  89.               TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  90.               TIM_OCInitTypeDef TIM_OCInitStructure;
  91.             
  92.               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        
  93.             
  94.               TIM_TimeBaseStructure.TIM_Period=1000-1;                                 
  95.               TIM_TimeBaseStructure.TIM_Prescaler=4-1;                    
  96.               TIM_TimeBaseStructure.TIM_ClockDivision=0;                  
  97.               TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   
  98.               TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);                           
  99.               TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;            
  100.               TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  101.               TIM_OCInitStructure.TIM_Pulse=0;                           
  102.               TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;                  
  103.               TIM_OC4Init(TIM2,&TIM_OCInitStructure);                     
  104.               TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);            
  105.             
  106.               TIM_ARRPreloadConfig(TIM2,ENABLE);                          
  107.             
  108.               TIM_Cmd(TIM2,ENABLE);                                       
  109. }

  110. static void Tim5_Init(void)
  111. {
  112.               TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  113.               TIM_ICInitTypeDef       TIM_ICInitStructure;
  114.               GPIO_InitTypeDef GPIO_InitStructure;
  115.               NVIC_InitTypeDef NVIC_InitStructure;
  116.             
  117.               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);        
  118.               RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);            
  119.             
  120.               GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;                                                                                                                                                                                                                                 
  121.               GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
  122.               GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  123.               GPIO_Init(GPIOA,&GPIO_InitStructure);
  124.               GPIO_ResetBits(GPIOA,GPIO_Pin_0);
  125.             
  126.               TIM_TimeBaseStructure.TIM_Period=65536-1;                    
  127.               TIM_TimeBaseStructure.TIM_Prescaler=72-1;                    
  128.               TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;                  
  129.               TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   
  130.               TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);

  131.               TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;
  132.               TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
  133.               TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
  134.               TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
  135.               TIM_ICInitStructure.TIM_ICFilter=0;
  136.               TIM_ICInit(TIM5,&TIM_ICInitStructure);
  137.             
  138.             
  139.               NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;
  140.               NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
  141.               NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  142.               NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  143.               NVIC_Init(&NVIC_InitStructure);
  144.             
  145.               TIM_ITConfig(TIM5,TIM_IT_CC2,ENABLE);
  146.               TIM_Cmd(TIM5,ENABLE);
  147. }

  148. void Tim3_Init(void)
  149. {
  150.               TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  151.               NVIC_InitTypeDef NVIC_InitStructure;
  152.               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  153.             
  154.               TIM_TimeBaseStructure.TIM_Period=10000-1;                    
  155.               TIM_TimeBaseStructure.TIM_Prescaler=72-1;                    
  156.               TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;                  
  157.               TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   
  158.               TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
  159.             
  160.               NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  161.               NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
  162.               NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  163.               NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  164.               NVIC_Init(&NVIC_InitStructure);
  165.               TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
  166.               TIM_Cmd(TIM3,ENABLE);
  167. }

  168. void DCMotor_Init(void)
  169. {
  170.               GPIO_InitTypeDef GPIO_InitStructure;
  171.               RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                     
  172.             
  173.               GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
  174.               GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  175.               GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  176.               GPIO_Init(GPIOA,&GPIO_InitStructure);
  177.             
  178.             
  179.               Tim2_Init();
  180.               Tim5_Init();
  181. }
  182. void DCMotor_Out(int16_t duty)      
  183. {
  184.               if(duty>1000)              duty=1000;
  185.               if(duty<0)                            duty=0;
  186.             
  187.               TIM2->CCR4 = duty;
  188. }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
基于STM32的直流電機(jī)PID調(diào)速系統(tǒng)設(shè)計.doc (4.88 MB, 下載次數(shù): 232)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:415044 發(fā)表于 2018-10-25 10:25 | 只看該作者
非常棒的資料,謝謝樓主分享
回復(fù)

使用道具 舉報

板凳
ID:588361 發(fā)表于 2019-7-24 20:43 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報

地板
ID:564341 發(fā)表于 2019-8-5 15:49 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

5#
ID:530586 發(fā)表于 2019-11-30 14:07 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報

6#
ID:653008 發(fā)表于 2019-11-30 14:59 | 只看該作者
看看學(xué)習(xí)一下
回復(fù)

使用道具 舉報

7#
ID:260263 發(fā)表于 2019-11-30 16:41 | 只看該作者
非常棒的資料,謝謝樓主分享
回復(fù)

使用道具 舉報

8#
ID:121238 發(fā)表于 2019-12-1 22:22 | 只看該作者
不錯,動手就是好的
回復(fù)

使用道具 舉報

9#
ID:1073850 發(fā)表于 2023-5-11 13:29 | 只看該作者
實(shí)用,簡單易懂。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线观看 | 青青草在线视频免费观看 | 国产欧美精品一区 | 一区二区三区中文字幕 | 久久黄视频 | 日韩综合一区 | 精品国产精品国产偷麻豆 | 国产高清亚洲 | 久久精品视频一区二区三区 | 99视频免费在线 | 中文字幕成人av | 高清视频一区二区三区 | 一级片视频免费观看 | 五月网婷婷 | 国产69精品久久99不卡免费版 | 九九热这里只有精品6 | 欧美亚州| 成人一区二区三区在线观看 | 日韩在线一区二区 | 国产福利视频在线观看 | 在线免费观看视频黄 | 一区二区三区在线播放 | 81精品国产乱码久久久久久 | 欧美精品一区二区三区四区五区 | 亚洲一区在线播放 | 青青99| 欧美不卡 | 亚洲三级免费看 | 一区二区国产在线 | 欧美二区在线 | 中文字幕一区在线 | 欧美一区二区三区大片 | 在线免费观看黄色av | 欧美日韩综合精品 | 91av免费观看 | 日韩精品一区二区在线 | 亚洲狠狠爱 | 亚洲精品一级 | 在线观看电影av | 日韩精品一区二区三区视频播放 | www国产成人免费观看视频,深夜成人网 |