1. 設(shè)計要求  如右圖所示,以MCS-51系列單片機為核心設(shè)計一個具有獨創(chuàng)功能的計量控制系統(tǒng),控制瓶裝產(chǎn)品包裝生產(chǎn)流水線,每計滿一定瓶數(shù)產(chǎn)品時發(fā)出一個包裝控制信號,通過相關(guān)電路驅(qū)動包裝機完成一次包裝動作。要求: 1. 每箱產(chǎn)品的瓶數(shù)為51瓶,可記錄已封裝箱數(shù); 2. 系統(tǒng)具有人機交互功能,可由用戶控制流水線工作速度,并實時顯示已計量瓶數(shù)和封裝箱數(shù); 3. 流水線使用48V 2000W直流電機進行傳動,設(shè)計MCU與該電機的接口電路,實現(xiàn)流水線傳動的啟停和速度 控制,并仿真其可行性; 4. 設(shè)計用于檢測瓶子的 傳感器應(yīng)用電路,實現(xiàn)對瓶數(shù)的感測; 5. 包裝機數(shù)據(jù)接口為 RS-485接口,設(shè)計MCU與包裝機的接口電路; 6. 包裝機的數(shù)據(jù)通信采用 10位異步串行通信幀標(biāo)準(zhǔn)格式,即1位起始位、8 位數(shù)據(jù)位、1 個停止位,無奇偶校驗和硬件數(shù)據(jù)流控制,通信波特率為 4800 bps,幀格式為:
每幀包含3個字節(jié),第1個字節(jié)為同步頭字節(jié)“0xAA”,第2個字節(jié)為命令字節(jié)(“0x33”啟動包裝,“0x55”停機),第3個字節(jié)為校驗和(前面兩個字節(jié)的無符號代數(shù)和),設(shè)計、 編寫具體的通信程序并仿真; 7. 創(chuàng)新功能:在達(dá)到51瓶是蜂鳴器鳴叫提醒; 8. 設(shè)計、繪制系統(tǒng)電路PCB,手寫簽名在Top Layer的正中位置。 2. 硬件總體設(shè)計 2.1 總體設(shè)計方案 由設(shè)計要求可知,需使用MCS-51系列單片機,構(gòu)建控制系統(tǒng),實現(xiàn)系統(tǒng)的控制。所以采用AT89C52 單片機為核心,以6個彈跳按鈕和光電傳感器作為輸入端,達(dá)到控制直流電機的正轉(zhuǎn)、反轉(zhuǎn)、停止、加速、減速、數(shù)據(jù)清除及瓶子數(shù)量采集功能,并且由LCD1602顯示模塊可以顯示瓶子數(shù)量、箱子數(shù)量以及電機轉(zhuǎn)速。在設(shè)計中,采用 PWM 技術(shù)對電機進行控制,并通過485通訊協(xié)議控制包裝機的啟停。 該直流電機控制系統(tǒng)的設(shè)計,在總體上大致可分為以下8個部分組成:AT89C52單片機最小系統(tǒng),按鍵輸入模塊,瓶數(shù)檢測模塊,1602顯示模塊,電機驅(qū)動模塊,包裝機控制模塊,包裝機控制模塊以及直流電機。系統(tǒng)總體方案圖如圖 1 所示。 圖 1 系統(tǒng)總體方案圖 2.2 工作原理 2.2.1 電機控制原理 根據(jù)勵磁方式不同, 直流電機分為自勵和他勵兩種類型。 不同勵磁方式的直流電機機械特性曲線有所不同。對于直流電機來說,認(rèn)為機械特性方程式為:  (公式1) 式中U N,φN----------額定電樞電壓、額定磁通量; Ke,Kt ---與電機有關(guān)的常數(shù); Rad,Ra -----電樞外加電阻、電樞內(nèi)電阻; n,△n—理想空載轉(zhuǎn)速、轉(zhuǎn)速降。 分析公式1可得,當(dāng)分別改變UN、φN和Rad時,可以得到不同的轉(zhuǎn)速n,從而實現(xiàn)對速度的調(diào)節(jié)。由于φ=T,當(dāng)改變勵磁電流If時,可以改變磁通量φ的大小,從而達(dá)到變磁通調(diào)速的目的。但由于勵磁線圈發(fā)熱和電動機磁飽和的限制,電動機的勵磁電流If和磁通量φ只能在低于其額定值的范圍內(nèi)調(diào)節(jié),故只能弱磁調(diào)速。而對于調(diào)節(jié)電樞外加電阻 Rad時,會使機械特性變軟,導(dǎo)致電機帶負(fù)載能力減弱。 PWM是通過控制固定電壓的直流電源開關(guān)頻率,從而改變負(fù)載兩端的電壓,進而達(dá)AT89C52輸入模塊電源模塊驅(qū)動模塊直流電機達(dá)到控制要求的一種電壓調(diào)整方法。PWM可到控制要求的一種電壓調(diào)整方法。PWM 可以應(yīng)用在許多方面,如電機調(diào)速、溫度控制、壓力控制等。 在 PWM 驅(qū)動控制的調(diào)整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并根據(jù)需要改變一個周期內(nèi)“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動機的轉(zhuǎn)速。因此,PWM 又被稱為“開關(guān)驅(qū)動裝置”。在脈沖作用下,當(dāng)電機通電時,速度增加;電機斷電時,速度逐漸減少。只要按一定規(guī)律,改變通、斷電的時間,即可讓電機轉(zhuǎn)速得到控制。當(dāng)我們改變占空比時,可以得到不同的電機平均速度,從而達(dá)到調(diào)速的目的。以應(yīng)用在許多方面,如電機調(diào)速、溫度控制、壓力控制等。在PWM 驅(qū)動控制的調(diào)整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并根據(jù)需要改變一個周期內(nèi)“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來改變平均電壓的大小,從而控制電動機的轉(zhuǎn)速。因此,PWM又被稱為“開關(guān)驅(qū)動裝置”。在脈沖作用下,當(dāng)電機通電時,速度增加;電機斷電時,速度逐漸減少。只要按一定規(guī)律,改變通、斷電的時間,即可讓電機轉(zhuǎn)速得到控制。當(dāng)我們改變占空比時,可以得到不同的電機平均速度,從而達(dá)到調(diào)速的目的。 2.2.2 光電傳感器原理 光電傳感器是通過把光強度的變化轉(zhuǎn)換成電信號的變化來實現(xiàn)控制的。 光電傳感器在一般情況下,有三部分構(gòu)成,它們分為:發(fā)送器、接收器和檢測電路。 發(fā)送器對準(zhǔn)目標(biāo)發(fā)射光束,發(fā)射的光束一般來源于半導(dǎo)體光源,發(fā)光二極管(LED)、激光二極管及紅外發(fā)射二極管。光束不間斷地發(fā)射,或者改變脈沖寬度。接收器有光電二極管、光電三極管、光電池組成。在接收器的前面,裝有光學(xué)元件如透鏡和光圈等。在其后面是檢測電路,它能濾出有效信號和應(yīng)用該信號。 此外,光電開關(guān)的結(jié)構(gòu)元件中還有發(fā)射板和光導(dǎo)纖維。 三角反射板是結(jié)構(gòu)牢固的發(fā)射裝置。它由很小的三角錐體反射材料組成,能夠使光束準(zhǔn)確地從反射板中返回,具有實用意義。它可以在與光軸0到25的范圍改變發(fā)射角,使光束幾乎是從一根發(fā)射線,經(jīng)過反射后,還是從這根反射線返回。 2.3 AT89C52最小系統(tǒng) 2.3.1 AT89C52芯片簡介 采用AT89C52是MSC-51系列單片機的升級版,由世界著名半導(dǎo)體公司 ATMEL在購買MSC-51設(shè)計結(jié)構(gòu)后,利用自身優(yōu)勢技術(shù)——閃存生產(chǎn)技術(shù)對舊技術(shù)進行改進和擴展,同時使用新的半導(dǎo)體生產(chǎn)工藝,最終得到成型產(chǎn)品。與此同時,世界上其他的著名公司也通過基本的51內(nèi)核,結(jié)合公司自身技術(shù)進行改進生產(chǎn),推廣了一批如51F020等高性能單片機。AT89C52片內(nèi)集成256字節(jié)程序運行空間, 8K字節(jié)Flash存儲空間,支持最大64k外部存儲擴展。根據(jù)不同的運行速度和功耗的要求,時鐘頻率可以設(shè)置在0-33M之間。片內(nèi)資源有4組I/O控制端口、3個定時器、8個中斷、軟件設(shè)置低耗能模式、看門狗和斷電保護。可以在4V到5.5V寬電壓范圍內(nèi)正常工作。不斷發(fā)展的半導(dǎo)體工藝也讓該單片機的功耗不斷降低。同時,該單片機支持計算機并口下載,簡單的數(shù)字芯片就可以制成下載線,僅僅幾塊錢的價格讓該型號單片機暢銷 10 年不衰。根據(jù)不同場合的要求,這款單片機提供了多種封裝,本次設(shè)計根據(jù)最小系統(tǒng)有時需要更換單片機的具體情況,使用雙列直插PID-40 的封裝。 2.3.2 AT89C52最小系統(tǒng)組成 AT89C52最小系統(tǒng)由AT89C52芯片、復(fù)位電路和時鐘電路組成。復(fù)位電路和時鐘電路是維持單片機最小系統(tǒng)運行的基本模塊。時鐘電路采用12M晶振組成。復(fù)位電路通常分為兩種:上電復(fù)位和手動復(fù)位。有時系統(tǒng)在運行過程中出現(xiàn)程序跑飛的情況,在程序開發(fā)過程中,經(jīng)常需要手動復(fù)位,所以本次設(shè)計選用手動復(fù)位。 圖2 AT89C52最小系統(tǒng)圖 2.4輸入模塊 正轉(zhuǎn)、反轉(zhuǎn)、停止、加速、減速、清除數(shù)據(jù)六個按鈕分別與單片機的 P1.0、P1.1、P1.2、P1.3、P1.4、P1.5相連,然后再與地相連,當(dāng)按鈕被按下時51芯片管腳電壓被拉低,檢測管腳電平實現(xiàn)按鈕檢測。正轉(zhuǎn)實現(xiàn)直流電機的正轉(zhuǎn),反轉(zhuǎn)實現(xiàn)直流電機的反轉(zhuǎn),停止實現(xiàn)直流電機的停轉(zhuǎn),加速實現(xiàn)直流電機的加速,減速實現(xiàn)直流電機的減速,清除數(shù)據(jù)實現(xiàn)瓶子數(shù)量和箱子數(shù)量的清除,具體輸入模塊如下: 圖3 按鍵輸入模塊 2.5 LCD1602顯示模塊 2.5.1 LCD1602簡介 點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成。顯示屏上64×16個顯示單元與顯示RAM區(qū)的1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容與顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如顯示屏第一行的亮暗由RAM區(qū)的000H~00FH的16字節(jié)的內(nèi)容決定,當(dāng)(000H)=FFH時,屏幕左上角顯示一條短亮線,長度為8個點;當(dāng)(3FFH)=FFH時,屏幕右下角顯示一條短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H時,在屏幕的頂部顯示一條由8條亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字和符號等的點陣式LCD,目前常用16×1,16×2,20×2和40×2等的模塊。一般的LCD1602字符型液晶顯示器的內(nèi)部控制器大部分為HD44780,能夠顯示英文字母、阿拉伯?dāng)?shù)字、日文片假名和一般性符號。 2.5.2 LCD1602連接與控制 LCD1602顯示模塊與單片機P2.5、P2.6、P2.7以及P0口連接,通過單片機編寫LCD控制子程序,實現(xiàn)LCD1602的數(shù)據(jù)傳輸和顯示控制。 圖4 轉(zhuǎn)速顯示模塊 2.6 包裝機控制模塊 通過兩片MAX487芯片連接構(gòu)成485通信模塊,通過單片機P3.0和P3.1實現(xiàn)單片機與MAX487芯片的串口通信傳輸數(shù)據(jù),以實現(xiàn)包裝機的啟?刂啤 通過51單片機自帶的串口通訊實現(xiàn)連接,設(shè)置定時器1實現(xiàn)串口通訊的控制,定時器1設(shè)置工作于方式2,開啟定時器的串口通信的相關(guān)寄存器,通過SBUF寄存器發(fā)送數(shù)據(jù)。 定時器1寄存器設(shè)置: TMOD=0x21;//定時器1工作于方式2 TL1=0xfa;//波特率設(shè)置為4800 TH1=0xfa;//波特率設(shè)置為4800 SCON=0x50;//串行口設(shè)置為方式1,REN置1時允許接收數(shù)據(jù) PCON &= 0xef;//PCON寄存器設(shè)置 TR1=1;//開定時器1
圖5 包裝機控制模塊
2.7 蜂鳴器控制模塊 通過三極管控制電路的通斷以實現(xiàn)蜂鳴器的鳴叫控制,實現(xiàn)包裝機開動提醒。通過P1.6的通斷時間控制蜂鳴器的鳴叫? 圖6蜂鳴器控制模塊 2.8電機驅(qū)動模塊 由設(shè)計要求可知,電機為額定電壓為48V的直流電機,PWM的頻率為50HZ,電機控制的最高轉(zhuǎn)速為450rpm,最低轉(zhuǎn)速為50rpm。采用L6203芯片驅(qū)動直流電機,連接單片機的P3.0、P3.1、P3.7口,P3.0、P3.1分別控制電機的正反轉(zhuǎn),P3.7控制L6203芯片的通斷。當(dāng)P3.0=1,P3.1=0時,電機正轉(zhuǎn),當(dāng)P3.0=0,P3.1=1時,電機反轉(zhuǎn)。為了控制直流電機的轉(zhuǎn)速,為1的單片機I/O口采用PWM控制的方法控制電機的電壓,以控制電機的轉(zhuǎn)速。 PWM的實現(xiàn):通過單片機的定時中斷,實現(xiàn)頻率為50HZ,即周期接近0.02s的PWM。為了實現(xiàn)占空比控制,將中斷的時間設(shè)置為.1ms,通過20次的中斷實現(xiàn)以頻率為50HZ。 中斷的初值:  ;// 1ms中斷  ; 轉(zhuǎn)速計算:轉(zhuǎn)速 = 占空比*500 圖7電機驅(qū)動模塊
2.9瓶子檢測模塊 由于PROTUES沒有光電傳感器的仿真模型,只能使用光耦模擬瓶子經(jīng)過是遮住光電傳感器,通過單片機P1.7口檢測瓶子經(jīng)過時的電平拉高,實現(xiàn)瓶數(shù)計數(shù)。 圖8 瓶子檢測模塊 3. 程序設(shè)計 3.1主程序:
- ///*************************************************************************
- /// 工業(yè)生產(chǎn)中的產(chǎn)品數(shù)量自動計量系統(tǒng)創(chuàng)新設(shè)計
- ///功能:流水線電機控制,產(chǎn)品數(shù)量檢測,LCD1602顯示以及包裝機控制
- ///*************************************************************************
- #include<reg52.h> ///包含頭文件
- #include<MAIN.h>
- #include<lcd1602.h>
-
- //#define uint unsigned int
- //#define uchar unsigned char
- //#define ulong unsigned long
-
- sbit zheng = P1^0;
- sbit fan = P1^1;
- sbit ting = P1^2;
- sbit jia = P1^3;
- sbit jian = P1^4;
- sbit clear = P1^5;
- sbit bee = P1^6;
- sbit pingzi = P1^7;
- sbit PWM1 = P2^0;
- sbit PWM2 = P2^1;
- sbit ena = P2^2;
- sbit max = P2^3;
-
-
- uint bottle=0;
- uint box=0;
- uint zhuansu[4]={0,0,0,0};
- uint PZ[4]={0,0,0,0};
- uchar str1[16]="bottle:00 box:00";
- uchar str2[16]="speed:0000 ";
- uchar time;
- uchar count;
- ulong zhuan;
- flag=1;
-
- ///*************************************************************************
- /// MAIN函數(shù)
- ///功能:
- ///*************************************************************************
- void main()
- {
- timer_init();
- LCD_Init();
- ena=0;
- bee=0;
- max=1;
- while(1)
- {
- cleardate();
- zhengz();
- fanz();
- tingz();
- jias();
- jians();
- LCD();
- pingshu();
-
- }
- }
- ///*************************************************************************
- /// 延時函數(shù)
- ///功能:
- ///*************************************************************************
- void delay1(uint z)// 延時程序,zms.
- {
- uint x,y;
- for(y=z;x>0;x--)
- for(y=110;y>0;y--);
- }
-
-
- ///*************************************************************************
- /// 數(shù)據(jù)計算函數(shù)
- ///功能:
- ///*************************************************************************
- void chuli()
- {
-
- zhuan=count*500/20;
- zhuansu[0]=(count*10/1000); //轉(zhuǎn)換轉(zhuǎn)速的千位
- zhuansu[1]=(zhuan/100%10); //轉(zhuǎn)換轉(zhuǎn)速的百位
- zhuansu[2]=(zhuan/10%10); //轉(zhuǎn)換轉(zhuǎn)速的十位
- zhuansu[3]=(zhuan%10); //轉(zhuǎn)換轉(zhuǎn)速的個位
- PZ[0]= (bottle/10%10); //瓶數(shù)十位
- PZ[1]= (bottle%10);//瓶數(shù)個位
- PZ[2]= (box/10%10);// 箱數(shù)十位
- PZ[3]= (box%10); // 箱數(shù)個位
-
- }
-
- ///*************************************************************************
- /// 清除數(shù)據(jù)函數(shù)
- ///功能:
- ///*************************************************************************
- void cleardate()
- {
- if(clear==0)
- {
- delay1(2);
- if(clear==0)
- {
- LCD_Clear();
- LCD_Init();
- bottle=0;
- box=0;
- chuli();
- }
- }
- }
-
-
-
- ///*************************************************************************
- /// LCD顯示函數(shù)
- ///功能:
- ///*************************************************************************
- void LCD()
- {
- LCD_Manifest(1,7,PZ[0]);
- LCD_Manifest(1,8,PZ[1]);
- LCD_Manifest(1,14,PZ[2]);
- LCD_Manifest(1,15,PZ[3]);
-
- LCD_Manifest(2,6,zhuansu[0]);
- LCD_Manifest(2,7,zhuansu[1]);
- LCD_Manifest(2,8,zhuansu[2]);
- LCD_Manifest(2,9,zhuansu[3]);
-
- }
- ///*************************************************************************
- /// 蜂鳴器控制函數(shù)
- ///功能:
- ///*************************************************************************
- void beebee()
- {
- bee=0;
- delay(100);
- bee=1;
- delay(100);
- bee=0;
-
- }
-
- //*************************************************************************
- /// rs485發(fā)送
- ///功能:
- ///*************************************************************************
- void rs485send(uchar date) //rs485發(fā)送
- {
- SBUF=date;
- while(!TI);
- TI=0;
- }
-
- void rs485open() //包裝機rs485開啟指令
- {
- rs485send((uchar)0xAA);
- delay1(100);
- rs485send((uchar)0x33);
- delay1(100);
- rs485send((uchar)0xDD);
- delay1(100);
- }
-
- void rs485stop() //包裝機rs485停止指令
- {
- rs485send((uchar)0xAA);
- delay1(100);
- rs485send((uchar)0x55);
- delay1(100);
- rs485send((uchar)0xFF);
- delay1(100);
- }
-
- ///*************************************************************************
- ///流水線控制
- ///功能:流水線瓶子數(shù)量測量,箱數(shù)測量及包裝機控制
- ///*************************************************************************
-
- void pingshu()
- {
- if(pingzi==1)
- {
- delay1(2);
- if(pingzi==1)
- {
- bottle+=1;
- if(bottle>51)
- {
- ulong i;
- beebee();
- bottle=1;
- if(box<=99) {box+=1;}
- else box=0;
- delay1(100);
- rs485open();
- for(i=0;i<1000;i++)
- {delay1(200);}
- rs485stop();
- }
- chuli();
- }
- while(!pingzi);
- }
- }
-
-
- ///*************************************************************************
- ///按鍵輸入模塊
- ///功能:實現(xiàn)正轉(zhuǎn),反轉(zhuǎn),啟停,加速,減速、清除數(shù)據(jù)
- ///*************************************************************************
- void zhengz()
- {
- if(zheng==0)
- {
- delay1(2);
- if(zheng==0)
- {
- flag=1;
- }
- while(!zheng);
- }
- }
-
- void fanz()
- {
- if(fan==0)
- {
- delay1(2);
- if(fan==0)
- {
- flag=0;
- }
- while(!fan);
- }
- }
-
- void tingz()
- {
- if(ting==0)
- {
- delay1(2);
- if(ting==0)
- {
- ena=~ena;
- if(ena==0)
- {
- count=0;
- }
- else count=10;
- chuli();
- }
- while(!ting);
- }
- }
-
- void jias()
- {
- if(jia==0)
- {
- delay1(2);
- if(jia==0)
- {
- if(count<18)
- {
- count+=2;
- }
- else
- {
- count=18;
- }
- chuli();
- }
- while(!jia);
- }
- }
-
- void jians()
- {
- if(jian==0)
- {
- delay1(2);
- if(jian==0)
- {
- if(count>2)
- {
- count-=2;
- }
- else
- {
- count=2;
- }
- chuli();
- }
- while(!jian);
- }
- }
- ///*************************************************************************
- /// 定時器0初始化
- ///功能:
- ///*************************************************************************
- void timer_init(void)
- {
- TMOD=0x21;//定時器0工作于方式1,定時器1工作于方式2
- TH0=(65536-1000)/256;//1ms中斷
- TL0=(65536-1000)%256;
- TL1=0xfa;//波特率設(shè)置為4800
- TH1=0xfa;//波特率設(shè)置為4800
- SCON=0x50;//串行口方式設(shè)置為方式1,REN置1時允許接收數(shù)據(jù)
- PCON &= 0xef;//PCON寄存器設(shè)置
- TR0=1;
- TR1=1;
- ET0=1;
- EA=1;
- }
-
- ///*************************************************************************
- /// 定時器0中斷程序
- ///功能:
- ///*************************************************************************
- void timer0_int(void) interrupt 1
- {
- TR0=0;//設(shè)置定時器初值期間,關(guān)閉定時器
- TH0=(65536-1000)/256;//1ms中斷
- TL0=(65536-1000)%256;
- TR0=1;
- time++;
- if(flag==1)// 電機正轉(zhuǎn)
- {
- PWM2=0;
- if(time<count)
- {
- PWM1=1;
- }
- else
- PWM1=0;
- if(time>20)
- {
- time=0;
- }
- }
- else // 電機反轉(zhuǎn)
- {
- PWM1=0;
- if(time<count)
- {
- PWM2=1;
- }
- else
- PWM2=0;
- if(time>20)
- {
- time=0;
- }
- }
- }
-
- 3.2 LCD1602子程序:
- ///*************************************************************************
- /// LCD1602子程序
- ///功能:實現(xiàn)LCD1602的控制程序集成
- ///*************************************************************************
- #include<lcd1602.h>
-
-
- sbit LCD_RS=P2^6;//數(shù)據(jù)命令選擇端
- sbit LCD_WR=P2^5;//數(shù)據(jù)讀寫端
- sbit LCD_E=P2^7;//液晶使能端
-
-
- void delay(uchar z)//延時函數(shù)
- {
- unsigned char x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- void LCD_Write_Cmd(uchar com)//液晶寫命令
- {
- LCD_RS=0;//選擇寫命令模式
- LCD_WR=0;
- delay(1);
- LCD_E=1;//使能端給一高脈沖,高脈沖有效
- delay(1);
- LCDdate=com;//將要寫的命令字送到數(shù)據(jù)總線上
- delay(1);
- LCD_E=0;
- }
-
- void LCD_Write_Data(uchar date)//數(shù)據(jù)寫命令
- {
- LCD_RS=1;//選擇寫數(shù)據(jù)模式
- LCD_WR=0;
- delay(1);
- LCD_E=1;//使能端給一高脈沖,高脈沖有效
- delay(1);
- LCDdate=date;
- delay(1);
- LCD_E=0;
- }
-
- void LCD_Clear(void) // 清屏函數(shù)
- {
- LCD_Write_Cmd(0x01);
- delay(5);
- }
-
- void LCD_Init()//液晶初始化
- {
- uchar i;
- LCD_Write_Cmd(0x38);//設(shè)置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
- delay(5);
- LCD_Write_Cmd(0x08); //設(shè)置顯示關(guān)閉
- LCD_Clear();//清屏
- LCD_Write_Cmd(0x06);//寫一個字符后地址指針自動加1
- delay(5);
- LCD_Write_Cmd(0x0c);//設(shè)置開顯示,不顯示光標(biāo)
- LCD_Write_Cmd(0x80);//數(shù)據(jù)指針定位到第一行第一個字處
- for(i=0;i<16;i++)
- LCD_Write_Data(str1[i]);//液晶顯示第一行寫數(shù)據(jù)
- LCD_Write_Cmd(0x80+0x40);//將數(shù)據(jù)指針定位到第二行第一個
- for(i=0;i<16;i++)
- LCD_Write_Data(str2[i]);//液晶顯示第二行寫數(shù)據(jù)
- }
-
- void LCD_Manifest(uchar row,uchar add,uchar date)
- {
- if(row==1) LCD_Write_Cmd(0x80+add);
- if(row==2) LCD_Write_Cmd(0xc0+add);
- LCD_Write_Data(0x30+date);
- }
復(fù)制代碼
4. 系統(tǒng)仿真 4.1系統(tǒng)仿真圖: 圖9 系統(tǒng)仿真圖 4.2 PCB圖 圖10 PCB圖
4.3 3D視圖
圖11 3D視圖 5. 元器件清單列表
6. 設(shè)計總結(jié) 設(shè)計之中,我遇到了很多現(xiàn)實的問題, PROTUES中的沒有仿真模型,以及AD16軟件中有些元件沒有原理圖和PCB封裝,需要自己按照手冊自己畫出來,所以自己需要想辦法進行模擬仿真,AD16沒有的封裝需要去網(wǎng)上尋找別人的設(shè)計的,實在找不到的只能自己畫PCB。在10天的時間,經(jīng)過查閱資料,發(fā)現(xiàn)擁有驅(qū)動48V3A的直流電機的芯片非常少,很不容易才找到了L6203芯片,但是也沒能達(dá)到合適的要求,經(jīng)過自己搭建H橋,但是三極管的查找花費了許多的時間。所以最終只能實現(xiàn)電機的啟?刂,正反轉(zhuǎn)控制,加減速控制,數(shù)據(jù)清除。在這次的設(shè)計中,發(fā)現(xiàn)一個簡單的系統(tǒng)并不容易實現(xiàn),需花費大量時間在查閱資料上面,并且最好將系統(tǒng)分成小塊來一個一個解決,這樣才能思路清晰,所以要加強自己的基礎(chǔ)知識積累以及學(xué)習(xí)的方式方法。
全部資料51hei下載地址:
工廠自動化.zip
(588.75 KB, 下載次數(shù): 43)
2020-1-5 14:39 上傳
點擊文件名下載附件
內(nèi)含protues仿真文件,希望有能提供48V電機控制的大佬
|