版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《嵌入式系統(tǒng)原理》課程設(shè)計報告</p><p> 題 目 </p><p><b> 學院(部)</b></p><p> 專 業(yè) </p><p><b> 班 級</b></p><p><b>
2、 學生姓名 </b></p><p><b> 學 號</b></p><p> 指導教師(簽字) </p><p><b> 目錄</b></p><p> 題目……………………………………………………………………3</p><p&
3、gt; 摘要……………………………………………………………………3</p><p> 關(guān)鍵字…………………………………………………………………3</p><p> 設(shè)計要求………………………………………………………………3</p><p> 第一章 系統(tǒng)概述…………………………………………………… 3</p><p> 1總框圖設(shè)計
4、……………………………………………………………4</p><p> 2 實物圖………………………………………………………………4</p><p> 第二章 單元電路設(shè)計與分析……………………………………… 5</p><p> 1顯示部分……………………………………………………………5</p><p> 2 PWM輸出部分………………
5、………………………………………7</p><p> 3按鍵控制部分…………………………………………………………8</p><p> 第三章 主體代碼………………………………………………………12</p><p> 第四章 結(jié)束語 ………………………………………………………18</p><p> 全自動洗衣機控制程序設(shè)計</p&g
6、t;<p> 摘要:STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的ARM Cortex-M3內(nèi)核。本次使用的是STM32F103“增強型”系列。增強型系列時鐘頻率達到72MHz,從閃存執(zhí)行代碼,STM32功耗36mA,是32位市場上功耗最低的產(chǎn)品,相當于0.5mA/MHz。工作原理:是通過改變輸出方波的占空比使負載上的平均電流功率從0-100%變化,從而改變直流減速電機速度。利用脈寬調(diào)制(PWM)
7、方式,實現(xiàn)調(diào)速,它的優(yōu)點是電源的能量功率,能得到充分利用,電路的效率高。</p><p> 關(guān)鍵字:占空比 PWM輸出 控制 STM32 電機 人機交互</p><p><b> 設(shè)計概述及基本要求</b></p><p> 用單片機編程實現(xiàn)洗衣機的控制過程,要求:</p><p> 1 具有進水
8、洗滌 脫水等功能。</p><p> 2 程序可選擇其中一個功能執(zhí)行。</p><p> 3 通過電機轉(zhuǎn)動時間比例實現(xiàn)洗滌強度控制功能。</p><p> 4 通過洗滌時間和沖洗次數(shù)實現(xiàn)標準和經(jīng)濟選擇功能。</p><p><b> 系統(tǒng)概述</b></p><p><b>
9、1.1 總框圖設(shè)計</b></p><p> 根據(jù)設(shè)計要求,我們把設(shè)計主要分為四個模塊:顯示模塊,直流減速電機轉(zhuǎn)動模塊,操控模塊,安全響應(yīng)模塊。</p><p><b> 其原理圖如下:</b></p><p><b> 實物圖:</b></p><p><b> 系統(tǒng)
10、簡介:</b></p><p> 打開電源之后,電源指示燈亮,屏幕顯示: (SMART WASHING MACHINE);此時,按下KEY0進入標準洗滌模式(CLASSICAL MODEL),洗滌兩遍.按下WK_UP進入經(jīng)濟型洗滌模式. 按下KEY1進入手動選擇模式(HANDLE MODEL),在此模式下,KEY0為選擇遙控控制,遙控器上,3:進水(WATER IN),2:洗滌(WASHING TI
11、ME),1,脫水(DEWATERING);同時,在手動控制中,也可以用按鍵操作:KEY1為洗滌;WK_UP為脫水.RESET為安全按鈕,用于在高速脫水時的緊急停止.</p><p><b> 全自動模式流程:</b></p><p> LED1(綠燈)亮,顯示進水(WATER IN),進水大約20秒;進水結(jié)束后LED1熄滅,電機間歇轉(zhuǎn)動(WASHING TIME)
12、,顯示洗滌;洗滌結(jié)束后進行脫水,LED1閃爍且電機持續(xù)快速轉(zhuǎn)動,顯示脫水(DEWATERING);脫水結(jié)束LED1熄滅,洗衣過程結(jié)束(FINISHED),LED1短暫亮起后熄滅表示洗衣結(jié)束,屏幕顯示(FINISHED).</p><p> 經(jīng)濟型模式與標準模式對比:</p><p> 標準模式共洗滌兩遍.進水量,洗滌時間,在洗滌時電機轉(zhuǎn)動時間以及脫水時間都較長.</p>
13、<p> 經(jīng)濟型模式只洗滌一遍,進水量小于標準模式,占空比大于標準模式,脫水時間小于標準模式,從而實現(xiàn)經(jīng)濟型洗滌模式.</p><p> 第二章 單元電路設(shè)計與分析</p><p><b> 顯示部分:</b></p><p> 此時為手動模式下進行脫水操作</p><p> 經(jīng)濟型洗滌中的洗滌操作
14、</p><p><b> 相關(guān)代碼:</b></p><p> u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF; </p><p> u16 DeviceCode; </p><p> #if LCD_FAST_IO==1 //快速IO</p><
15、;p><b> //寫寄存器函數(shù)</b></p><p> void LCD_WR_REG(u8 data)</p><p><b> { </b></p><p> LCD_RS_CLR;//寫地址 </p><p> LCD_CS_CLR; </p><p&
16、gt; DATAOUT(data); </p><p> LCD_WR_CLR; </p><p> LCD_WR_SET; </p><p> LCD_CS_SET; </p><p><b> }</b></p><p> #else//正常IO</p><
17、p><b> //寫寄存器函數(shù)</b></p><p> void LCD_WR_REG(u8 data)</p><p><b> { </b></p><p> LCD_RS=0;//寫地址 </p><p> LCD_CS=0; </p><p>
18、DATAOUT(data); </p><p> LCD_WR=0; </p><p> LCD_WR=1; </p><p> LCD_CS=1; </p><p><b> }</b></p><p> void LED_Init(void)</p><p&g
19、t;<b> {</b></p><p> RCC->APB2ENR|=1<<2; //使能PORTA時鐘 </p><p> RCC->APB2ENR|=1<<5; //使能PORTD時鐘 </p><p> GPIOA->CRH&=0XFFFFFFF0
20、; </p><p> GPIOA->CRH|=0X00000003;//PA8 推挽輸出 </p><p> GPIOA->ODR|=1<<8; //PA8 輸出高</p><p> GPIOD->CRL&=0XFFFFF0FF;</p><p> GPIOD->CRL|
21、=0X00000300;//PD.2推挽輸出</p><p> GPIOD->ODR|=1<<2; //PD.2輸出高 </p><p><b> }</b></p><p><b> PWM輸出部分:</b></p><p><b> 相關(guān)代碼:<
22、;/b></p><p> void PWM_Init(u16 arr,u16 psc)</p><p> { </p><p> RCC->APB1ENR|=1<<1; //TIM3時鐘使能 </p><p> GPIOA->CRL&=0X0FFFFFFF;/
23、/PA7輸出</p><p> GPIOA->CRL|=0XB0000000;//復(fù)用功能輸出 </p><p> GPIOA->ODR|=1<<7;//PA7上拉</p><p> TIM3->ARR=arr;//設(shè)定計數(shù)器自動重裝值 </p><p> TIM3->PSC=psc;//預(yù)
24、分頻器不分頻</p><p> TIM3->CCMR1|=7<<12; //CH2 PWM2模式 </p><p> TIM3->CCMR1|=1<<11; //CH2預(yù)裝載使能 </p><p> TIM3->CCER|=1<<4; //OC2 輸出使能 </p>&l
25、t;p> TIM3->CR1=0x8000; //ARPE使能 </p><p> TIM3->CR1|=0x01; //使能定時器3 </p><p><b> }</b></p><p><b> 控制部分: </b></p><p>
26、<b> 紅外遙控:</b></p><p><b> 按鍵:</b></p><p><b> 相關(guān)代碼:</b></p><p> void EXTI1_IRQHandler(void)</p><p><b> { </b>&l
27、t;/p><p><b> u8 res=0;</b></p><p><b> u8 OK=0; </b></p><p> u8 RODATA=0; </p><p><b> while(1)</b></p><p><b>
28、; { </b></p><p> if(RDATA)//有高脈沖出現(xiàn)</p><p><b> {</b></p><p> res=Pulse_Width_Check();//獲得此次高脈沖寬度 </p><p> if(res==250)break;//非有用信號&l
29、t;/p><p> if(res>=200&&res<250)OK=1; //獲得前導位(4.5ms)</p><p> else if(res>=85&&res<200) //按鍵次數(shù)加一(2ms)</p><p> { </p><p> Remo
30、te_Rdy=1;//接受到數(shù)據(jù)</p><p> Remote_Cnt++;//按鍵次數(shù)增加</p><p><b> break;</b></p><p><b> }</b></p><p> else if(res>=50&&res<85)RODATA=1
31、;//1.5ms</p><p> else if(res>=10&&res<50)RODATA=0;//500us</p><p><b> if(OK)</b></p><p><b> {</b></p><p> Remote_Odr<<=1;
32、</p><p> Remote_Odr+=RODATA; </p><p> Remote_Cnt=0; //按鍵次數(shù)清零</p><p><b> } </b></p><p> } </p><p><b> } </b>
33、</p><p> EXTI->PR=1<<1; //清除中斷標志位 </p><p><b> } </b></p><p><b> //處理紅外鍵盤</b></p><p><b> //返回相應(yīng)的鍵值</b></
34、p><p> u8 Remote_Process(void)</p><p> { </p><p> u8 t1,t2; </p><p> t1=Remote_Odr>>24; //得到地址碼</p><p> t2=(Remote_Odr>>16)&a
35、mp;0xff;//得到地址反碼 </p><p> Remote_Rdy=0;//清除標記 </p><p> if(t1==(u8)~t2&&t1==REMOTE_ID)//檢驗遙控識別碼(ID)及地址 </p><p><b> { </b></p><p> t1=Remo
36、te_Odr>>8;</p><p> t2=Remote_Odr; </p><p> if(t1==(u8)~t2)return t1; //處理鍵值 </p><p><b> } </b></p><p><b> return 0;</b></p>
37、;<p><b> }</b></p><p> void KEY_Init(void)</p><p><b> {</b></p><p> RCC->APB2ENR|=1<<2; //使能PORTA時鐘</p><p> GPIOA->C
38、RL&=0XFFFFFFF0;//PA0設(shè)置成輸入 </p><p> GPIOA->CRL|=0X00000008; </p><p> GPIOA->CRH&=0X0F0FFFFF;//PA13,15設(shè)置成輸入 </p><p> GPIOA->CRH|=0X80800000; </p>
39、;<p> GPIOA->ODR|=1<<13; //PA13上拉,PA0默認下拉</p><p> GPIOA->ODR|=1<<15; //PA15上拉</p><p><b> } </b></p><p> //注意此函數(shù)有響應(yīng)優(yōu)先級,KEY0>KEY1>
40、KEY2!!</p><p> u8 KEY_Scan(void)</p><p><b> { </b></p><p> static u8 key_up=1;//按鍵按松開標志</p><p> JTAG_Set(JTAG_SWD_DISABLE);</p><p> if(k
41、ey_up&&(KEY0==0||KEY1==0||KEY2==1))</p><p><b> {</b></p><p> delay_ms(10);//去抖動 </p><p><b> key_up=0;</b></p><p> if(KEY0==0)</p&
42、gt;<p><b> {</b></p><p> JTAG_Set(SWD_ENABLE);</p><p><b> return 1;</b></p><p><b> }</b></p><p> else if(KEY1==0)</p&
43、gt;<p><b> {</b></p><p> JTAG_Set(SWD_ENABLE);</p><p><b> return 2;</b></p><p><b> }</b></p><p> else if(KEY2==1)</p&
44、gt;<p><b> {</b></p><p> JTAG_Set(SWD_ENABLE);</p><p><b> return 3;</b></p><p><b> }</b></p><p> }else if(KEY0==1&&a
45、mp;KEY1==1&&KEY2==0)key_up=1; </p><p> JTAG_Set(SWD_ENABLE);</p><p> return 0;// 無按鍵按下</p><p><b> }</b></p><p><b> 主體代碼</b><
46、/p><p> int main(void)</p><p><b> {</b></p><p><b> u8 key;</b></p><p> u8 t=0;u8 dir=0;int n=2630,m=1000,p=500,i=100,w=1; u16 led0pwmval=0;
47、 </p><p> Stm32_Clock_Init(9);//系統(tǒng)時鐘設(shè)置</p><p> delay_init(72);//延時初始化</p><p> uart_init(72,9600); //串口1初始化 </p><p> LCD_Init();//初始化液晶 </p&
48、gt;<p> LED_Init(); //LED初始化 </p><p> Remote_Init(); //初始化紅外接收</p><p> PWM_Init(900,0); //不分頻。PWM頻率=72000/900=8Khz</p><p> KEY_Init(); //初始化與按鍵連接
49、的硬件接口 </p><p> LED0_PWM_VAL=0; </p><p> POINT_COLOR=RED;//設(shè)置字體為紅色 </p><p> LCD_ShowString(30,70,"SMART WASHING MACHINE");</p><p><b> while(1)&l
50、t;/b></p><p><b> {</b></p><p> t=KEY_Scan();//得到鍵值</p><p><b> if(t)</b></p><p> { </p><p><b> switch(t)</
51、b></p><p><b> { </b></p><p> case 1:LCD_ShowString(60,120,"CLASSICAL MODEL");</p><p> LCD_ShowString(60,150,"......");</p><p>
52、; while(m){delay_ms(10);LED1=!LED1;m--;LCD_ShowString(60,190,"WATER IN ");}</p><p> m=1000;dir=1;LED0_PWM_VAL=led0pwmval=0;</p><p><b> while(n)</b></p><p&g
53、t;<b> { </b></p><p> LCD_ShowString(60,190,"WASHING TIME");</p><p> delay_ms(10); </p><p> if(dir){led0pwmval++;led0pwmval++;led0pwmval++;}</p>&l
54、t;p> else {led0pwmval--;led0pwmval--;led0pwmval--;}</p><p> if(led0pwmval>700)dir=0;</p><p> if(led0pwmval==0)dir=1;</p><p> LED0_PWM_VAL=led0pwmval;</p><p>
55、 n--; }n=2330;</p><p> //while(i){LCD_ShowString(60,190,"DEWATERING ");delay_ms(200);LED1=!LED1;LED0=!LED0;LED0_PWM_VAL=900;} while(i){delay_ms(10);LED0_PWM_VAL=led0pwmval=900;i--;LC
56、D_ShowString(60,190,"DEWATERING ");delay_ms(100);LED1=!LED1;}i=100; //脫水1000</p><p> while(m){delay_ms(10);LED1=!LED1;m--;LCD_ShowString(60,190,"WATER IN ");}m=1000;dir=1;LED0_PWM_V
57、AL=led0pwmval=0;</p><p><b> while(n)</b></p><p><b> { </b></p><p> LCD_ShowString(60,190,"WASHING TIME");</p><p> delay_ms(10);
58、</p><p> if(dir){led0pwmval++;led0pwmval++;led0pwmval++;}</p><p> else {led0pwmval--;led0pwmval--;led0pwmval--;}</p><p> if(led0pwmval>700)dir=0;</p><p> if(le
59、d0pwmval==0)dir=1; </p><p> LED0_PWM_VAL=led0pwmval;</p><p><b> n--;</b></p><p><b> }n=2330;</b></p><p> //while(i){delay_ms(10);LED1=!LED1
60、;i--;}i=100;</p><p> //while(u){delay_ms(10);LED0=!LED0;LED0_PWM_VAL=led0pwmval=100;u--;}u=200;</p><p> while(i){delay_ms(10);LED0=!LED0;LED0_PWM_VAL=900;i--;LCD_ShowString(60,190,"DEWATE
61、RING ");delay_ms(100);LED1=!LED1;}i=100;</p><p> while(i){delay_ms(10);LED1=!LED1;i--;}i=100;dir=1;</p><p> LED0_PWM_VAL=0;</p><p> LCD_ShowString(60,190,"FINISHED
62、");</p><p><b> break;</b></p><p><b> case 2:</b></p><p><b> while(1)</b></p><p><b> {</b></p><p>
63、; t=KEY_Scan();//得到鍵值</p><p><b> if(t)</b></p><p> { </p><p><b> switch(t)</b></p><p><b> { </b></p><p&g
64、t;<b> case 1: </b></p><p> LCD_ShowString(60,120,"HANDLE MODEL");</p><p> LCD_ShowString(60,140,"......");</p><p><b> while(1)</b>&l
65、t;/p><p><b> {</b></p><p> if(Remote_Rdy)</p><p><b> {</b></p><p> key=Remote_Process(); </p><p> switch(key)</p><p
66、><b> {</b></p><p><b> case 104:</b></p><p> while(i){delay_ms(200);LED1=!LED1;LED0=!LED0;LED0_PWM_VAL=900;LCD_ShowString(60,190,"DEWATERING ");}</p&g
67、t;<p> LCD_ShowString(60,190,"FINISHED ");break;</p><p><b> case 152:</b></p><p> dir=1;LED0_PWM_VAL=led0pwmval=0;</p><p> LCD_ShowString(60,190,
68、"WASHING TIME ");</p><p><b> while(m)</b></p><p><b> { </b></p><p> delay_ms(10); </p><p> if(dir){led0pwmval++;led0pwmval++;le
69、d0pwmval++;}</p><p> else {led0pwmval--;led0pwmval--;led0pwmval--;}</p><p> if(led0pwmval>700)dir=0;</p><p> if(led0pwmval==0)dir=1; </p><p> LED0_PWM_VAL=led0p
70、wmval;</p><p><b> m--;</b></p><p> }m=1000;LED0_PWM_VAL=0;</p><p> LCD_ShowString(60,190,"FINISHED ");</p><p><b> break;</b><
71、;/p><p><b> case 176:</b></p><p> LCD_ShowString(60,190,"DEWATERING ");</p><p> LED1=0;delay_ms(400000000);LED1=1;</p><p> LCD_ShowString(60,190
72、,"FINISHED ");break;</p><p><b> }</b></p><p> }else delay_ms(2);}break;</p><p> case 3: w++;if(w/2){while(i){LCD_ShowString(60,190,"DEWATERING &qu
73、ot;);delay_ms(50);LED1=!LED1;LED0=!LED0;LED0_PWM_VAL=900;}}</p><p> else {LED0=!LED0;LED0_PWM_VAL=0;}</p><p> LCD_ShowString(60,190,"FINISHED "); break;</p><p> case
74、 2:dir=1;LED0_PWM_VAL=led0pwmval=0;</p><p> LCD_ShowString(60,120,"WASHING TIME ");</p><p> LCD_ShowString(60,140,"......");</p><p><b> while(n)</b
75、></p><p><b> { </b></p><p> delay_ms(10); </p><p> if(dir){led0pwmval++;led0pwmval++;led0pwmval++;}</p><p> else {led0pwmval--;led0pwmval--;led0pwm
76、val--;}</p><p> if(led0pwmval>700)dir=0;</p><p> if(led0pwmval==0)dir=1;</p><p> LED0_PWM_VAL=led0pwmval;</p><p><b> n--;</b></p><p>
77、}n=2330;LED0_PWM_VAL=0;LCD_ShowString(60,190,"FINISHED ");</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p
78、> case 3:</p><p> LCD_ShowString(60,120,"ECONOMICAL MODEL");</p><p> LCD_ShowString(60,140,"......");</p><p> while(p){delay_ms(10);LED1=!LED1;p--;LCD
79、_ShowString(60,190,"WATER IN ");}p=500;dir=1;LED0_PWM_VAL=led0pwmval=0;</p><p><b> while(m)</b></p><p><b> { </b></p><p> LCD_ShowString(60,
80、190,"WASHING TIME");</p><p> delay_ms(10); </p><p> if(dir){led0pwmval++;led0pwmval++;led0pwmval++;}</p><p> else {led0pwmval--;led0pwmval--;led0pwmval--;}</p>
81、<p> if(led0pwmval>400)dir=0;</p><p> if(led0pwmval==0)dir=1;</p><p> LED0_PWM_VAL=led0pwmval;</p><p><b> m--;</b></p><p><b> }m=1000;&l
82、t;/b></p><p> //while(i){delay_ms(10);LED1=!LED1;i--;}i=100;LED0=!LED0;</p><p> while(i){delay_ms(10);LED0_PWM_VAL=900;i--;LCD_ShowString(60,190,"DEWATERING ");delay_ms(100);LED
83、1=!LED1;}i=100;</p><p> while(i){delay_ms(10);LED1=!LED1;i--;}i=100;</p><p> LED0_PWM_VAL=0;LCD_ShowString(60,190,"FINISHED ");</p><p><b> break;</b><
84、/p><p> //else delay_ms(10);</p><p><b> }</b></p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p
85、><p><b> 第四章 結(jié)束語</b></p><p> 本設(shè)計特點、存在的問題及改進意見:</p><p> 在進行本設(shè)計時,充分利用mini開發(fā)板已有資源,對按鍵等硬件進行復(fù)用,極大地發(fā)回來已有器件的功用.但因為為了更好觀察電機轉(zhuǎn)動情況,所以選用的是減速電機,所以在脫水的時候顯得速度不夠</p><p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- plc全自動洗衣機課程設(shè)計---全自動洗衣機的plc控制
- plc自動洗衣機畢業(yè)設(shè)計--全自動洗衣機梯形圖控制程序的設(shè)計與調(diào)試
- 全自動洗衣機課程設(shè)計
- 全自動洗衣機課程設(shè)計
- 全自動洗衣機課程設(shè)計
- 全自動洗衣機plc控制課程設(shè)計
- 全自動洗衣機plc控制課程設(shè)計
- plc課程設(shè)計——全自動洗衣機
- plc課程設(shè)計--全自動洗衣機
- plc課程設(shè)計——全自動洗衣機
- 全自動洗衣機plc課程設(shè)計
- plc全自動洗衣機課程設(shè)計
- plc控制的全自動洗衣機課程設(shè)計
- 課程設(shè)計---全自動洗衣機的plc控制
- 全自動洗衣機的plc控制課程設(shè)計
- 全自動洗衣機plc課程設(shè)計
- plc課程設(shè)計---全自動洗衣機plc控制
- plc課程設(shè)計--全自動洗衣機plc控制
- plc課程設(shè)計全自動洗衣機
- plc課程設(shè)計--全自動洗衣機
評論
0/150
提交評論