實驗一直流步進電機綜合控制系統(tǒng)設計_第1頁
實驗一直流步進電機綜合控制系統(tǒng)設計_第2頁
實驗一直流步進電機綜合控制系統(tǒng)設計_第3頁
實驗一直流步進電機綜合控制系統(tǒng)設計_第4頁
實驗一直流步進電機綜合控制系統(tǒng)設計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

-實驗一直流、步進電機綜合控制系統(tǒng)設計一、實驗目的通過本次實驗熟悉MagicARM2410GPIO、UART、RTC,步進電機,直流電機,IIC的工作原理;并能熟悉的編程控制。二、實驗要求以MagicARM2410為實驗平臺,設計一個通過串口通信交互控制的綜合型控制系統(tǒng)。具體來說,可在啟動時,自動列出一些選項,通過鍵盤選擇*個選項而實現(xiàn)其功能;考慮到實時性,再按*個控制鍵能立刻停頓當前功能而回到初始的待選狀態(tài)。具體功能要求如下:1、實現(xiàn)四個LED燈按照十六進制的規(guī)則依次亮滅;2、在超級終端上輸入兩個兩位數(shù),實現(xiàn)兩位數(shù)的加減乘除并顯示運算結(jié)果;3、顯示當前的年月日、星期、時分秒;4、實現(xiàn)步進電機的調(diào)速和正反轉(zhuǎn);可用旋轉(zhuǎn)按鈕W1或按鍵控制調(diào)速,在超級終端和數(shù)碼管上同步顯示其正反轉(zhuǎn)和轉(zhuǎn)速信息;5、實現(xiàn)直流電機德調(diào)速和正反轉(zhuǎn);可用旋轉(zhuǎn)按鈕W2或按鍵控制調(diào)速,在超級終端和數(shù)碼管上同步顯示其正反轉(zhuǎn)和轉(zhuǎn)速信息;6、利用IIC通信,實現(xiàn)EEPROM的讀寫;在超級終端上顯示地址和數(shù)據(jù)。三、實驗原理〔一〕LED燈-四個小燈分別接于GPE11、GPE12 GPH4、GPH6端口;控制端口"0"和"1〞分別實現(xiàn)亮滅(端口設為輸出)如下:voidLED_init(void){//初始化I/OrGPECON=(rGPECON&(~(0*0F<<22)))|(0*05<<22);//rGPECON[25:22]=0101b,設置GPE11、GPE12為GPIO輸出模式rGPHCON=(rGPHCON&(~(0*33<<8)))|(0*11<<8);rGPHCON[13:8]=01**01b,設置GPH4、GPH6為GPIO輸出模式

//}〔二〕UARTUART是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可以實現(xiàn)全雙工傳輸和接收。在嵌入式設計中,UART用來與PC進展通信,包括與監(jiān)控調(diào)試器和其它器件,如EEPROM通信。UART首先將接收到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)來傳輸。消息幀從一個低位起始位開場,后面是5~8個數(shù)據(jù)位,一個可用的奇偶位和一個或幾個高位停頓位。接收器發(fā)現(xiàn)開場位時它就知道數(shù)據(jù)準備發(fā)送,并嘗試與發(fā)送器時鐘頻率同步。如果選擇了奇偶,UART就在數(shù)據(jù)位后面加上奇偶位。奇偶位可用來幫助錯誤校驗。在接收過程中,UART從消息幀中去掉起始位和完畢位,對進來的字節(jié)進展奇偶校驗,并將數(shù)據(jù)-字節(jié)從串行轉(zhuǎn)換成并行。UART也產(chǎn)生額外的信號來指示發(fā)送和接收的狀態(tài)。例如,如果產(chǎn)生一個奇偶錯誤,UART就置位奇偶標志。UART作用1.發(fā)送/接收邏輯2.波特率的產(chǎn)生3.數(shù)據(jù)收發(fā)4.中斷控制{出現(xiàn)以下情況時,可使UART產(chǎn)生中斷:FIFO溢出錯誤 線中止錯誤〔line-break,即R*信號一直為0的狀態(tài),包括校驗位和停頓位在〕 奇偶校驗錯誤 幀錯誤〔停頓位不為1〕 接收超時〔接收FIFO已有數(shù)據(jù)但未滿,而后續(xù)數(shù)據(jù)長時間不來〕 發(fā)送 接收由于所有中斷事件在發(fā)送到中斷控制器之前會一起進展"或運算〞操作,所以任意時刻UART只能向中斷產(chǎn)生一個中斷請求。通過查詢中斷狀態(tài)函數(shù)UARTIntStatus(),軟件可以在同一個中斷效勞函數(shù)里處理多個中斷事件〔多個并列的if語句〕。56

回環(huán)操作串行紅外協(xié)議UART初始化函數(shù)如下voidUART_Init(void){inti;if(g_uart_sel) //判斷是否為串口1{//I/O口設置(GPH5,GPH4)rGPHUP=rGPHUP|(0*03<<4);-rGPHCON=(rGPHCON&(~0*00000F00))|(0*00000A00);//串口模式設置rUFCON1=0*00; //制止FIFO功能rUMCON1=0*00; //AFC(流控制)禁能rULCON1=0*03; //制止IRDA,無奇偶校驗,1位停頓位,8位數(shù)據(jù)位rUCON1=0*245;//使用PCLK來生成波特率,發(fā)送中斷為電平觸發(fā)模式,接收中斷為邊沿觸發(fā)模式,//制止接收超時中斷,使能接收錯誤中斷,正常工作模式,中斷或查詢方式(非DMA)//串口波特率設置rUBRDIV1=(int)(PCLK/16.0/UART_BPS+0.5)-1;}else{//I/O口設置(GPH3,GPH2)rGPHUP=rGPHUP|(0*03<<2);rGPHCON=(rGPHCON&(~0*000000F0))|(0*000000A0);//串口模式設置rUFCON0=0*00;rUMCON0=0*00;rULCON0=0*03;

//制止FIFO功能//AFC(流控制)禁能//制止IRDA,無奇偶校驗,1位停頓位,8位數(shù)據(jù)位rUCON0=0*245;//使用PCLK來生成波特率,發(fā)送中斷為電平觸發(fā)模式,接收中斷為邊沿觸發(fā)模式,//制止接收超時中斷,使能接收錯誤中斷,正常工作模式,中斷或查詢方式(非DMA)//串口波特率設置rUBRDIV0=(int)(PCLK/16.0/UART_BPS+0.5)-1;}for(i=0;i<100;i++);}〔三〕RTCA概述實時時鐘〔RTC〕單元在系統(tǒng)電源關(guān)閉的情況下可以在備用電池下工作。RTC-可以使用STRB/LDRBARM操作傳輸二進制碼十進制數(shù)的8位數(shù)據(jù)給CPU。數(shù)據(jù)包括秒、分鐘、小時、日期、天、月、年的時間信息。RTC單元可以在32.768KHz的外部晶振下工作,可以可以執(zhí)行報警功能。B特點-BCD數(shù):秒、分鐘、小時、日期、日、月、年-閏年生成器-報警功能:報警中斷或從掉電模式中喚醒-已經(jīng)解決2000年問題-獨立電源引腳〔RTCVDD〕-支持對于實時核時間節(jié)拍的毫秒節(jié)拍時間中斷C實時時鐘操作C.1閏年發(fā)生器閏年發(fā)生器可以基于BCDDATE、BCDMON、BCDYEAR的數(shù)據(jù),從28、29、30、31中確定每個月的最后一天。該模塊在確定*月最后一天的時候會考慮閏年的因素。一個8位的計數(shù)器僅能代表兩個BCD數(shù)字,所以它不能確定是否是00年〔該年的最后兩個數(shù)字是00〕。C.2讀寫存放器為了寫RTC模塊中的BCD存放器,RTCCON存放器的位0必須置1。為了顯示秒分小時星期日月年,CPU應該分別讀取在RTC模塊中的BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON,和BCDYEAR。但是,因為多存放器讀取可能存在一秒的誤差。例如,當用戶讀BCDYEAR和BCDMON,構(gòu)造假定是2059年12月31日23點59分。當用戶讀-BCDSEC存放器,值的圍是從1到59〔秒〕就沒有問題,但是如果值是0,年月日就變成了2060年1月1日0時0分因為有剛剛提到的1秒誤差。在這種情況下如果BCDSEC為0,用戶應該重讀BCDYEAR到BCDSEC。C.3備用電池操作RTC邏輯可以由備用電池驅(qū)動,其通過RCTVDD引腳給RTC模塊提供電源,即使系統(tǒng)電源關(guān)閉。當系統(tǒng)關(guān)閉時,CPU和RTC模塊的接口是封閉的,備用電池僅驅(qū)動振蕩電路和BCD計數(shù)器以最小化電源消耗。C.4報警功能RTC在掉電模式或正常操作模式下的特定時間會發(fā)出報警信號。在正常操作模式下報警中斷〔INT_RTC〕被激活。在掉電模式下,電源管理喚醒信號〔PMWKUP〕也如INT_RTC一樣被激活。RTC報警存放器〔RTCALM〕決定了報警的使能狀態(tài)和報警時間設定的條。C.5節(jié)拍時間中斷RTC節(jié)拍時間是用于中斷請求。TIT存放器有一個中斷使能位和對于中斷的計數(shù)器值當節(jié)拍時間中斷出現(xiàn)時,計數(shù)器的值為0。中斷周期如下:Period=(n+1)/128secondn:節(jié)拍計數(shù)器值(1~127)RTC節(jié)拍時間可以用于實時操作系統(tǒng)核時間節(jié)拍。如果時間節(jié)拍由RTC時間節(jié)拍生成,與實時操作系統(tǒng)功能相關(guān)的時間就會和實時同步。D.RTC存放器〔1〕實時時鐘控制存放器〔RTCCON〕〔2〕節(jié)拍時間計數(shù)存放器〔TIT〕〔3〕RTC報警控制存放器〔RTCALM〕-〔4〕報警秒數(shù)據(jù)存放器〔ALMSEC〕〔5〕報警分鐘數(shù)據(jù)存放器〔ALMMIN〕〔6〕報警小時數(shù)據(jù)存放器〔ALMHOUR〕〔7〕報警日期數(shù)據(jù)存放器〔ALMDATE〕〔8〕報警月數(shù)據(jù)存放器〔ALMMON〕〔9〕報警年數(shù)據(jù)存放器〔ALMYEAR〕〔10〕BCD秒存放器〔BCDSEC〕〔11〕BCD分存放器〔BCDMIN〕〔12〕BCD小時存放器〔BCDHOUR〕〔13〕BCD日期存放器〔BCDDATE〕〔14〕BCD日存放器〔BCDDAY〕〔15〕BCD月存放器〔BCDMON〕〔16〕BCD年存放器〔BCDYEAR〕〔四〕步進機與直流電機工作原理步進電機是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機構(gòu)。步進電機正傳,雙四拍程序。時序控制為AB--BC--CD--DA--AB,共控制運轉(zhuǎn)4圈(電機步距角為18度)。每一步的延時控制。值越大,延時越久;步進電機反轉(zhuǎn),雙四拍程序時序控制為AD--DC--CB--BA--AD。步距角為18度)。每一步的延時控制。值越大,延時越久。正轉(zhuǎn)模式:dly為延時voidMOTO_Mode1(uint32dly){-//AB相有效GPIOSET(MOTOA);GPIOSET(MOTOB);Delay(dly);GPIOCLR(MOTOA);GPIOCLR(MOTOB);//BC相有效GPIOSET(MOTOB);GPIOSET(MOTOC);Delay(dly);GPIOCLR(MOTOB);GPIOCLR(MOTOC);//CD相有效GPIOSET(MOTOC);GPIOSET(MOTOD);Delay(dly);GPIOCLR(MOTOC);GPIOCLR(MOTOD);//DA相有效GPIOSET(MOTOD);GPIOSET(MOTOA);Delay(dly);-GPIOCLR(MOTOD);GPIOCLR(MOTOA);}直流電機由PWM脈沖調(diào)制控制;脈沖為1是電機轉(zhuǎn)動,0時停頓轉(zhuǎn)動。通過PWM占空比來實現(xiàn)加減速。參考程序:voidStepMOTO_Test(void){//uint32a=0;//步進電機控制口設置rGPCCON=(rGPCCON&(~0*0000FC03))|(0*00005401);//GPC0、GPC5--7口設置為輸出rGPCUP=rGPCUP|0*00E1;

//制止GPC0、GPC5--7口的上拉電阻rGPCDAT=rGPCDAT&(~0*00E1);

//設置GPC0、GPC5--7口輸出低電平while(1){UART_SendStr("Pleaseinput'z'OR'f'tocontrolzhengzhuanandfanzhuan\n");UART_SendStr("Press'o'keye*ittest\n");switch(getch=UART_GetKey()){-case'z':{sprintf("Press'j'tospeedup;'ESC'breakout.");for(;;){Change_Speed();MOTO_Mode1(speed1);

//控制步進電機正轉(zhuǎn)//在終端上顯示速度sprintf(disp_buf2,"Zhengzhuan:StepMoto_speedis%d\n",(330-speed1));UART_SendStr(disp_buf2);if(UART_GetFlag()=='j')speedup();//加速if(UART_GetFlag()==0*1B)

//按Esc鍵退出測試break;}break;}case'f':{-sprintf("Press'j'tospeedup;'ESC'breakout.");for(;;){Change_Speed();MOTO_Mode2(speed1); //控制步進電機反轉(zhuǎn)//在終端上顯示速度sprintf(disp_buf2,"Fanzhuan:StepMoto_speedis%d\n",-(330-speed1));UART_SendStr(disp_buf2);if(UART_GetFlag()=='j')UART_SendStr("j");speedup();//加速if(UART_GetFlag()==0*1B) //按Esc鍵退出測試break;}break;}default:break;}if(getch=='o')//按下字母'o'鍵退出整個步進電機測試break;-}}直流電機測試程序:voidDCMOTO_Test(void){uint32i=0,a=0;uint16pwm_dac;charget_ch=0;//TOUT0口設置rGPBCON=(rGPBCON&(~(0*03<<0)))|(0*02<<0);

//rGPBCON[1:0]=10b,設置TOUT0功能rGPBUP=rGPBUP|0*0001;

//制止TOUT0口的上拉電阻//設置GPH9為GPIO輸出模式rGPHCON=(rGPHCON&(~(0*03<<18)))|(0*01<<18);

//GPH9口rGPHDAT=rGPHDAT&(~(1<<9));

//輸出0電平rGPHUP=rGPHUP|(1<<9);//初始化PWM輸出。設PWM周期控制值為255pwm_dac=250*255/330; //初始化占空比PWM_Init(255,pwm_dac);-while(1){//按'z'鍵控制正傳,'f'鍵控制反轉(zhuǎn),'s'鍵停頓轉(zhuǎn)動'Esc'退出測試UART_SendStr("\nPressthekeytocontrolstate:'z'--zhengzhuan'f'--fanzhuan's'--stop\n");switch((get_ch=UART_GetKey())){case'z':{rGPBDAT=rGPHDAT|(1<<9);rGPHDAT=rGPHDAT&(~(1<<9));while(1){Change_Speed();rTCMPB0=(speed2*255/330);sprintf(disp_buf3,"DCMoto_speedis%d\n",speed2);//終端顯示正轉(zhuǎn)速度UART_SendStr(disp_buf3);if(UART_GetFlag()=='s'){rGPBDAT=rGPHDAT&(~(1<<9));rGPHDAT=rGPHDAT&(~(1<<9));-break;}}break;}case'f':{rGPBDAT=rGPHDAT&(~(1<<9));rGPHDAT=rGPHDAT|(1<<9);while(1){Change_Speed();rTCMPB0=(speed2*255/330);sprintf(disp_buf3,"DCMoto_speedis%d\n",(-speed2));//終端顯示正轉(zhuǎn)速度UART_SendStr(disp_buf3);if(UART_GetFlag()=='s'){rGPBDAT=rGPHDAT&(~(1<<9));rGPHDAT=rGPHDAT&(~(1<<9));break;}-}break;}default:break;}if(UART_GetFlag()==0*1B)break;}}〔五〕IIC通信實現(xiàn)EEPROM的讀寫〔一〕I2C,一種總線構(gòu)造。I2C串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到I2C總線設備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。實驗過程中必須先初始化總線—啟動總線后才能用其進展通信。intI2C_SendByte(uint8dat)//發(fā)送一字節(jié)數(shù)據(jù),并接收應答位intI2C_RcvByteNA(uint8*dat)//接收I2C總線上一字節(jié)數(shù)據(jù)并發(fā)送非應答位intI2C_RcvByteA(uint8*dat)//接上I2C總線上一字節(jié)數(shù)據(jù),并發(fā)送應答位voidStopI2C(uint8send)//完畢總線intISendStr(uint8sla,uint8*suba,uint8*s,uint8no)【**Descriptions:使用硬件I2C發(fā)送數(shù)據(jù)。-**Input:sla 從機地址suba器件子地址(第一字節(jié)用來表示子地址字節(jié)個數(shù))** s 發(fā)送數(shù)據(jù)緩沖區(qū)** no 發(fā)送數(shù)據(jù)個數(shù)Output:操作成功返回TRUE,仲載失敗/無從機應答返回FALSENote:使用前設置好參數(shù)。程序不會更改s、suba緩沖區(qū)的數(shù)據(jù)】intIRcvStr(uint8sla,uint8*suba,uint8*s,uint8no)//v使用硬件I2C讀取數(shù)據(jù)。參數(shù)和發(fā)送對應〔二〕測試EEPROM程序voidTestEEPROM(void){uint8suba[2];intrw_err;inti;rw_err=0;//寫數(shù)據(jù)測試suba[0]=1;

//1位子地址suba[1]=0*00;

//子地址for(i=0;i<10;i++){dat_buf[i]=i+'0';}-UART_SendStr("dataofwrite:");for(i=0;i<5;i++)UART_SendByte(dat_buf[i]);UART_SendStr("\n");i2c_opsta=ISendStr(CAT1025,suba,dat_buf,5);for(i=0;i<10000;i++); //等待寫周期//讀出校驗for(i=0;i<5;i++)dat_buf[i]=0*00;i2c_opsta=IRcvStr(CAT1025,suba,dat_buf,5);UART_SendStr("dataofread:");for(i=0;i<5;i++)UART_SendByte(dat_buf[i]);UART_SendStr("\n");for(i=0;i<5;i++){if(dat_buf[i]!=(i+'0'))rw_err=1;}//判斷操作是否出錯,如果出錯則蜂鳴報警if(rw_err)ErrorShow();}【如果寫入的數(shù)據(jù)和讀出的一樣,則測試通過】四、實驗程序-【main函數(shù):主要實現(xiàn)與終端交互的功能,通過鍵盤輸入字符的判斷來決定執(zhí)行的功能】intmain(void){uint8g_getch;inti=0;UART_Select(0);//選擇UART0UART_Init();//UART0初始化LED_init();//LED相關(guān)初始化EINT_init();//外部中斷初始化while(1){fun_test();switch(g_getch=UART_GetKey()){case'1':{UART_SendByte(g_getch);UART_SendStr("\n");LED_DispAllOn(); //LED燈全亮DelayNS(10);UART_SendStr("\nTestLED_DispAllOnisOver!\n");//死循環(huán),當檢測到按下‘Esc’鍵時-break;}case'2':{UART_SendByte(g_getch);UART_SendStr("\n");LED_DispAllOff(); //LED燈全滅DelayNS(10);UART_SendStr("\nTestLED_DispAllOffisOver!\n");break;}case'3':{UART_SendByte(g_getch);UART_SendStr("\n");for(;;)退出{LED_onebyone(); //流水燈if(UART_GetFlag()

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論