基于某STM32自动洗衣机地课程设计报告材料.docx
- 文档编号:27785190
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:20
- 大小:2.03MB
基于某STM32自动洗衣机地课程设计报告材料.docx
《基于某STM32自动洗衣机地课程设计报告材料.docx》由会员分享,可在线阅读,更多相关《基于某STM32自动洗衣机地课程设计报告材料.docx(20页珍藏版)》请在冰豆网上搜索。
基于某STM32自动洗衣机地课程设计报告材料
《嵌入式系统原理》课程设计报告
题目
学院(部)
专业
班级
学生
学号
指导教师(签字)
题目……………………………………………………………………3
摘要……………………………………………………………………3
关键字…………………………………………………………………3
设计要求………………………………………………………………3
第一章系统概述……………………………………………………3
1总框图设计……………………………………………………………4
2实物图………………………………………………………………4
第二章单元电路设计与分析………………………………………5
1显示部分……………………………………………………………5
2PWM输出部分………………………………………………………7
3按键控制部分…………………………………………………………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总框图设计
根据设计要求,我们把设计主要分为四个模块:
显示模块,直流减速电机转动模块,操控模块,安全响应模块。
其原理图如下:
实物图:
系统简介:
打开电源之后,电源指示灯亮,屏幕显示:
(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.5ms
elseif(res>=10&&res<50)RODATA=0;//500us
if(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);LED1=!
LED1;p--;LCD_ShowString(60,190,"WATERIN");}p=500;dir=1;LED0_PWM_VAL=led0pwmval=0;
while(m)
{
LCD_ShowString(60,190,"WASHINGTIME");
delay_ms(10);
if(dir){led0pwmval++;led0pwmval++;led0pwmval++;}
else{led0pwmval--;led0pwmval--;led0pwmval--;}
if(led0pwmval>400)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval;
m--;
}m=1000;
//while(i){delay_ms(10);LED1=!
LED1;i--;}i=100;LED0=!
LED0;
while(i){delay_ms(10);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;
LED0_PWM_VAL=0;LCD_ShowString(60,190,"FINISHED");
break;
//elsedelay_ms(10);
}
}
}
}
第四章结束语
本设计特点、存在的问题及改进意见:
在进行本设计时,充分利用mini开发板已有资源,对按键等硬件进行复用,极发回来已有器件的功用.但因为为了更好观察电机转动情况,所以选用的是减速电机,所以在脱水的时候显得速度不够
参考文献:
书瑞Cortex-M3嵌入式处理器原理与应用电子工业
.arm.
元器件明细表
序号
名称
型号参数
数量
备注
1
Mini开发板
74LS161N
1
2
减速直流电机
标准型
1
3
排针
标准型
1
4
连接导线
普通型
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 自动 洗衣机 课程设计 报告 材料