版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
...wd...基于AVR單片機的步進電機控制器設(shè)計摘要介紹了步進電動機的開展史,及國內(nèi)的現(xiàn)狀和步進電動機未來的應用前景。并且闡述了步進電動機轉(zhuǎn)速、角度、轉(zhuǎn)矩的控制原理。本文闡述了一種步進電機控制器的設(shè)計方案,并繪制了原理圖和PCB板圖,撰寫了程序源代碼。實現(xiàn)了對步進電動機轉(zhuǎn)速、角度的控制,并完成了實物的制作。這期間主要使用protel99se軟件繪制原理圖和制板,使用proteus7.1軟件進展程序代碼的仿真和功能的理論驗證。最后通過硬件的調(diào)試驗證程序代碼的實際功能,完成對控制器的設(shè)計。關(guān)鍵詞AVR單片機;步進電動機;控制器。目錄摘要………………ⅠAbstract…………………………Ⅱ第一章、引言………………………11.1步進電機開展史…………11.2我國步進電機開展………………………11.3步進電機應用的前景……………………1第二章、步進電機控制系統(tǒng)………………………22.1步進電機控制系統(tǒng)………………………22.2控制單元…………………22.3驅(qū)動電路…………………22.4通信端口…………………32.5其它………………………3第三章、Atmega16L單片機………………………43.1Atmega16L主要功能……………………43.2Atmega16L引腳功能……………………4第四章、控制器電路圖……………6第五章、步進電動機原理與控制…………………85.1步進電動機的構(gòu)造………………………85.2步進電動機的控制原理…………………85.3L297/L298………………85.3.1L297芯片簡介……………………85.3.2L298芯片簡介……………………95.3.3L297/298步進電機控制…………95.3.4控制機制…………10第六章、實現(xiàn)……………………116.1main主程序流程圖……………………116.2程序代碼………………12第七章、構(gòu)造圖…………………30結(jié)論………………31參考文獻…………………………32致謝………………33附錄………………34第一章、引言1.1步進電機開展史步進電機又稱電動機或階躍電動機,國外一般稱為Stepmotor或Steppingmotor等。步進電機的機理是基于最基本的電磁鐵作用,其原始模型起源于1830年至1860年間。1870年前后開場以控制為目的的嘗試,應用于氬弧燈的電極輸送機構(gòu)中。這被認為是最初的步進電動。此后,在自動交換機中廣泛使用了步進電動機。不久又在缺乏交流電源的船舶和飛機等獨立系統(tǒng)中廣泛使用。20世紀60年代后期,隨著永磁性材料的開展,各種實用性步進電動機應運而生,而半導體技術(shù)的開展那么推進了步進電動機在眾多領(lǐng)域的應用。在近30年間,步進電動機迅速地開展并成熟起來。從開展趨向來講,步進電動機已經(jīng)能與直流電動機、異步電動機,以及同步電動機并列,從而成為電動機的一種基本類型。1.2我國步進電機開展我國步進電動機的研究及制造起始于本世紀50年代后期。從50年代后期到60年代后期,主要是高等院校和科研機構(gòu)為研究一些裝置而使用或開發(fā)少量產(chǎn)品。這些產(chǎn)品以多段構(gòu)造三相反響式步進電動機為主。70年代初期,步進電動機的生產(chǎn)和研究有所突破。除反映在驅(qū)動器設(shè)計方面的長足進步外,對反響式步進電動機本體的設(shè)計研究開展到一個較高水平。70年代中期至80年代中期為成品開展階段,新品種高性能電動機不斷被開發(fā)。自80年代中期以來,由于對步進電動機準確模型做了大量研究工作,各種混合式步進電動機及驅(qū)動器作為產(chǎn)品廣泛利用。1.3步進電機的應用前景目前,隨著電子技術(shù)、控制技術(shù)以及電動機本體的開展和變化,傳統(tǒng)電機分類間的界面越來越模糊。步進電機必然會成為機電一體化元件組件的必然趨勢。由于步進電機具有控制方便、體積小等特點,所以在數(shù)控系統(tǒng)、自動生產(chǎn)線、自動化儀表、繪圖機和計算機外圍設(shè)備中得到廣泛應用。微電子學的迅速開展和微型計算機的普及與應用,為步進電動機的應用開辟了廣闊前景,使得以往用硬件電路構(gòu)成的龐大復雜的控制器得以用軟件實現(xiàn),既降低了硬件成本又提高了控制的靈活性,可靠性及多功能性。市場上有很多現(xiàn)成的步進電機控制機構(gòu),但價格都偏高。應用SGS公司推出的L297和L298兩芯片可方便的組成步進電機驅(qū)動器,并結(jié)合Atmega16L單片機可以構(gòu)成很好的步進電機控制系統(tǒng)。第二章、步進電機控制系統(tǒng)2.1步進電動機控制系統(tǒng)步進電動機本體、步進電動機驅(qū)動電路和控制單元構(gòu)成步進電動機系統(tǒng)不可分割的三大局部。系統(tǒng)框圖見以以下圖2-1:圖2-1步進電動機系統(tǒng)框圖2.2控制單元控制單元、驅(qū)動電路為控制系統(tǒng)的核心局部??刂茊卧钦麄€系統(tǒng)最核心的局部,是系統(tǒng)的指揮中心。用于協(xié)調(diào)各局部的運行,主要負責接收通信端口或輸入電路送來的信息,并對其進展識別,譯碼,并做出相應的動作,發(fā)出控制信號用以控制步進電動機??刂茊卧獙嵸|(zhì)上是具有處理能力的微處理器芯片??刂茊卧梢杂桑簡纹瑱C、DSP、PLC等充當。本文選用由ATEML公司生產(chǎn)的Atmega16l單片機。2.3驅(qū)動電路驅(qū)動電路是負責將控制單元送來的微電流信號進展放大用以驅(qū)動步進電動機運轉(zhuǎn),驅(qū)動電路實質(zhì)上是功率放大器。常見的驅(qū)動電路:單電壓型功放電路、上下壓切換型功放電路、斬波恒流功放電路等再就是采用專用的集成芯片。本文采用L297/L298芯片,由這兩種芯片構(gòu)成的驅(qū)動電路具有控制方便、精度高、并且不需要外圍擴展。2.4通信端口通信端口是步進電機控制器與上位機〔主要是指計算機〕進展通信的接口,PC機串口采用的通信標準RS-232標準。使用單片機的USART端口與計算機的串口〔9芯〕相連進展通信。2.5其它顯示屏:人機交互的窗口,使用JHD162A液晶屏。輸入電路:用于輸入控制信息,告訴控制器如何運轉(zhuǎn)。第三章、Atmega16L單片機Atmega16L是由ATMEL公司生產(chǎn)的高性能、低功耗的8位AVR?微處理器芯片,具有16KB系統(tǒng)內(nèi)可編程Flash。3.1Atmega16L主要功能Atmega16L單片機的功能及特點簡述如下:1、16KB的系統(tǒng)內(nèi)編程flash、512B的EEPROM、1KB的SRAM;2、四通道的PWM;3、兩個可編程串行USART;4、可工作于主機/從機模式的SPI;5、具有獨立片內(nèi)振蕩器的可編程看門狗定時器;6、片內(nèi)/片外中斷源;7、32個雙向I/O端口,可單獨控制;8、TWI模塊;9、3個定時計數(shù)器等。3.2Atmega16L引腳功能Atmega16L雙列直插式(PDIP)引腳如圖3-1:圖3-1Atmega16L(PDIP)圖引腳功能簡述如下:A/VCC:模擬/數(shù)字電源;AREF:A/D轉(zhuǎn)換參考電壓;XTAL1/2:晶振;RESET:復位;AREF:A/D轉(zhuǎn)換參考電壓;PA~PD:雙向I/O口;TXD:USART輸出引腳;RXD:USART輸入引腳;OC1A:PWM波形輸出端;注:USART,是一個高度靈活的串行通訊設(shè)備,通用同步和異步串行接收器和轉(zhuǎn)發(fā)器的英文縮寫。第四章、控制器電路圖原理圖說明:本原理圖,用Protel99se繪制。以總路線和網(wǎng)絡標號連接,即一樣的的網(wǎng)絡標號具有電氣連接。Jrs----------RS-232串口;Rp-----------Vref調(diào)節(jié)電阻;LM2575-------穩(wěn)壓片;JVCC---------電源接入口〔俗稱火牛頭〕;Jlcd---------JHD162A液晶屏接口;JM-----------步進電機接線口;JTAG---------仿真下載器連接口;LED_B--------電源指示;MAX-202------電平轉(zhuǎn)換芯片;L297/298-----構(gòu)成相序產(chǎn)生電路和驅(qū)動電路;放大圖見附錄。第五章、步進電動機原理與控制從廣義上講,步進電動機的類型分為機械式、電磁式和組合式三大類型。5.1步進電動機的構(gòu)造(圖5-1)圖5-1HB型步進電動機構(gòu)造示意圖5.2步進電動機的控制原理步進電機是一種將電脈沖信號變?yōu)橄鄳闹绷魑灰频臄?shù)字/模擬變換器。每當電機繞組接收一個脈沖時,轉(zhuǎn)子就轉(zhuǎn)過一個相應的角度〔步距〕。步進電機的角位移量和輸入脈沖的個數(shù)嚴格成正比。在時間上與輸入脈沖同步,因而只要控制輸入脈沖的數(shù)量、頻率和電機繞組的相序,即可獲得所需要的轉(zhuǎn)速和轉(zhuǎn)動方向。5.3L297/L2985.3.1L297芯片簡介L297芯片是一種硬件環(huán)分集成芯片,它可產(chǎn)生四相驅(qū)動信號,用于兩相雙極或四相單極步進電動機的控制。它的心臟局部是一組譯碼器它能產(chǎn)生各種所需的相序,這一局部是由兩種輸入模式控制,方向控制〔CW/CCW〕和HALF/FULL,步進式時鐘CLOCK將譯碼器從一階梯推進至另一階梯。譯碼器有四個輸出點連接到輸出邏輯局部,提供抑制和斬波功能所需的相序。L297能產(chǎn)生三種相序信號,對應于三種不同的工作方式:即半步方式〔HALFSTEP〕;基本步距〔FULLSTEP〕一相鼓勵方式;基本步距兩相鼓勵方式。L297另一個重要組成是由兩個PWM斬波器來控制相繞組電流,實現(xiàn)恒流斬波控制以獲得良好的矩頻特性。5.3.2L298芯片簡介L298芯片是一種高壓、大電流雙全橋式驅(qū)動器,其設(shè)計是為承受標準TTL邏輯電平信號和驅(qū)動電感負載的,例如繼電器、圓筒形線圈、直流電機和步進電機,具有兩抑制輸入來使器件不受輸入信號影響。每橋的三級管的射極是連接在一起的,相應外接線端可用來連接外設(shè)傳感電阻??砂仓昧硪惠斎腚娫?,使邏輯能在低壓下工作。L298芯片是具有15個引出腳的多瓦數(shù)直插封閉的集成芯片。5.3.3L297/298步進電機的控制L297/298的連接如以以下圖5-2:圖5-2L297/298連接圖這里我只使用:半步工作方式和兩相鼓勵的基本步距工作方式。兩種工作方式見下表5-1:工作方式半步工作方式兩相鼓勵基本步距引腳狀態(tài)HALF/FULL=1,CONTROL=1HALF/FULL=0,CONTROL=1輸出波形表5-1L297半步/兩相鼓勵基本步距工作方式注:采用基本步距一相鼓勵,存在一個缺點,在電流切換過程即通電狀態(tài)改變過程中,有一瞬間可能所有的定子控制繞組都不通電,電磁轉(zhuǎn)矩瞬間為零,這就使得電磁轉(zhuǎn)距在電機運行中波動很大。所以我不采用這種工作模式。5.3.4控制機制L297/298組成的完整系統(tǒng),通過不同的連接可以驅(qū)動兩相步進電動和驅(qū)動四相步進電機〔可承受的最高電壓為45V,每相電流可達2A〕。單片機〔簡稱mcu〕發(fā)出時鐘信號、正反轉(zhuǎn)信號、工作模式信號、復位信號、使能信號及控制信號。CW/CCW控制電機的轉(zhuǎn)向,取1和取0時轉(zhuǎn)向相反。CLOCK為步進脈沖信號輸入端,在每一個脈沖的下降沿,電機產(chǎn)生一步步進。HALF/FULL為半步或基本步距模式設(shè)置,為1時是半步模式,為0時是基本步距?!簿唧w組合方式見表5-1〕CONTORL斬波控制,當為0時,控制INH1和INH2;當為1時控制ABCD。ENABLE使能輸入,當為0時,INH1、INH2、A,B,C和D都為0。RESET輸入,當為0時,脈沖分配器回到初狀態(tài)〔HOME〕。L297通過控制L298雙H集成電路,來驅(qū)動步進電機。電路中,L297的15引腳上的兩個電阻用來調(diào)節(jié)斬波器電路的參考電壓。該電壓通過管腳13、14所反響的電位的大小比較,來確定是否進展斬波控制,以到達控制電機繞組電流峰值、保護步進電機的目的。綜上所述:步進電機的轉(zhuǎn)速取決于CLOCK的脈沖頻率,角位移取決于CLOCK的脈沖個數(shù),轉(zhuǎn)矩大小那么取決于參考電壓Vref的大小。第六章、實現(xiàn)6.1main主程序流程圖6.2程序代碼//***************************head.h************************************#ifndef_HEAD_H#define_HEAD_H#include<avr/io.h>#include<util/delay.h>#include<avr/interrupt.h>#include<avr/signal.h>#include<math.h>#defineTOPOCR1A#definePWMCONREG1TCCR1A#definePWMCONREG2TCCR1B#definePWM_IODDRD|=_BV(PD5)#defineL297_DIRPORTD#defineL297_OUTDDRD|=0xfc#defineRESET0X40#defineHF0X08#defineCC0X10#defineCONTROL0X80#defineS_RESETL297_DIR|=RESET#defineC_RESETL297_DIR&=~RESET#defineHALFL297_DIR|=HF#defineFULLL297_DIR&=~HF#defineCWL297_DIR|=CC#defineCCWL297_DIR&=~CC#defineS_CONTROLL297_DIR|=CONTROL#defineC_CONTROLL297_DIR&=~CONTROL#defineADC_OUTDDRA//ADC模數(shù)轉(zhuǎn)換存放器宏#defineADCWAYREGADMUX#defineADCCONREGADCSRA#defineADCIOSFRSFIOR#defineADCDATLADCL#defineADCDATHADCH#defineADCDATADC#defineAD_ENADEN#defineAD_SCADSC#defineMODE11//半步工作#defineMODE22//基本步距#defineHALFMODESTR"HALFSTEPMODE?"http://工作方式字符串宏#defineNORMALSTR"NORMALMODE?"#defineCORRECTSTR"correct?"#defineMINUSTR"minus?"#defineSTRWAY1"1.on-offmode"#defineSTRWAY2"2.dot-placemode"#defineCORRECT'+'#defineMINUS'-'#defineSEIsei()#defineCLIcli()#defineOPEN_CMP1ATIMSK|=_BV(OCIE1A)#defineCLOSE_CMP1ATIMSK&=~_BV(OCIE1A)#defineSTEP500#defineN50#defineKEY_INDDRC&=0X3C//KEY初始化宏定義#defineKEY_PINPINC#defineK1KEY_PIN&0X01#defineK2KEY_PIN&0X02#defineK3KEY_PIN&0X40#defineK4KEY_PIN&0X80#defineSET1"1.Setfrequency!"#defineSET2"2.Setmode!"#include"whole_variable.c"#include"key.c"#include"JHD162A.c"#include"ADC.c"#include"pwm.c"#include"L297.c"#include"interrupt_def.c"#endif//***********************head.h(完畢)**********************************//***********************whole_variable.c******************************unsignedlongn,counter,topfix,vn,n1,n2,fre=1000,ps;unsignedcharmode=1,direction='+',key_value,ch='1',key1_temp,key2_temp;unsignedcharstr_mode[20]="1.wave_mode?",str_mode1[20]="HALFSTEPMODE?",str_mode2[20]="correct?";unsignedcharstr_way[20]="1.on-offmode",pulse[10]="000000000",cursor_i,pulse_i,ky,adc_str[5];//*********************whole_variable.c(完畢)**************************//**************************key.c**************************************#include"head.h"unsignedcharkey(void){unsignedcharkey_value;key_value=(KEY_PIN&0XC3)^0xc3;if(key_value)//是否有鍵按下,無返回'0',有進入{}{switch(key_value) { case0x01:{while((KEY_PIN&0XC3)^0xc3);return'1';} case0x02:{while((KEY_PIN&0XC3)^0xc3);return'2';} case0x40:{while((KEY_PIN&0XC3)^0xc3);return'3';} case0x80:{while((KEY_PIN&0XC3)^0xc3);return'4';} }}elsereturn(0);}//***********************key.c(完畢)***********************************//**************************JHD162A.c********************************#include"head.h"#defineLCD_DIRDDRB//方向存放器#defineLCD_DARPORTB//數(shù)據(jù)存放器#defineRS_HLCD_DAR|=0x04//RS----PB2#defineRS_LLCD_DAR&=0xfa#defineE_HLCD_DAR|=0x08//E-----PB3#defineE_LLCD_DAR&=0xf7voide_h2l(void){E_H;//產(chǎn)生一個下降沿_delay_us(2);//必須>=2usE_L;}voidlcd_send(unsignedchartemp){LCD_DAR&=0X0F;//清高四位LCD_DAR|=(temp&0XF0);//發(fā)送高四位temp<<=4;e_h2l();//產(chǎn)生下降沿_delay_us(4);LCD_DAR&=0X0F;LCD_DAR|=temp;//發(fā)送低四位e_h2l();}voidlcd_com(unsignedcharcomm){RS_L;//選擇指令存放器_delay_us(20);lcd_send(comm);}voidlcd_data(unsignedchardat){RS_H;_delay_us(20);lcd_send(dat);}voidcursor_on(void)//開光標{lcd_com(0x0f);}voidcursor_off(void){lcd_com(0x0c);}voidcursor_control(unsignedcharx,unsignedchary){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);}voidjhd_init(void){LCD_DIR=0XFF;_delay_ms(16);//延時>=15mslcd_com(0x22);_delay_ms(4.1);//>=4.1mse_h2l(); _delay_us(100);//>=100use_h2l();e_h2l();lcd_com(0x28);lcd_com(0x0c);}voiddisplay_char(unsignedcharx,unsignedchary,unsignedchardat){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);lcd_data(dat);}voiddisplay_str(unsignedcharx,unsignedchary,unsignedchar*dat){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);while(lcd_data(*dat++),*dat);}voidclear(void)//清屏子函數(shù){display_str(0,0,"");}//****************************JHD162A.c(完畢)**************************//****************************PWM.c************************************#include"head.h"voidPWM(unsignedpps)//脈沖控制函數(shù){counter=0;vn=0;topfix=1000000/pps;n1=((10000-topfix)/STEP+2)*(2*N);if(n<2*n1){display_str(0,0,"error!");return;}n2=n-n1;TOP=10000;PWMCONREG1=0X41;//設(shè)置PWM模式PWM_IO;//置PWM口為輸出(PD5)SEI;//使能全局中斷OPEN_CMP1A;//使能輸出比較匹配A中斷PWMCONREG2=0X11;//設(shè)置PWM模式while(1){if(((key_value=key())=='4')&&!ky){PWMCONREG2=0;CLI;return;} elseif(counter<n1){display_str(0,0,"moveup...!");} elseif(counter==n)display_str(0,0,"stop...!"); elseif(counter>n2){display_str(0,0,"movedown...!");} elsedisplay_str(0,0,"isopluse...!"); adcdisplay();}}//************************PWM.c(完畢)**********************************//***************************L297.c************************************#include"head.h"voiddouble_half_mode1(void)//半步工作方式{HALF;S_CONTROL;}voiddouble_full_mode2(void)//兩相激磁基本步距{FULL;S_CONTROL;}//on-offmode模式執(zhí)行子函數(shù)voidL297_1(unsignedcharmode,chardirection,unsignedpps){ky=0; n=0xffffffff; L297_OUT;S_RESET;switch(mode)//L297工作模式選擇{case1:double_half_mode1();break; case2:double_full_mode2();break; default:display_str(0,0,"modeerror!");}switch(direction)//正反方向選擇{case'+':CW;break;case'-':CCW;break; default:display_str(0,0,"directionerror!");} PWM(pps); display_str(0,0,"Stop!");}//dot-placemode模式執(zhí)行子函數(shù)voidL297_2(unsignedcharmode,chardirection,unsignedpps){ky=1;L297_OUT;S_RESET;switch(mode)//L297工作模式選擇{case1:double_half_mode1();break; case2:double_full_mode2();break; default:display_str(0,0,"modeerror!");}switch(direction)//正反方向選擇{case'+':CW;break;case'-':CCW;break; default:display_str(0,0,"directionerror!");}n=n*2;PWM(pps);//調(diào)用PWM函數(shù)}//************************L297.c(完畢)**********************************//************************interrupt_def.c********************************#include"head.h"http://***************輸出比較匹配A中斷服務子程序*****************//SIGNAL(SIG_OUTPUT_COMPARE1A)//中斷服務程序,脈沖數(shù)、頻率控制〕{counter++;//脈沖計數(shù)器vn++;//加速間隔if((counter>=n)&&ky){PWMCONREG2=0;CLI;CLOSE_CMP1A;}//是否到達//脈沖數(shù),是關(guān)閉TC、中斷elseif(counter<n1)//加速階段。 { if(vn>2*N){TOP=((TOP-STEP)<=topfix)?topfix:TOP-STEP;vn=0; }}elseif((counter>n2)&&ky)//減速階段{ if(vn>2*N) { TOP=((TOP+STEP)>=10000)?10000:TOP+STEP; vn=0; } }//恒速階段}//********************interrupt_def.c(完畢)*****************************//****************************main.c**********************************#include"head.h"voidset_fre(void)//頻率設(shè)定子函數(shù){clear();//清屏display_str(0,0,"1000pps");while(1){do {key_value=key();if(key_value=='4')return;}while(!key_value); if(key_value=='2') { ch=(ch+1>=58)?'1':(ch+1); fre=(fre+1000>=10000)?1000:(fre+1000); } elseif(key_value=='3') { ch=(ch-1<=48)?'9':(ch-1); fre=(fre-1000<=0)?9000:(fre-1000); } display_char(0,0,ch);}}voidchange_mode(void)//模式選擇子函數(shù){clear();//清屏display_str(0,0,str_mode);while(1){do { key_value=key();if(key_value=='4')return;}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode,"1.wave_mode?"))strcpy(str_mode,"2.direction?"); elseif(!strcmp(str_mode,"2.direction?"))strcpy(str_mode,"1.wave_mode?"); } clear(); display_str(0,0,str_mode);}}voidset_mode(void)//模式設(shè)定子函數(shù){if(!strcmp(str_mode,"1.wave_mode?"))//"wave_mode"模式那么進入,程序體執(zhí)行{clear(); display_str(0,0,str_mode1); while(1) { do { key_value=key();if(key_value=='4'){key1_temp=0;return;}}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode1,NORMALSTR)){strcpy(str_mode1,HALFMODESTR);mode=MODE1;} elseif(!strcmp(str_mode1,HALFMODESTR)){strcpy(str_mode1,NORMALSTR);mode=MODE2;} } clear(); display_str(0,0,str_mode1);} }elseif(!strcmp(str_mode,"2.direction?"))//否那么,進入//"direction"語句體執(zhí)行(接上注釋){clear(); display_str(0,0,str_mode2); while(1) { do { key_value=key();if(key_value=='4'){key2_temp=0;return;}}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode2,CORRECTSTR)){strcpy(str_mode2,MINUSTR);direction=MINUS;} elseif(!strcmp(str_mode2,MINUSTR)){strcpy(str_mode2,CORRECTSTR);direction=CORRECT;} } clear(); display_str(0,0,str_mode2);}}}voidwork_way(void)//工作方式選擇{clear();display_str(0,0,"3.work_way?");while((key_value=key())!='4');//k4按下否,否等待按下,是向下運行display_str(0,0,str_way);//"開關(guān)模式"while(1){do { key_value=key();if(key_value=='4')return;}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_way,STRWAY1))strcpy(str_way,STRWAY2); elseif(!strcmp(str_way,STRWAY2))strcpy(str_way,STRWAY1); } clear(); display_str(0,0,str_way);}}unsignedchartransform(unsignedcharch)//代碼轉(zhuǎn)換子函數(shù){switch(ch){case'0':return0;break; case'1':return1;break; case'2':return2;break; case'3':return3;break; case'4':return4;break; case'5':return5;break; case'6':return6;break; case'7':return7;break; case'8':return8;break; case'9':return9;break;default:display_str(0,0,"error!");}}voidget_n(void){unsignedi,j=8;unsignedlongsum=0;for(i=0;i<9;i++){sum+=transform(pulse[i])*pow(10,j--);}n=sum+1;}voidset_way(void)//模式設(shè)置子函數(shù){if(!strcmp(str_way,STRWAY1))//on_offmode模式處理語句{//clear(); display_str(0,0,"Start...?");//選擇on-offmode模式,信息"等//待命令..." while((key_value=key())!='4');//如果'k4' L297_1(mode,direction,fre);//調(diào)用on-off控制子函數(shù)----控制//電機運轉(zhuǎn) }elseif(!strcmp(str_way,STRWAY2))//"2.dot-placemode"模式處理語句{cursor_i=15; cursor_on(); clear(); display_str(7,0,pulse); cursor_control(cursor_i,0); while(1) { do { key_value=key();}while(!key_value); if(key_value=='2') { cursor_i=(cursor_i-1<7)?15:(cursor_i-1); } elseif(key_value=='3') { cursor_i=(cursor_i+1>15)?7:(cursor_i+1); } elseif(key_value=='1') { pulse[cursor_i-7]=(pulse[cursor_i-7]+1>'9')?'0':(pulse[cursor_i-7]+1); } display_str(7,0,pulse); cursor_control(cursor_i,0);//刷新光標位置 if(key_value=='4')break; }cursor_off(); display_str(0,0,"Start...?"); get_n();//計算脈沖數(shù) while(key()!='4'); L297_2(mode,direction,fre);}}intmain(void)//main主函數(shù){DDRA=0XFF;//測試KEY_IN;//KEY初始化jhd_init();//JHD162A初始化adc_init();//ADC初始化while(1){display_str(0,0,"Welcomeusing!");//歡迎信息display_str(0,1,"AuthorYangMing");//作者信息while((key_value=key())!='4');
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計模板筆試
- 2025年度泰康企業(yè)客戶協(xié)議存款管理合同3篇
- 二零二五年度房產(chǎn)租賃反擔保合同(住宅租賃)6篇
- 二零二五年度智慧校園建設(shè)項目9A等級施工合同3篇
- 課程設(shè)計直齒
- 課程設(shè)計屋面防水怎么算
- 自動干手電路課程設(shè)計
- 水泥車間發(fā)貨員安全生產(chǎn)職責模版(3篇)
- 辦公室人員考核細則(二篇)
- 項目經(jīng)理部主要崗位職責(2篇)
- 創(chuàng)傷關(guān)節(jié)骨科年度總結(jié)
- 2022-2023學年江蘇省鹽城第一學期高一期末考試數(shù)學試卷及答案解析-普通用卷
- 醫(yī)師病理知識定期考核試題與答案
- 履約情況證明(共6篇)
- 礦井提升容器課件
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 《潔凈工程項目定額》(征求意見稿)
- 城鎮(zhèn)燃氣設(shè)計規(guī)范
- 年零售藥店操作規(guī)程版
- 日有所誦(二年級)
- 搞笑個性YY娛樂頻道分組設(shè)計圖
評論
0/150
提交評論