基于.STM32自动洗衣机的课程设计的报告报告_第1页
基于.STM32自动洗衣机的课程设计的报告报告_第2页
基于.STM32自动洗衣机的课程设计的报告报告_第3页
基于.STM32自动洗衣机的课程设计的报告报告_第4页
基于.STM32自动洗衣机的课程设计的报告报告_第5页
已阅读5页,还剩9页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...wd......wd......wd...?嵌入式系统原理?课程设计报告题目学院〔部〕专业班级学生姓名学号指导教师〔签字〕目录题目……………………3摘要……………………3关键字…………………3设计要求………………3第一章系统概述……………………31总框图设计……………42实物图………………4第二章单元电路设计与分析………51显示局部……………52PWM输出局部………73按键控制局部…………8第三章主体代码………12第四章完毕语………18全自动洗衣机控制程序设计摘要:STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。本次使用的是STM32F103“增强型〞系列。增强型系列时钟频率到达72MHz,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。工作原理:是通过改变输出方波的占空比使负载上的平均电流功率从0-100%变化,从而改变直流减速电机速度。利用脉宽调制(PWM)方式,实现调速,它的优点是电源的能量功率,能得到充分利用,电路的效率高。关键字:占空比PWM输出控制STM32电机人机交互设计概述及基本要求用单片机编程实现洗衣机的控制过程,要求:1具有进水洗涤脱水等功能。2程序可选择其中一个功能执行。3通过电机转动时间比例实现洗涤强度控制功能。4通过洗涤时间和冲洗次数实现标准和经济选择功能。系统概述1.1总框图设计根据设计要求,我们把设计主要分为四个模块:显示模块,直流减速电机转动模块,操控模块,安全响应模块。其原理图如下:显示局部显示局部STM32F103直流减速电机操控局部安全响应局部PWM输出信号按键信号高优先信号按键控制遥控器控制LED灯辅助LCD屏幕显示实物图:系统简介:翻开电源之后,电源指示灯亮,屏幕显示:(SMARTWASHINGMACHINE);此时,按下KEY0进入标准洗涤模式(CLASSICALMODEL),洗涤两遍.按下WK_UP进入经济型洗涤模式.按下KEY1进入手动选择模式(HANDLEMODEL),在此模式下,KEY0为选择遥控控制,遥控器上,3:进水(WATERIN),2:洗涤(WASHINGTIME),1,脱水(DEWATERING);同时,在手动控制中,也可以用按键操作:KEY1为洗涤;WK_UP为脱水.RESET为安全按钮,用于在高速脱水时的紧急停顿.全自动模式流程:LED1(绿灯)亮,显示进水(WATERIN),进水大约20秒;进水完毕后LED1熄灭,电机间歇转动(WASHINGTIME),显示洗涤;洗涤完毕后进展脱水,LED1闪烁且电机持续快速转动,显示脱水(DEWATERING);脱水完毕LED1熄灭,洗衣过程完毕(FINISHED),LED1短暂亮起后熄灭表示洗衣完毕,屏幕显示(FINISHED).经济型模式与标准模式比照:标准模式共洗涤两遍.进水量,洗涤时间,在洗涤时电机转动时间以及脱水时间都较长.经济型模式只洗涤一遍,进水量小于标准模式,占空比大于标准模式,脱水时间小于标准模式,从而实现经济型洗涤模式.第二章单元电路设计与分析显示局部:此时为手动模式下进展脱水操作经济型洗涤中的洗涤操作相关代码:u16POINT_COLOR=0x0000,BACK_COLOR=0xFFFF;u16DeviceCode; #ifLCD_FAST_IO==1//快速IO//写存放器函数voidLCD_WR_REG(u8data){ LCD_RS_CLR;//写地址 LCD_CS_CLR; DATAOUT(data); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET;}#else//正常IO//写存放器函数voidLCD_WR_REG(u8data){ LCD_RS=0;//写地址 LCD_CS=0; DATAOUT(data); LCD_WR=0; LCD_WR=1; LCD_CS=1;}voidLED_Init(void){ RCC->APB2ENR|=1<<2;//使能PORTA时钟 RCC->APB2ENR|=1<<5;//使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003;//PA8推挽输出 GPIOA->ODR|=1<<8;//PA8输出高 GPIOD->CRL&=0XFFFFF0FF; GPIOD->CRL|=0X00000300;//PD.2推挽输出 GPIOD->ODR|=1<<2;//PD.2输出高}PWM输出局部:相关代码:voidPWM_Init(u16arr,u16psc){ RCC->APB1ENR|=1<<1;//TIM3时钟使能 GPIOA->CRL&=0X0FFFFFFF;//PA7输出 GPIOA->CRL|=0XB0000000;//复用功能输出 GPIOA->ODR|=1<<7;//PA7上拉 TIM3->ARR=arr;//设定计数器自动重装值 TIM3->PSC=psc;//预分频器不分频 TIM3->CCMR1|=7<<12;//CH2PWM2模式 TIM3->CCMR1|=1<<11;//CH2预装载使能 TIM3->CCER|=1<<4;//OC2输出使能 TIM3->CR1=0x8000;//ARPE使能 TIM3->CR1|=0x01;//使能定时器3 }控制局部:红外遥控:按键:相关代码:voidEXTI1_IRQHandler(void){ u8res=0;u8OK=0;u8RODATA=0; while(1){if(RDATA)//有高脉冲出现{res=Pulse_Width_Check();//获得此次高脉冲宽度if(res==250)break;//非有用信号if(res>=200&&res<250)OK=1;//获得前导位(4.5ms)elseif(res>=85&&res<200)//按键次数加一(2ms){ Remote_Rdy=1;//承受到数据Remote_Cnt++;//按键次数增加break;}elseif(res>=50&&res<85)RODATA=1;//1.5mselseif(res>=10&&res<50)RODATA=0;//500usif(OK){Remote_Odr<<=1;Remote_Odr+=RODATA;Remote_Cnt=0;//按键次数清零}} } EXTI->PR=1<<1;//去除中断标志位}//处理红外键盘//返回相应的键值u8Remote_Process(void){u8t1,t2;t1=Remote_Odr>>24;//得到地址码t2=(Remote_Odr>>16)&0xff;//得到地址反码Remote_Rdy=0;//去除标记 if(t1==(u8)~t2&&t1==REMOTE_ID)//检验遥控识别码(ID)及地址{t1=Remote_Odr>>8;t2=Remote_Odr; if(t1==(u8)~t2)returnt1;//处理键值}return0;}voidKEY_Init(void){ RCC->APB2ENR|=1<<2;//使能PORTA时钟 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA->CRL|=0X00000008; GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入 GPIOA->CRH|=0X80800000; GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉 GPIOA->ODR|=1<<15; //PA15上拉}//注意此函数有响应优先级,KEY0>KEY1>KEY2!!u8KEY_Scan(void){ staticu8key_up=1;//按键按松开标志 JTAG_Set(JTAG_SWD_DISABLE); if(key_up&&(KEY0==0||KEY1==0||KEY2==1)) { delay_ms(10);//去抖动 key_up=0; if(KEY0==0) { JTAG_Set(SWD_ENABLE); return1; } elseif(KEY1==0) { JTAG_Set(SWD_ENABLE); return2; } elseif(KEY2==1) { JTAG_Set(SWD_ENABLE); return3; } }elseif(KEY0==1&&KEY1==1&&KEY2==0)key_up=1; JTAG_Set(SWD_ENABLE); return0;//无按键按下}主体代码intmain(void){ u8key; u8t=0;u8dir=0; intn=2630,m=1000,p=500,i=100,w=1; u16led0pwmval=0; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600);//串口1初始化 LCD_Init(); //初始化液晶 LED_Init();//LED初始化 Remote_Init(); //初始化红外接收 PWM_Init(900,0); //不分频。PWM频率=72000/900=8Khz KEY_Init();//初始化与按键连接的硬件接口 LED0_PWM_VAL=0; POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(30,70,"SMARTWASHINGMACHINE"); while(1) { t=KEY_Scan();//得到键值 if(t) { switch(t) { case1: LCD_ShowString(60,120,"CLASSICALMODEL"); LCD_ShowString(60,150,"......"); while(m){delay_ms(10);LED1=!LED1;m--;LCD_ShowString(60,190,"WATERIN");} m=1000;dir=1;LED0_PWM_VAL=led0pwmval=0; while(n) { LCD_ShowString(60,190,"WASHINGTIME"); delay_ms(10); if(dir){led0pwmval++;led0pwmval++;led0pwmval++;} else{led0pwmval--;led0pwmval--;led0pwmval--;} if(led0pwmval>700)dir=0; if(led0pwmval==0)dir=1; LED0_PWM_VAL=led0pwmval; n--; }n=2330; // 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--;LCD_ShowString(60,190,"DEWATERING");delay_ms(100);LED1=!LED1;}i=100; //脱水1000 while(m){delay_ms(10);LED1=!LED1;m--;LCD_ShowString(60,190,"WATERIN");}m=1000;dir=1;LED0_PWM_VAL=led0pwmval=0; while(n) { LCD_ShowString(60,190,"WASHINGTIME"); delay_ms(10); if(dir){led0pwmval++;led0pwmval++;led0pwmval++;} else{led0pwmval--;led0pwmval--;led0pwmval--;} if(led0pwmval>700)dir=0; if(led0pwmval==0)dir=1; LED0_PWM_VAL=led0pwmval; n--; }n=2330; //while(i){delay_ms(10);LED1=!LED1;i--;}i=100; //while(u){delay_ms(10);LED0=!LED0;LED0_PWM_VAL=led0pwmval=100;u--;}u=200; while(i){delay_ms(10);LED0=!LED0;LED0_PWM_VAL=900;i--;LCD_ShowString(60,190,"DEWATERING");delay_ms(100);LED1=!LED1;}i=100; while(i){delay_ms(10);LED1=!LED1;i--;}i=100;dir=1; LED0_PWM_VAL=0; LCD_ShowString(60,190,"FINISHED"); break; case2: while(1) { t=KEY_Scan();//得到键值 if(t) { switch(t) { case1: LCD_ShowString(60,120,"HANDLEMODEL"); LCD_ShowString(60,140,"......"); while(1) { if(Remote_Rdy) { key=Remote_Process(); switch(key) { case104: while(i){delay_ms(200);LED1=!LED1;LED0=!LED0;LED0_PWM_VAL=900;LCD_ShowString(60,190,"DEWATERING");} LCD_ShowString(60,190,"FINISHED");break; case152: dir=1;LED0_PWM_VAL=led0pwmval=0; LCD_ShowString(60,190,"WASHINGTIME"); while(m) { delay_ms(10); if(dir){led0pwmval++;led0pwmval++;led0pwmval++;} else{led0pwmval--;led0pwmval--;led0pwmval--;} if(led0pwmval>700)dir=0; if(led0pwmval==0)dir=1; LED0_PWM_VAL=led0pwmval; m--; }m=1000;LED0_PWM_VAL=0; LCD_ShowString(60,190,"FINISHED"); break; case176: LCD_ShowString(60,190,"DEWATERING"); LED1=0;delay_ms(400000000);LED1=1; LCD_ShowString(60,190,"FINISHED");break; } }elsedelay_ms(2);}break; case3:w++;if(w/2){while(i){LCD_ShowString(60,190,"DEWATERING");delay_ms(50);LED1=!LED1;LED0=!LED0;LED0_PWM_VAL=900;}} else{LED0=!LED0;LED0_PWM_VAL=0;} LCD_ShowString(60,190,"FINISHED");break; case2: dir=1;LED0_PWM_VAL=led0pwmval=0; LCD_ShowString(60,120,"WASHINGTIME"); LCD_ShowString(60,140,"......"); while(n) { delay_ms(10); if(dir){led0pwmval++;led0pwmval++;led0pwmval++;} else{led0pwmval--;led0pwmval--;led0pwmval--;} if(led0pwmval>700)dir=0; if(led0pwmval==0)dir=1; LED0_PWM_VAL=led0pwmval; n--; }n=2330;LED0_PWM_VAL=0;LCD_ShowString(60,190,"FINISHED"); } } } case3: LCD_ShowString(60,120,"ECONOMICALMODEL"); LCD_ShowString(60,140,"......"); while(p){delay_ms(10);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论