標(biāo)題: 單片機(jī)PWM控制直流電機(jī)驅(qū)動(dòng)程序+仿真+報(bào)告 [打印本頁(yè)]
作者: 楊西旺 時(shí)間: 2018-12-5 09:44
標(biāo)題: 單片機(jī)PWM控制直流電機(jī)驅(qū)動(dòng)程序+仿真+報(bào)告
直流電機(jī)驅(qū)動(dòng)資料包:
0.png (42.06 KB, 下載次數(shù): 190)
下載附件
2018-12-5 17:18 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (23.56 KB, 下載次數(shù): 150)
下載附件
2018-12-5 17:22 上傳
0.png (12.8 KB, 下載次數(shù): 111)
下載附件
2018-12-5 17:22 上傳
電子系統(tǒng)設(shè)計(jì)報(bào)告
課題名稱 直流電動(dòng)機(jī)驅(qū)動(dòng)
專 業(yè) 電子信息工程技術(shù)
目錄
第1章 設(shè)計(jì)題目與要求
第2章 設(shè)計(jì)方案
2.1 設(shè)計(jì)方案
2.2 方案選擇
2.3 系統(tǒng)框圖
第3章 硬件設(shè)計(jì)
3.1 總體硬件設(shè)計(jì)
3.2 晶體振蕩器電路
3.3 復(fù)位電路
3.4 按鍵輸入電路
3.5 顯示電路
3.6 電機(jī)驅(qū)動(dòng)電路
3.7 電機(jī)模塊
第4章 圖形界面設(shè)計(jì)
4.1 圖形界面設(shè)計(jì)
第5章 軟件設(shè)計(jì)
5.1 程序流程圖
第6章 制作與調(diào)試
6.1 硬件調(diào)試
6.2 程序調(diào)試
6.3 心得體會(huì)
參考文獻(xiàn)
設(shè)計(jì)題目:直流電機(jī)驅(qū)動(dòng)。
設(shè)計(jì)要求:
- 設(shè)計(jì)直流電機(jī)驅(qū)動(dòng)。
- 設(shè)計(jì)液晶屏(LCD1602)顯示電路和獨(dú)立鍵盤輸入電路。
- 能準(zhǔn)確顯示電機(jī)狀態(tài)及轉(zhuǎn)速。
- 能通過(guò)按鍵控制電機(jī)狀態(tài)及轉(zhuǎn)速。
2.1 設(shè)計(jì)方案方案一:?jiǎn)纹瑱C(jī)的四組并行口(P0、P1、P2、P3)在復(fù)位時(shí)是高電平,那么在設(shè)計(jì)按鍵接口時(shí)可以設(shè)計(jì)為低電平有效。當(dāng)?shù)碗娖綍r(shí)判斷按鍵被按下去,執(zhí)行相關(guān)的操作。
按鍵按下去會(huì)存在抖動(dòng)現(xiàn)象。如果對(duì)按鍵進(jìn)行計(jì)數(shù),會(huì)發(fā)現(xiàn)雖然只按下去一次,所計(jì)的數(shù)卻不一致。這樣會(huì)導(dǎo)致錯(cuò)誤的操作。因此需要對(duì)按鍵進(jìn)行消抖,按鍵接口只是執(zhí)行單純的被檢測(cè)功能,需要特殊的功能寄存器,所以使用P1口。
顯示模塊采用LCD1602液晶屏,使用單片機(jī)的P0口。P0比較特殊,需要外接上拉電阻才能正常進(jìn)行輸出?紤]到簡(jiǎn)化仿真圖的設(shè)計(jì),故使用P0口作為L(zhǎng)CD1602液晶屏是數(shù)據(jù)端口。
由于需要對(duì)電機(jī)進(jìn)行測(cè)速和狀態(tài)測(cè),P3存在一些特殊寄存器可以使用,故保留P3口。其它接口均接在除P3口以外的接口。
直流電機(jī)的轉(zhuǎn)速與正向電流持續(xù)時(shí)間成正比,使用PWM方式產(chǎn)生脈沖,電機(jī)轉(zhuǎn)速進(jìn)行調(diào)節(jié)。具體如何產(chǎn)生則使用定時(shí)器T0產(chǎn)生中斷。
測(cè)速則使用T1定時(shí)器、外中斷INT1組合測(cè)量。通過(guò)外中斷INT1的負(fù)跳變來(lái)開(kāi)啟T1計(jì)時(shí)器,通過(guò)測(cè)量?jī)纱呜?fù)脈沖的時(shí)間間隔即可得到轉(zhuǎn)速(電機(jī)轉(zhuǎn)動(dòng)一圈發(fā)出一定時(shí)長(zhǎng)的高電平)。
狀態(tài)的測(cè)量則在再次使用外中斷0、1來(lái)完成。狀態(tài)測(cè)量采用這樣的測(cè)量方式只需要測(cè)量一次即可,占用時(shí)間很短,并且準(zhǔn)確。
方案二:對(duì)方案一的部分進(jìn)行修改。按鍵部分為了響應(yīng)準(zhǔn)確,采用外接高電平的方法。
電機(jī)測(cè)速模塊:仍然不變。
狀態(tài)測(cè)量改成通過(guò)內(nèi)部編程完成測(cè)量,不需要外中斷0、1的參與。
方案三:仍然對(duì)方案一進(jìn)行修改。按鍵部分為確保準(zhǔn)確性,按鍵外部接上高電平。
PWM波形產(chǎn)生模塊使用數(shù)據(jù)選擇器對(duì)電機(jī)的正反轉(zhuǎn)進(jìn)行控制,降低編程難度。
2.2 方案選擇方案一過(guò)于追求準(zhǔn)確性,編程復(fù)雜,過(guò)多的開(kāi)啟中斷實(shí)現(xiàn)功能與其它方案是一樣的,但是大量標(biāo)志位的開(kāi)啟需要特別注意,同時(shí)要小心時(shí)序問(wèn)題。對(duì)編程能力、協(xié)調(diào)有比較高的要求。
方案二準(zhǔn)確的提高了按鍵的準(zhǔn)確性部分,通過(guò)仔細(xì)考慮,與開(kāi)外中斷測(cè)量比較,編程變簡(jiǎn)單。全部實(shí)現(xiàn)比較容易,但為保證準(zhǔn)確性、需要通過(guò)編程進(jìn)行調(diào)整。
方案三經(jīng)過(guò)仔細(xì)考慮,使用數(shù)據(jù)選擇器雖然降低了變成難度,在選擇芯片、了解芯片可能需要多花時(shí)間。
最終認(rèn)為方案二比較可行。
2.3 系統(tǒng)框圖整個(gè)系統(tǒng)以單片機(jī)為核心,處理信息。
- 鍵盤:有7個(gè)鍵盤,每個(gè)鍵盤有不同的功能。鍵盤的輸入信號(hào)流入單片機(jī)需要進(jìn)行消抖,避免產(chǎn)生預(yù)期外的結(jié)果。
- STC89C51:負(fù)責(zé)整個(gè)系統(tǒng)的信息處理。包括鍵盤的輸入信號(hào)處理、根據(jù)鍵盤的信號(hào)發(fā)出電機(jī)驅(qū)動(dòng)信號(hào)、對(duì)電機(jī)的速度和轉(zhuǎn)向進(jìn)行測(cè)量、測(cè)量完成將信息送給顯示。
- 電機(jī)驅(qū)動(dòng)芯片:電機(jī)所需要的驅(qū)動(dòng)電流相對(duì)于STC89C51直接輸出的電流要打的多,對(duì)電機(jī)的控制不理想。反過(guò)來(lái)同樣會(huì)影響到單片機(jī)的正常工作。所以需要通過(guò)驅(qū)動(dòng)芯片來(lái)驅(qū)動(dòng)直流電機(jī)。
- 電機(jī):電機(jī)為MOTOR-ENCODER,有五條線。其中的兩條用來(lái)輸入電流驅(qū)動(dòng)電機(jī),剩余的三條為電機(jī)的編碼輸出。中間的線輸出特征為電機(jī)轉(zhuǎn)動(dòng)一圈輸出一個(gè)正脈沖。邊上兩個(gè)根線輸出的脈沖可調(diào),脈沖的相位相差90度,反應(yīng)了電機(jī)的正反轉(zhuǎn)。
- 顯示:顯示所用器件為LCD1602顯示器,顯示電機(jī)轉(zhuǎn)速,正反轉(zhuǎn)狀態(tài)。
3.1 總體硬件設(shè)計(jì)總體硬件分為:晶體振蕩器電路、復(fù)位電路、按鍵輸入模塊、顯示電路、電機(jī)驅(qū)動(dòng)電路、電機(jī)模塊。如下圖 3.1?1所示
圖 3.1?1
3.2 晶體振蕩器電路晶振X1采用11.0592MHZ,電容C1、C2采用典型值22pF。如圖 3.2?1。該電路的功能是為單片機(jī)提供11.0529MHZ的時(shí)鐘。
圖 3.2?1
3.3 復(fù)位電路電路圖 3.3?1如所示。復(fù)位電路電源為+5V、電容(極性電容)C3采用典型值10uF、電阻R7為820歐姆、按鍵。該電路為單片機(jī)復(fù)位端口提供一定時(shí)間的高電平,當(dāng)單片機(jī)發(fā)生異常時(shí)可以通過(guò)按鍵使單片機(jī)復(fù)位。然后正常運(yùn)行。其中EA/引腳在此電路中不需要使用,只是接上去了而已。
圖 3.3?1
3.4 按鍵輸入電路電路圖如圖 3.4?1所示。按鍵共有6個(gè),分別有不同的功能。按鍵的功能在圖上已經(jīng)標(biāo)出。圖中的六個(gè)電阻阻值為1K歐姆,為限流電阻、還有降壓的作用。電壓沒(méi)有標(biāo)出統(tǒng)一為+5V。只有按下按鍵1才能啟動(dòng)其他按鍵。
圖 3.4?1
3.5 顯示電路電路圖如圖 3.5?1所示。液晶顯示模塊數(shù)據(jù)口與單片機(jī)的P0口連接,其它端口通過(guò)標(biāo)號(hào)與P2.0、P2.1連接。P0口與液晶顯示模塊交換信息、P2.0、P2.1口對(duì)液晶進(jìn)行讀寫、使能控制。
圖 3.5?1
3.6 電機(jī)驅(qū)動(dòng)電路電路圖如圖 3.6?1所示。驅(qū)動(dòng)芯片型號(hào)為L(zhǎng)298其驅(qū)動(dòng)能力很強(qiáng)。VCC為芯片的電源+5V、VS為電機(jī)驅(qū)動(dòng)電壓,最高為45V。IN1、IN2接TTL電平、與單片機(jī)標(biāo)號(hào)為ON、OFF的端口(電機(jī)控制流的輸出端口)連接,ON、OFF端口如圖 3.4?1所示。ENA、ENB為芯片的使能端,高電平時(shí)芯片工作。ENA控制端口IN1、IN2、OUT1、OUT2。低電平時(shí)端口無(wú)法工作,無(wú)法控制電機(jī)。OUT1、OUT2接直流電機(jī)輸入端。圖中接地的端口在圖中用不到。
圖 3.6?1
3.7 電機(jī)模塊電路圖如圖 3.7?1所示。電機(jī)的輸入端口為1、2。1為高電平時(shí),電機(jī)正轉(zhuǎn)2為高電平時(shí),電機(jī)反轉(zhuǎn)。1、2同為高或者低電平則不轉(zhuǎn),ENA低電平也不轉(zhuǎn)。電機(jī)的A、B與單片機(jī)的A、B連接,用于電機(jī)狀態(tài)的測(cè)量。IN1與單片機(jī)的IN1相連,用于測(cè)速。具體連接與標(biāo)號(hào)在圖中已標(biāo)注。
圖 3.7?1
4.1 圖形界面設(shè)計(jì)4.1.1 按鍵界面設(shè)計(jì)如圖 4.1?1所示
按鍵掃描模塊中有6個(gè)按鍵,每個(gè)按鍵會(huì)調(diào)動(dòng)相應(yīng)的模塊。并對(duì)數(shù)據(jù)處理。
4.1.2 LCD1602模塊界面界面設(shè)計(jì)如圖 4.1?2所示:
顯示模塊會(huì)顯示電機(jī)的相關(guān)信息(正轉(zhuǎn)、反轉(zhuǎn)、速度、可以加上電機(jī)是否加速的、減速的測(cè)試、以及顯示),顯示前將依據(jù)按鍵輸入的信號(hào)進(jìn)行運(yùn)算,處理后送入液晶中。
5.1 程序流程圖主程序流程圖如圖 5.1?1所示。
6.1 硬件調(diào)試在確定方案后,便開(kāi)始搭建硬件。從難易程度來(lái)看,該課題是比較簡(jiǎn)單的所以硬件部分搭建容易,搭建完成即可。開(kāi)始方案是選擇方案一,需要使用多個(gè)中斷,需要修改的僅僅是電路的連接。后面發(fā)現(xiàn)方案一過(guò)于復(fù)雜,改用方案二,對(duì)需要修改的連接電路增加標(biāo)號(hào)即可。
6.2 程序調(diào)試由于是自己寫程序,經(jīng)驗(yàn)不足、速度慢,容易出現(xiàn)問(wèn)題。為了保證每一個(gè)環(huán)節(jié)到位,采用邊寫程序、邊調(diào)試的方法。
最先開(kāi)始的模塊是顯示模塊。顯示模塊使用器件為L(zhǎng)CD1602,在單片機(jī)的課程中學(xué)過(guò)做過(guò)關(guān)于這個(gè)器件的實(shí)驗(yàn),對(duì)器件了解有一些,但不是很熟悉。對(duì)原來(lái)的程序沒(méi)有進(jìn)行封裝,最開(kāi)始出現(xiàn)數(shù)據(jù)送入位置錯(cuò)誤,造成預(yù)期之外的結(jié)果。而后通過(guò)仔細(xì)查看課本上的資料,通過(guò)位置對(duì)照,修改后,液晶顯示模塊初步?jīng)]有問(wèn)題。
電機(jī)控制模塊:對(duì)電機(jī)控制需要使用中斷、在中斷里面產(chǎn)生方波信號(hào),并且方波的占空比可調(diào),電機(jī)控制流輸出通道選擇也在這個(gè)模塊。在這個(gè)模塊完成前需要完成一部分鍵盤掃描函數(shù)的設(shè)計(jì)。當(dāng)以上程序完成并運(yùn)行后,通道選擇和占空比都出現(xiàn)了問(wèn)題。最開(kāi)始是無(wú)論按什么鍵電機(jī)都不轉(zhuǎn),于是乎調(diào)整程序,首先發(fā)現(xiàn)單片機(jī)四組端口復(fù)位后輸出為高電平,即表示電機(jī)停轉(zhuǎn),需要對(duì)電機(jī)輸出端口初始化,都為低電平。然后進(jìn)行控制。脈沖波形的占空比的調(diào)節(jié),設(shè)立多個(gè)全局變量,設(shè)置上下限,這樣波形占空比調(diào)節(jié)沒(méi)有問(wèn)題。電機(jī)輸出信號(hào)通道選擇,由于寫程序經(jīng)驗(yàn)不足,邏輯上出現(xiàn)了錯(cuò)誤,導(dǎo)致想要外接數(shù)據(jù)選擇器來(lái)調(diào)節(jié)信號(hào)輸出,進(jìn)而控制電機(jī)正反轉(zhuǎn)。最后經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn)這個(gè)方法實(shí)現(xiàn)起來(lái)比較困難,思路沒(méi)有。還是從中斷里面進(jìn)行調(diào)節(jié)好一些。最終實(shí)現(xiàn)了電機(jī)的調(diào)節(jié)。
電機(jī)轉(zhuǎn)向測(cè)量模塊:此模塊完成后在多次的調(diào)試過(guò)程中發(fā)現(xiàn)使用while語(yǔ)句莫名奇妙對(duì)電極控制模塊產(chǎn)生了影響。為了保證電機(jī)控制模塊沒(méi)有問(wèn)題,對(duì)轉(zhuǎn)向模塊重新進(jìn)行了設(shè)計(jì),理論分析。但是由于時(shí)間問(wèn)題,沒(méi)能完成。
測(cè)速模塊的調(diào)節(jié):測(cè)速模塊需要定時(shí)器1和外中斷1完成。測(cè)速模塊完成后需要與顯示模塊共同完成。由于此前在選擇方案的時(shí)候,過(guò)分依賴中斷和定時(shí)器,進(jìn)行了較長(zhǎng)時(shí)間的論證,電機(jī)控制模塊的調(diào)試由于是個(gè)人編程思想和能力問(wèn)題導(dǎo)致花費(fèi)了大量的時(shí)間。測(cè)速模塊雖然完成,但是沒(méi)有時(shí)間調(diào)試。
6.3 心得體會(huì)在一周的實(shí)訓(xùn)中,發(fā)現(xiàn)了很多的問(wèn)題,也收獲了很多。最開(kāi)始是方案的確定很困難,方案的確定需要對(duì)單片機(jī)的各個(gè)資源非常了解。這從側(cè)面反映了個(gè)人對(duì)單片機(jī)不熟悉,以及特點(diǎn)的不了解,最終方案的敲定花費(fèi)了大量的時(shí)間,導(dǎo)致后面編程、其它問(wèn)題的解決時(shí)間不足。
從定時(shí)器T0的編程中發(fā)現(xiàn)自身的寫程序能力非常薄弱,程序的結(jié)構(gòu)很亂,在一定程度上來(lái)說(shuō)完全是想到什么就寫什么,毫無(wú)章法。更沒(méi)有將程序封裝起來(lái)、留做下次便以稍加修改即可使用。
總之,在這次實(shí)訓(xùn)中讓我看到了自己各個(gè)方面的不足,這些不足通過(guò)平時(shí)的鍛煉是可以補(bǔ)起來(lái)的,反映出學(xué)習(xí)方法存在問(wèn)題,需要加以改進(jìn)。通過(guò)實(shí)訓(xùn),對(duì)單片機(jī)的部分硬件有了進(jìn)一步的了解、熟悉。單片機(jī)實(shí)訓(xùn)是一個(gè)比較綜合的課程,結(jié)合了C語(yǔ)言、單片機(jī)常識(shí)、模擬電路、數(shù)字電路、硬件設(shè)計(jì)、軟件的使用、軟件設(shè)計(jì)。對(duì)培養(yǎng)獨(dú)立解決問(wèn)題的能力、自主學(xué)習(xí)能力、創(chuàng)新思維能力有較大影響。
單片機(jī)源程序如下:
- #include <reg52.h>
- #include<string.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit lcdrs=P2^0; //寄存器選擇,0:數(shù)據(jù)寄存器。1:為狀態(tài)/命令寄存器
- sbit lcden=P2^1; //--LCD控制引腳
- sbit speed=P3^2; //測(cè)速端口
- sbit ENA=P2^2; //電機(jī)使能控制端
- sbit key1=P1^0; //啟動(dòng)按鍵
- sbit key2=P1^1; //正轉(zhuǎn)按鍵
- sbit key3=P1^2; //反轉(zhuǎn)按鍵
- sbit key4=P1^3; //加速按鍵
- sbit key5=P1^4; //減速按鍵
- sbit key6=P1^5; //停止按鍵
- sbit Zheng=P1^6; //正轉(zhuǎn)輸出端口
- sbit Fan=P1^7; //反轉(zhuǎn)輸出端口
- uchar Timer0_flag=4;
- uchar Timer0_BiaoZhi=0;//初始化占空比為1:3(高:低)
- uchar gewei;
- uchar shiwei;
- uchar baiwei;
- /******標(biāo)志位設(shè)置*****/
- uchar KEY1=0;//優(yōu)先級(jí)標(biāo)志
- uchar KEY2=0;//加速標(biāo)志
- uchar INT1_FLAG=0;
- uchar COUNTER_high=0;
- uchar COUNTER_low=0;
- uchar SUM=0;
- uint TIMER1_COUNTER=0;
- uint INT1_tingzhi=0; //在要測(cè)速時(shí)置0
- /****面板顯示****/
- uchar code lcd_desktop11[]="stop";//停止
- uchar code lcd_desktop12[]="ford";//正轉(zhuǎn)
- uchar code lcd_desktop13[]="fanz";//反轉(zhuǎn)
- uchar code lcd_desktop21[]="speedup";//加速
- uchar code lcd_desktop22[]="speeddn";//減速
- uchar code num[]={'0','1','2','3','4','5','6','7','8','9'};//要顯示的轉(zhuǎn)速數(shù)字。
- //-----lcd液晶屏頭文件-----//
- /**延時(shí)函數(shù)**/
- void delayms(uchar xms)
- {
- uchar i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /****LCD寫命令******/
- void write_command(uchar com)//com寫入命令
- {
- lcdrs=0;
- P0=com;
- delayms(2);
- lcden=1;
- delayms(2);
- lcden=0;
- }
- /**************LCD寫數(shù)據(jù)*********/
- void write_data(uchar date)//數(shù)據(jù)為DATA
- {
- lcdrs=1;
- P0=date;
- delayms(2);
- lcden=1;
- delayms(2);
- lcden=0;
- }
- /********LCD初始化****************/
- void lcd_init()//顯示模式設(shè)置
- {
- lcden=0;
- write_command(0x38);
- write_command(0x0c);
- write_command(0x06);
- write_command(0x01);
- }
- /**電機(jī)初始化函數(shù)**/
- void motor_init(void)
- {
- ENA=0; // 停止
- }
- void ZhongDuanKaiQi(void)
- {
- EA=1;
- ET0=1; //計(jì)時(shí)器0允許中斷。產(chǎn)生脈沖。
- ET1=1; //計(jì)時(shí)器1允許中斷。對(duì)低電平進(jìn)行計(jì)時(shí)。
- //EX1=1; //INT0允許中斷。測(cè)速。由外部來(lái)啟動(dòng)。
- IT1=1; //低電平觸發(fā)。
- PX1=0; //低級(jí)中斷。
- PT0=1;
- PT1=0;
- TMOD=0x12;//定時(shí)器工作方式控制
- }
- /***定時(shí)器T1初始化。!等待外部脈沖的到來(lái)***/
- void Timer1_init(void)
- {
- TH1=0;
- TL1=0; //等待外部脈的到來(lái)。INT1
- }
- /*****定時(shí)T0初始化*****/
- void Timer0_init(void)
- {
- TH0=0;
- TL0=0;
- TR0=1;
- }
- /********測(cè)速模塊,顯示速度*******/
- void speed_test(void)
- {
- // TIMER1_COUNTER;
- COUNTER_high=TH1;
- COUNTER_low=TL1;
- SUM=COUNTER_high*256+COUNTER_low+TIMER1_COUNTER*65536;//得到的是多少us。
- SUM=SUM/1000; //化為毫秒。
- SUM=1000/SUM; //圈每秒。
- SUM=SUM*60; //圈每分鐘;三位數(shù)。
- gewei=SUM%10;
- shiwei=SUM/10%10;
- baiwei=SUM/100;
- write_command(0xc0);
- write_data(baiwei);
- write_command(0xc1);
- write_data(shiwei);
- write_command(0xc2);
- write_data(gewei);
- SUM=0;
- TIMER1_COUNTER=0;
- }
- /********外中斷1函數(shù)**********/
- void INT1_QIDONG() interrupt 2
- {
- INT1_tingzhi++;
- if(INT1_tingzhi==5)
- {
- INT1_tingzhi=5;EX1=0;//關(guān)閉中斷。
- }
- if(INT1_tingzhi<=4)
- {
- INT1_FLAG++;
- if(INT1_FLAG==2)
- {
- INT1_FLAG=0;TR1=0;speed_test();
- }
- else
- {
- Timer1_init();
- TR1=1;
- }
- }
- }
- /******定時(shí)器T1計(jì)數(shù)*******/
- void Timer1_QIDONG() interrupt 3
- {
- TIMER1_COUNTER++;
- }
- /**相位測(cè)量并輸出!!!!!出現(xiàn)問(wèn)題???**/
- void xiangwei_test(void)
- {
- uchar i=0,j=0;
- //while((P2^3==0)&&(P2^4==0));
- //if((P2^3==0)&&(P2^4==0))
- {
- //delayms(5);
- if(P2^3==1)
- {
- write_command(0x01);
- write_command(0x80);for(i=0;i<=3;i++) write_data(lcd_desktop13[i]);//反轉(zhuǎn)。
- j++;//反轉(zhuǎn)
- }
-
- if(P2^4==1)
- {
- write_command(0x01);
- write_command(0x80);for(i=0;i<=3;i++) write_data(lcd_desktop12[i]);//正轉(zhuǎn)。
- j++;
- }
- }
- }
- /****T0中斷發(fā)出信號(hào)并進(jìn)行通道選擇****/
- void Timer0() interrupt 1
- {
- Timer0_flag--;
- if((Timer0_BiaoZhi)>=(Timer0_flag))
- {
- if(KEY2==0)
- {
- Zheng=1;Fan=0;
- }
- else
- {
- Zheng=0;Fan=1;
- }
- }
- else
- {
- Zheng=0;Fan=0;
- }
- if(Timer0_flag==0) Timer0_flag=5;
- }
- void Guan(void)
- {
- ET0=0;
- EX1=0;
- ET1=0;
- }
- void keyscan() //按鍵掃描函數(shù)
- {
- uint i=0;
- if(key1==0) //按鍵K1啟動(dòng)按鈕。只有該位啟動(dòng)時(shí),后面的幾位才有效。啟動(dòng)T0計(jì)數(shù)開(kāi)始發(fā)出脈沖。
- {
- delayms(10);
- if(key1==0)
- {
- while(!key1);
- KEY1=5;
- Fan=0;
- Zheng=0;
- ENA=1;
- KEY2=0;//初始化為正轉(zhuǎn)。
- Timer0_BiaoZhi=0;
- Timer0_flag=4;
-
- ZhongDuanKaiQi();//開(kāi)啟中斷
- Timer0_init();// 初始化并開(kāi)始發(fā)出脈場(chǎng)外中斷已經(jīng)開(kāi)啟。
- EX1=1; //外中斷開(kāi)啟;測(cè)速,顯示速度。五次后結(jié)束關(guān)閉外中斷1。出現(xiàn)問(wèn)題。。
-
- write_command(0x80);
- for(i=0;i<strlen(lcd_desktop11);i++)//顯示正轉(zhuǎn)。
- write_data(lcd_desktop12[i]);
- }
- }
-
- if((key2==0)&&(KEY1=5)) //按鍵K2按下,(正轉(zhuǎn))只改變轉(zhuǎn)向(標(biāo)志位改變輸出端口)
- {
- delayms(10);
- if(key2==0)
- {
- while(!key2);
- KEY2=0; //正轉(zhuǎn)標(biāo)志,電機(jī)正向旋轉(zhuǎn)。
- //KEY2=(~1);
- xiangwei_test();
- KEY1=5;
- }
- }
-
- if((key3==0)&&(KEY1=5)) //按鍵K3按下,(反轉(zhuǎn))只改變轉(zhuǎn)向
- {
- delayms(10);
- if(key3==0)
- {
- while(!key3);
- KEY2=~0; //反轉(zhuǎn)標(biāo)志。
- //KEY2=(~0);
- xiangwei_test();
- KEY1=5;
- }
- }
- if((key4==0)&&(KEY1==5)) //按鍵K4按下,(加速)改變裝入的數(shù)值?循環(huán)次數(shù)?執(zhí)行if里面的語(yǔ)句,通過(guò)size++來(lái)改變幅值的頻率
- {
- delayms(10);
- if(key4==0)
- {
- while(!key4);
- if(Timer0_BiaoZhi<4)
- {
- Timer0_BiaoZhi++;
- }
- else
- {
- Timer0_BiaoZhi=4;
- }
- EX1=1;
- KEY1=5;
- }
-
- }
-
- if((key5==0)&&(KEY1==5)) //按鍵K5按下,(減速)對(duì)其它標(biāo)志位沒(méi)有影響。
- {
- delayms(5);
- if(key5==0)
- {
- while(!key5);
- if(Timer0_BiaoZhi==0)
- {
- Timer0_BiaoZhi=0;
- }
- else
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
直流電機(jī)驅(qū)動(dòng).zip
(2.68 MB, 下載次數(shù): 916)
2018-12-5 09:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: 且聽(tīng)風(fēng)吟夏 時(shí)間: 2019-2-25 20:43
大神,求余下的代碼啊啊啊啊
作者: suihukankaneryi 時(shí)間: 2019-6-4 17:14
多謝大佬。
作者: zyjdmmm 時(shí)間: 2019-7-17 14:55
多謝大佬啊
作者: wxywanghao 時(shí)間: 2019-8-29 15:57
求余下代碼
作者: lindeijun1 時(shí)間: 2019-12-4 17:18
謝謝樓主分享!!
作者: 653247108 時(shí)間: 2019-12-10 10:38
怎么產(chǎn)生方波信號(hào)的
沒(méi)有看懂
作者: 楠鑫 時(shí)間: 2020-1-14 10:31
謝謝大佬
作者: lykfoxconn 時(shí)間: 2020-2-26 14:09
好,不錯(cuò)的,利好,高手
作者: 蝦兵0蟹將 時(shí)間: 2020-2-26 17:10
這個(gè)要好好學(xué)習(xí)一下
作者: yypty 時(shí)間: 2020-5-9 09:15
蝦兵0蟹將 發(fā)表于 2020-2-26 17:10
這個(gè)要好好學(xué)習(xí)一下
為什么顯示模塊沒(méi)用?
作者: LETEMPSCC 時(shí)間: 2020-5-14 11:07
已下載,但是代碼具體是哪個(gè)文件呢?
作者: 774292147 時(shí)間: 2020-5-14 13:14
想問(wèn)一下,問(wèn)什么顯示模塊沒(méi)有變化,按理說(shuō)應(yīng)該停止顯示stop,正轉(zhuǎn)ford,反轉(zhuǎn)fanz,加速加速,減速speeddn,還可以輸出轉(zhuǎn)速表示數(shù)字,但是仿真的時(shí)候只有ford,這是為啥,程序哪里出錯(cuò)了嗎
作者: LETEMPSCC 時(shí)間: 2020-5-15 21:43
我也遇到了這個(gè)問(wèn)題,而且顯示不了轉(zhuǎn)速
作者: 永琪琪 時(shí)間: 2020-5-15 22:47
可以學(xué)習(xí)學(xué)習(xí)
作者: 九夏憂傷 時(shí)間: 2020-5-25 16:56
感謝大佬 學(xué)習(xí)一下
作者: 1539035918 時(shí)間: 2021-3-18 11:49
感謝大佬 學(xué)習(xí)一下
作者: canyua 時(shí)間: 2021-4-5 10:28
大佬大佬,不錯(cuò),PWM最好的仿真,其他的速度都不能維持。
作者: 噓!我在冬眠 時(shí)間: 2021-5-21 14:12
這個(gè)解決了嗎
作者: 楊佳剛 時(shí)間: 2021-5-28 09:31
樓主,請(qǐng)問(wèn)為什么LCD顯示屏不顯示轉(zhuǎn)速 一直顯示ford正轉(zhuǎn)
作者: 楊佳剛 時(shí)間: 2021-5-28 09:44
我也一樣,你們解決了嗎?是不是差一個(gè)測(cè)速模塊
作者: xiaojang142 時(shí)間: 2024-7-19 04:55
真的很不錯(cuò),受用,學(xué)習(xí)了。
作者: joyb 時(shí)間: 2024-7-26 17:13
c沒(méi)有找到PWM,仿真有,源程序和仿真不是一回事
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |