計(jì)算機(jī)控制實(shí)驗(yàn)課(邵長(zhǎng)友).ppt_第1頁(yè)
計(jì)算機(jī)控制實(shí)驗(yàn)課(邵長(zhǎng)友).ppt_第2頁(yè)
計(jì)算機(jī)控制實(shí)驗(yàn)課(邵長(zhǎng)友).ppt_第3頁(yè)
計(jì)算機(jī)控制實(shí)驗(yàn)課(邵長(zhǎng)友).ppt_第4頁(yè)
計(jì)算機(jī)控制實(shí)驗(yàn)課(邵長(zhǎng)友).ppt_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)控制技術(shù)實(shí)驗(yàn),邵長(zhǎng)友,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),一、實(shí)驗(yàn)?zāi)康模?.認(rèn)識(shí)串口在控制中的應(yīng)用2.學(xué)會(huì)用C語(yǔ)言給串口編程二、實(shí)驗(yàn)器材:PC機(jī)、串口線三、實(shí)驗(yàn)內(nèi)容:用C語(yǔ)言編程實(shí)現(xiàn)兩個(gè)PC機(jī)之間的串行通信,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),一、認(rèn)識(shí)串口,在PC機(jī)上,有各種各樣的接頭,其中有兩個(gè)9針的接頭區(qū),見這就是串行通信端口。PC機(jī)上的串行接口有多個(gè)名稱:232口、串口、通信口、COM口、異步口等。,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),相關(guān)知識(shí)一、認(rèn)識(shí)串口,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),一、認(rèn)識(shí)串口,1查看設(shè)備信息進(jìn)入Windows“我的電腦”系統(tǒng)屬性,在“設(shè)備管理器”列表中有端口COM和LPT設(shè)備信息,如圖所示。,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),一、認(rèn)識(shí)串口,RS-232-C標(biāo)準(zhǔn):信號(hào)電平標(biāo)準(zhǔn):邏輯“1”:-15V-5V邏輯“0”:+5V+15V,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),RS-232-C控制信號(hào)的定義,實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),一、認(rèn)識(shí)串口二、實(shí)驗(yàn)(1)用串口調(diào)試助手實(shí)現(xiàn)兩個(gè)PC之間的通信(2)用C語(yǔ)言編程實(shí)現(xiàn)兩個(gè)PC之間的通信三、編寫程序?qū)崿F(xiàn)PC和單片機(jī)之間的串行通信(單片機(jī)程序),實(shí)驗(yàn)一、串口通信實(shí)驗(yàn),編程知識(shí),編程知識(shí),COM1與COM2的I/O端口地址,線路狀態(tài)寄存器(讀/寫),D0:接收數(shù)據(jù)就緒。D1:超越錯(cuò)。D2:奇偶校驗(yàn)錯(cuò)。D3:幀格式錯(cuò)。D4:間斷錯(cuò)。D5:發(fā)送保持寄存器空。D6:發(fā)送移位寄存器空。D7:恒為0。,接收數(shù)據(jù)寄存器收到了一個(gè)完整的字符,CPU可以讀這個(gè)數(shù)據(jù)。,接口可以接收下一個(gè)要發(fā)送的字符,CPU可以寫數(shù)據(jù)。,編程知識(shí),地址:3FDH,線路狀態(tài)寄存器(讀/寫),D0:接收數(shù)據(jù)就緒。D1:超越錯(cuò)。D2:奇偶校驗(yàn)錯(cuò)。D3:幀格式錯(cuò)。D4:間斷錯(cuò)。D5:發(fā)送保持寄存器空。D6:發(fā)送移位寄存器空。D7:恒為0。,接收數(shù)據(jù)寄存器收到了一個(gè)完整的字符,CPU可以讀這個(gè)數(shù)據(jù)。,可以接收下一個(gè)要發(fā)送的字符,CPU可以寫數(shù)據(jù)。,編程知識(shí),地址:3FDH,TurboC的串口通信函數(shù),intbioscom(intcmd,charbyte,intport);,cmd=0:設(shè)置通訊參數(shù)byte的值1:把字符按字節(jié)送到通訊線上2:從通訊線上接收一個(gè)字符3:返回通訊端口的狀態(tài),port=0:COM1;port=1:COM2,初始化串口,byte值是下列各位的組合,0 x027個(gè)數(shù)據(jù)位0 x038個(gè)數(shù)據(jù)位,0 x00110波特率0 x20150波特率0 x40300波特率0 x60600波特率0 x801200波特率0 xa02400波特率0 xc04800波特率0 xe09600波特率,0 x001個(gè)停止位0 x042個(gè)停止位,0 x00無(wú)校驗(yàn)0 x08奇校驗(yàn)0 x18偶校驗(yàn),若要求:8位數(shù)據(jù)位,1個(gè)停止位,奇校驗(yàn),9600波特。byte=0 x03|0 x00|0 x08|0 xe0D7D6D5D4D3D2D1D0,#include#includemain()inti;bioscom(0,0 x83,0);doi=inportb(0X3fd);if(i,初始化串口11200波特,無(wú)校驗(yàn),1位停止位,8個(gè)數(shù)據(jù)位,讀線路狀態(tài)寄存器,判斷是否有錯(cuò)(D1:超越錯(cuò)D2:奇偶校驗(yàn)錯(cuò)D3:幀格式錯(cuò)D4:間斷錯(cuò)),判斷接收數(shù)據(jù)是否就緒,讀接收數(shù)據(jù)寄存器,顯示字符。,判斷發(fā)送保持寄存器是否空,如果有鍵按下,寫發(fā)送保持寄存器輸出字符。,實(shí)驗(yàn)二、8254定時(shí)器實(shí)驗(yàn),一、實(shí)驗(yàn)?zāi)康模?)掌握8254定時(shí)器/計(jì)數(shù)器的工作原理與編程2)熟悉8259中斷控制器的工作原理和使用方法3)掌握硬件中斷程序設(shè)計(jì)的原理與編程方法4)為數(shù)據(jù)采集程序打下控制采樣的基礎(chǔ)二、實(shí)驗(yàn)內(nèi)容(1)用TPC-UP微機(jī)原理實(shí)驗(yàn)箱上的定時(shí)器芯片編程完成脈沖計(jì)數(shù)(2)編寫程序使PC機(jī)主板上的芯片完成定時(shí)器(已經(jīng)集成到一個(gè)大的芯片組中)中斷實(shí)驗(yàn),微機(jī)原理實(shí)驗(yàn)箱上的片選地址280h,280h,方式控制字,方式0:計(jì)數(shù)初值一個(gè)八位數(shù)()二進(jìn)制,控制字10h,實(shí)驗(yàn)箱上的電路,參考程序,/*/*可編程定時(shí)器計(jì)數(shù)器(一)*/*/*8253CS-280H-287HGATE0-+5VCLK0-單脈沖OUT0-邏輯筆*/#include#include#include.ApiEx.h#pragmacomment(lib,.ApiEx.lib),voidmain()BYTEdata;if(!Startup()/*打開設(shè)備*/printf(ERROR:OpenDeviceError!n);return;PortWriteByte(0 x283,0 x10);/*設(shè)8253計(jì)數(shù)器0工作方式0,只寫低字節(jié)*/PortWriteByte(0 x280,0 x0f);/*寫入計(jì)數(shù)初值16*/while(!kbhit()/*有鍵按下則退出*/PortReadByte(0 x280,/*關(guān)閉設(shè)備*/,#include#includevoidinterruptmyint8(void);voidmain(void)disable();outportb(0 x43,0 x36);/0 x43是定時(shí)器控制寄存器地址outportb(0 x40,0 x9d);/0 x40是定時(shí)器0通道地址outportb(0 x40,0 x2e);/0 x9d,0 x2e分別是計(jì)數(shù)值低八位和高八位setvect(0 x08,myint8);/設(shè)置中斷向量enable();while(1);,利用PC機(jī)上的定時(shí)器通道0工作在方式3,計(jì)數(shù)時(shí)間到產(chǎn)生中斷,voidinterruptmyint8(void)putchar(8);outportb(0 x20,0 x20);/第一個(gè)0 x20主8259的OCW2的地址,/第二個(gè)0 x20是中斷結(jié)束命令,#includevoidinterruptmyint8(void);intcount=1;voidmain(void)disable();outportb(0 x43,0 x30);outportb(0 x40,0 x0);outportb(0 x40,0 x0);setvect(0 x08,myint8);enable();while(1);,voidinterruptmyint8(void)chars=中國(guó)海洋大學(xué)青島學(xué)院機(jī)電工程系;FILE*fp;fp=fopen(E:test.txt,w);fwrite(s,2,15,fp);fclose(fp);outportb(0 x20,0 x20);,通道0,方式0,定時(shí)時(shí)間到調(diào)用中斷服務(wù)程序,實(shí)驗(yàn)三、中斷方式實(shí)現(xiàn)串口通信,通過(guò)“設(shè)備管理器查看鍵盤和COM1的中斷源,8259主片中斷源:,鍵盤,COM1,#include#includemain()inti;disable();bioscom(0,0 x83,0);doi=inportb(0X3fd);if(i,初始化串口1:1200波特,無(wú)校驗(yàn),1位停止位,8個(gè)數(shù)據(jù)位,實(shí)驗(yàn)四、pid程序演示實(shí)驗(yàn),一、實(shí)驗(yàn)?zāi)康模豪斫鈹?shù)字PID控制器的設(shè)計(jì)方法二、實(shí)驗(yàn)內(nèi)容(1)運(yùn)行C語(yǔ)言PID演示程序,分析設(shè)定值、被控量、偏差,控制量的變化(2)編寫PIDMATLAB仿真程序,分析運(yùn)行結(jié)果,C語(yǔ)言PID演示程序#include#includetypedefstructPIDdoubleCommand;/輸入指令doubleProportion;/比例系數(shù)doubleIntegral;/積分系數(shù)doubleDerivative;/微分系數(shù)doublepreErr;/前一拍誤差doublesumErr;/誤差累積PID;,voidmotorInit(motor*m)memset(m,0,sizeof(motor);,doublePIDCale(PID*p,doublefeedback)doubledErr,Err;Err=p-Command-feedback;/當(dāng)前誤差p-sumErr+=Err;/誤差累加dErr=Err-p-preErr;/誤差微分p-preErr=Err;return(p-Proportion*Err/比例項(xiàng)+p-Derivative*dErr/微分項(xiàng)+p-Integral*p-sumErr);/積分項(xiàng),typedefstructmotordoublelastY;doublepreY;doublelastU;doublepreU;motor;voidmotorInit(motor*m)memset(m,0,sizeof(motor);,doublemotorCal(motor*m,doubleu)doubley=1.9753*m-lastY-0.9753*m-preY+0.00003284*u+0.00006568*m-lastU+0.00003284*m-preU;/二階系統(tǒng)m-preY=m-lastY;m-lastY=y;m-preU=m-lastU;m-lastU=u;returny;,y(k)=y(k-1)-0.9753*y(k-2)+0.00003284*u(k)+0.00006568*u(k-1)+0.00003248*u(k-2),voidmain()FILE*fp=fopen(data.txt,w+);PIDsPID;motorm_motor;intk=0;doubleu;doubley=0;PIDInit(,while(k=5u(k)=5;endifu(k)=-5u(k)=-5;end%Linearmodelyout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);%Returnofparametersu_2=u_1;u_1=u(k);y_2=y_1;y_1=yout(k);,x(1)=error(k)-error_1;%CalculatingPx(2)=error(k)-2*error_1+error_2;%CalculatingDx(3)=error(k);%CalculatingIerror_2=error_1;error_1=error(k);endfigure(1);plot(time,rin,b,time,yout,r);xlabel(time(s),ylabel(rin,yout);figure(2);plot(time,error,r)xlabel(time(s);ylabel(error);,實(shí)驗(yàn)五、RS485總線實(shí)驗(yàn),實(shí)驗(yàn)?zāi)康模?、理解RS485的通信原理2、學(xué)會(huì)RS485的C語(yǔ)言編程實(shí)驗(yàn)內(nèi)容:1、利用RS232-RS485無(wú)源轉(zhuǎn)換器給PC機(jī)組網(wǎng)2、利用C語(yǔ)言編寫RS485的通信程序,1.RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(2-6)V表示;邏輯“0”以兩線間的電壓差為-(2-6)V表示。接口信號(hào)電平比RS-232-C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。2.RS-485的數(shù)據(jù)最高傳輸速率為10Mbps。3.RS-485接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗共模干能力增強(qiáng),即抗噪聲干擾性好。4.RS-485接口的最大傳輸距離標(biāo)準(zhǔn)值為4000英尺,實(shí)際上可達(dá)3000米,另外RS-232-C接口在總線上只允許連接1個(gè)收發(fā)器,即單站能力。而RS-485接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器。即具有多站能力,這樣用戶可以利用單一的,RS485網(wǎng)絡(luò),RS485網(wǎng)絡(luò),連線時(shí)“手拉手”,實(shí)驗(yàn)程序,/*-通信協(xié)議-發(fā)送的命令:#xxRn$#-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址R-表示要求從機(jī)發(fā)送數(shù)據(jù)n-一位ASCII碼0-9,表示發(fā)送數(shù)據(jù)的類型$-命令結(jié)束符接收的數(shù)據(jù)格式:=xxddddddddd$=-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址ddddddddd-九位ASCII碼數(shù)據(jù)$-命令結(jié)束符-*/,/*-通信協(xié)議-發(fā)送的命令:#xxRn$#-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址R-表示要求從機(jī)發(fā)送數(shù)據(jù)n-一位ASCII碼0-9,表示發(fā)送數(shù)據(jù)的類型$-命令結(jié)束符接收的數(shù)據(jù)格式:=xxddddddddd$=-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址ddddddddd-九位ASCII碼數(shù)據(jù)$-命令結(jié)束符-*/#include#includemain()inti,j,k,n;charc,cmd=#xxRn$;charaddress=xx;chardata=xxAAAAAAAAA$;bioscom(0,0 x83,0);doprintf(pleaseinputtheslavecomputeraddressyouwanttocommunicatewith(00-99):);scanf(%d,主機(jī)程序,/*-通信協(xié)議-接收到的信號(hào):#xxRn$#-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址R-表示要求從機(jī)發(fā)送數(shù)據(jù)n-一位ASCII碼0-9$-命令結(jié)束符發(fā)回的數(shù)據(jù)格式:=xxddddddddd$=-命令前導(dǎo)符xx-兩位ASCII從機(jī)地址ddddddddd-九位ASCII碼數(shù)據(jù)$-命令結(jié)束符-*/#include#includemain()inti,j,n;charc,cmd5;charaddress=00;chardata0=AAAAAAAAA$;chardata1=BBBBBBBBB$;chardata2=CCCCCCCCC$;chardata3=DDDDDDDCC$;printf(pleasesetupthiscomputeraddress(00-99):);scanf(%d,從機(jī)程序,實(shí)驗(yàn)四、標(biāo)度變換和非線性補(bǔ)償,實(shí)驗(yàn)?zāi)康模?、理解標(biāo)度變換和非線性補(bǔ)償原理2、學(xué)會(huì)標(biāo)度變換和非線性補(bǔ)償C語(yǔ)言編程實(shí)驗(yàn)內(nèi)容:1、標(biāo)度變換的C語(yǔ)言編程2、非線性補(bǔ)償?shù)腃語(yǔ)言編程3、牛頓迭代法的C語(yǔ)言編程,一、標(biāo)度變換,某熱處理爐溫度測(cè)量?jī)x表的量程為0800C,在某一時(shí)刻計(jì)算機(jī)采樣并經(jīng)數(shù)字濾波后的數(shù)字量為CDH,求此時(shí)的溫度是多少?(設(shè)該儀表的量程是線性的)。8位A/D,0800C經(jīng)熱電偶和信號(hào)調(diào)理電路后0-5V,再經(jīng)過(guò)模數(shù)轉(zhuǎn)換后:0-255(0-FFH),includestdio.h#defineAM800#defineA00#defineNM255#defineN00intScale_transform(intx)inty;y=A0+(AM-A0)*(x-N0)/(NM-N0);return(y);,voidmain(void)intx,y;printf(請(qǐng)輸入整數(shù)0-255:);scanf(%d,二、非線性補(bǔ)償(線性插值算法),退火爐的溫度(0-800)檢測(cè)采用K型熱電偶,經(jīng)過(guò)150倍兩級(jí)放大,變成0-5V的標(biāo)準(zhǔn)電壓信號(hào),再經(jīng)過(guò)A/D轉(zhuǎn)換變?yōu)?-FFH的數(shù)字信號(hào)。其熱電勢(shì)V與溫度t之間的分度值下表所示??梢钥闯?,熱電偶溫度與mV變化曲線比較平緩,故可采用線性插值法進(jìn)行補(bǔ)償。,非線性補(bǔ)償程序,/*Note:YourchoiceisCIDE*/#includestdio.hintvolttotmp(unsignedcharvlt)unsignedcharvolt=0,0 x0f,0 x1f,0 x2f,0 x3e,0 x4e,0 x5d,0 x6d,0 x7d,0 x8e,0 x9e,0 xae,0 xbf,0 xcf,0 xdf,0 xef,0 xff;inttemp=0,50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800;inti,tmp;for(i=0;i17;i+)if(vlt=0.001);printf(%f的平方根:%fn,x,y);,實(shí)驗(yàn)六、鍵盤和LED顯示實(shí)驗(yàn),實(shí)驗(yàn)?zāi)康模?、理解非編碼矩陣鍵盤的掃描原理2、理解LED動(dòng)態(tài)掃描工作原理3、理解串行通信的工作原理實(shí)驗(yàn)內(nèi)容:1、4X4矩陣掃描的C語(yǔ)言編程2、74HC595串行移位的C語(yǔ)言編程3、LED動(dòng)態(tài)顯示的C語(yǔ)言編程,4X4矩陣鍵盤,4X4矩陣鍵盤,rcode=0 xEF;/逐行掃描初值for(i=0;i4;i+)P2=rcode;/輸出行掃描碼if(P2/行掃描碼左移一位,P20-P23:列P24-P27:行,74HC595,74HC595,74HC595,st_cp595=0;for(i=0;ioffset)sample_value=old_value;elsesample_value=new_value;return(sample_value);main()inti;floatvalue;floata12=2,2.3,8.1,2.5,3.3,2.9,5.4,3.3,7.3,3.6,7.2,3.9;for(i=0;i12;i+)printf(%.1f,ai);printf(n);for(i=0;imiddle_valuej)data=middle_valuej-1;middle_valuej-1=middle_valuej;middle_valuej=data;sample_value=middle_value(count-1)/2;return(sample_value);main()floatx;floata5=2,9,5.2,7,0;x=middle_filter(a,5);printf(%f,x);printf(hekkk);getch();,加權(quán)平均值濾波,/*Note:YourchoiceisCIDE*/#includestdio.h#includefloattimes_filter(floatdata_buf)floatsample_value;floatfilter_k5=0.05,0.15,0.25,0.25,0.3;sample_value=filter_k0*data_buf0+filter_k1*data_buf1+filter_k2*data_buf2+filter_k3*data_buf3+filter_k4*data_buf4;return(sample_value);main()floatx;floata5=2,2,4,5,9;x=times_filter(a);printf(%f,x);getch();,一階慣性濾波,/*Note:YourchoiceisCIDE*/#includestdio.h#includefloatlow_filter(floatsensing_value,floatprevious_value,floatfactor)floatsample_value;sample_value=(1-factor)*sensing_value+factor*previous_value;return(sample_value);main()inti;floatx;floata10=1.9,2,2.1,5,2.3,2.4,2.8,5,3.0,3.2;floatb10;for(i=0;i10;i+)printf(%.1f,ai);printf(n);b0=a0;for(i=1;i10;i+)bi=low_filter(ai,bi-1,0.8);for(i=0;i10;i+)printf(%.1f,bi);getch();,實(shí)驗(yàn)八,1,2,3,1,1,2,3,4,3,4,2,1,3,4,2,1,0011011011001001,順時(shí)針,逆時(shí)針,0011100111000110,tab1=0 x03,0 x06,0 x0c,0 x09,tab2=0 x03,0 x09,0 x0c,0 x06;,if(data,001

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論