智能自动豆浆机设计报告

机电工程系 机电创意小组

智能豆浆机的设计

系 部 名 称:

学 生 姓 名:

专 业:

班 级:指 导 教 师: 机电工程系 刘鹏浩、刘鹏慧、李乔 机械制造及其自动化 1102

王新海

设计思路:

由于以前的豆浆机,磨浆要过滤豆渣,豆浆熬煮也要自己动手,还要特别注意豆浆溢锅的问题,程序繁琐麻烦,给人们带来不便,针对这些情况拟定开发家用豆浆机全自动控制电路装置。

家用豆浆机全自动控制装置是在单片机的程序控制下进行工作的。打浆时,插上电源插头,接通电源, 直接按“启动”键,控制电路控制豆浆机工作。先给黄豆加热,并由传感器检测温度,当温度达到80度左右时,停止加热。启动磨浆电机开始磨浆,运转20秒后停止转运,间歇10秒后再启动打浆电机,如此循环进行打浆6次或者4次。磨浆完后,开始对豆浆加热,豆浆温度达到一定值时,豆浆上溢。豆浆加工自动进入防溢延煮程序,豆浆加工完成后发出声光报警信号。

关键词:豆浆机,控制系统,全自动, 传感器。

Abstract

一、全自动豆浆机的工作原理

用STC12C5A60S2单板设计一款全自动豆浆机,豆浆机的工作原理如下: 先给电路上电,按下启动键开始加热;加热到80°C 开始打浆(打15秒,停15秒,共4次),磨浆完后,开始对豆浆加热,豆浆温度达到一定值时,豆浆上溢。豆浆加工自动进入防溢延煮程序,豆浆加工完成后发出声光报警信号。

本设计原理如图1所示

控制系统首先通过电源对系统供电,其中温度传感器、防溢电路、放干烧电路、按键、均是输入部分,声光报警、显示屏、电机、加热电路均是输出部分。

二、 方案设计

方案1:此方案由单片机、加热电路、温度检测电路、打浆电路、报警电路、显示电路组成。其工作原理是先加热,加热到一定温度后,开始打浆,打浆完后,打浆停止,又开始加热即煮沸后,立即停机,报警提示。

表 2.1 方案2:此方案由单片机、温度检测电路、加热电路、沸腾检测电路、打浆电路、报警电路、显示电路等组成。其工作原理是豆浆机加电后直接按“启动”键,控制电路控制豆浆机进行加热,当温度达到80度左右时,停止加热,开始打浆;打浆电机按间歇方式打浆:运转15秒后停止转运,间歇15秒后再启动打浆电机,如此循环进行打浆4次。打浆结束后开始对豆浆加热,豆浆温度达到一定值时,豆浆上溢。当豆浆沫要溢出时,停止加热,间歇20秒后再开始加热,如此循环4次,豆浆加工完成后发出声光信号。

表 2 .2 3、方案论证

方案一如图1.1所示,由单片机、温度检测电路、打浆电路、加热电路、报警电路等组成。工作过程是,接上电源,按下“功能键”,开始加热,加热到一定温度后,开始打浆,打浆浆结束后, 又加热直到豆浆沸腾煮熟,停止

加热,发出报警声,提示豆浆已做好。其缺点是:粉碎后煮浆时间过长所易造成的糊锅现象。

方案二如图1.2所示, 由单片机、温度检测电路、防干烧电路电路、防溢电路、打浆电路、加热电路、报警电路等组成。工作过程是,接上电源,蜂鸣器长鸣一声,提示已接通电源,指示灯绿色LED 亮,处于待命状态。按下全自动启动键,开始加热,温度达到80度时,停止加热;搅拌马达运转,将黄豆粉碎,豆浆过滤,然后马达停转,又开始加热,直到豆浆沸腾煮熟,停止加热,发出报警声,提示豆浆已做好。进行论证后, 我选择第二方案。其原因是:间歇打浆方式可以提高工作效率;缩短粉碎后加热至豆浆沸腾时间,防止粉碎后煮浆时间过长所易造成的糊锅现象。

三、硬件电路设计:

1、单片机的选用:

STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051, 但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。 单片机简介:

1 .增强型8051 CPU,1T ,单时钟/机器周期,指令代码完全兼容传统8051 2 .工作电压:STC12C5A60S2系列工作电压:5.5V- 3.3V(5V 单片机)STC12LE5A60S2系列工作电压:3.6V- 2.2V(3V 单片机) 3. 工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz

4. 用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节......

5. 片上集成1280字节RAM

6. 通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口) 可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏 每个I/O口驱动能力均可达到20mA ,但整个芯片最大不要超过55mA

7. 时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到

+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟 常温下内部R/C振荡器频率为:5.0V 单片机为:11MHz ~15.5MHz 3.3V单片机为: 8MHz~12MHz 精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准

8. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟

9.A/D转换, 10位精度ADC ,共8路,转换速度可达250K/S(每秒钟25万次) 10.工作温度范围:-40 - +85℃(工业级) / 0 - 75℃(商业级)21. 封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU, 三线通信,还多了串口。 引脚图:

2、温度检测电路的设计

当豆浆机正常工作时,需要先加热到80℃左右的温度,然后停止加热继续下一步的工作,这就需要一个温度检测电路,我设计的温度检测电路由一个电

位器来代替,通过单片机接口的AD 转换功能,通过调节电位器的阻值来模拟豆浆机温度的变化,当电位器的阻值达到一定阻值时,豆浆机停止加热,进行下一步工作。

3、加热和打浆电路的设计:

加热电路的作用是通过加热管把磨成粉末的黄豆煮熟;打浆电路的作用是通过电机把黄豆搅拌成粉沫。 单片机输出电流经三极管放大,来驱动继电器必合,使加热管发热把豆浆煮熟。同理,继电器闭合使电机运转把黄豆搅碎。加热及打浆电路的工作原理如图1所示,加热及磨浆电路由继电器RL1、RL2,三极管Q1、Q2,电阻R14、R15以及二极管Dl 、D2,单片机AT89C51。当单片机工作时,赋给Pl.l 一个低电平,使三极管Q2饱和导通,电流流过继电器RL2,使触点闭合,于是加热管通电开始对水加热,当温度达到80度时,温度信号(电位器)传给单片机,单片机检测到这个信号后,使P1.1脚变为高电平,三极管Q2截止,继电器触点断开,电阻停止加热。加热结束后,单片机P1.0脚变为低电平,使三极管RL1饱和导通,从而让继电器触点闭合,于是电机通电开始打浆,在系统程序得控制下,电机进行打浆。电机运转20秒或者15秒后,单片机P1.0脚变为高电平,使三极管Q1截止,继电器触点断开,电机停止打浆,问歇15秒后,单片机P1.0脚又恢复为低电平,从而继续驱动电机工作,如此循环4次后打浆结束。

热敏电阻一般有一个误差范围,用来规定样品之间的一致性。根据使用的材料不同,误差值通常在1%至10%之间。有些热敏电阻设计成应用时可以互换,用于不能进行现场调节的场合,例如一台仪器,用户或现场工程师只能更换热敏电阻而无法进行校准,这种热敏电阻比普通的精度要高很多,价格也要贵得多。

4、屏幕显示电路的设计:

显示屏的作用是显示当前豆浆机的工作状态,将LCD 显示屏按照图2的接法和单片机连接起来。

5、报警电路的设计:

报警电路的作州是通过蜂呜器发出声音信号,红色LED 点亮提醒豆浆已经煮好了。通过事先编写的程序,在单片机的控制下,系统开始工作,当加热完成后,单片机P1.4、P1.5脚自动输出一个高低平,使蜂鸣器、发光二极管通电导通,于是蜂鸣器发出报警,红色LED 点亮提醒豆浆加热

6、电源电路的设计:

7、防干烧及防溢出电路的设计:

防干烧及防溢出电路的作用是以传感器作为信息采集系统的前端单元来

控制自动豆浆机缺水时干烧及沸腾溢出等问题。这单采用探针作为传感器来

检测水位及沸腾溢出,然后通过比较器输出高低电平,这样就可以通过单片机检测比较器输出电平的高低来检测水位及沸腾时的溢出状态。

水位检测及沸腾溢出电路的原理如图4.13所示,K1,K2分别是水位检测传感器和沸腾溢出传感器,为了减少成本,这单采用探针来代替这两个传感器,使用中将接控制电路的公共点“地”,探针分别通过传输。单片机的P3.2,P1.3端连接。正常工作时,Kl 被水淹没,它和地之问的电阻较小,与R13共同对+5V分压,U+得到比U-低的电平,比较器输出低电平。缺水时,Kl 露出水面,它的电阻很大,R13共同对+5V分压,U+得到比U-高的电压,比较器输出高电平,通过非门后输出低电平产生下降沿。用软件检测比较器的电平变化,便知是否缺水

用同样的方法检测豆浆是否沸腾溢出。豆浆沸腾之前,电极K2远离水而,它和地之间的电阻很大,与R9共同对+5V分压,U+得到比U-高的电压,比较器输出高电平。豆浆沸腾时,泡沫淹没K2,电阻小,与R14共同对+5V分压,U+得到比U-低的电压,比较器输出低电平。用软件检测比较器的输出电平,便知豆浆是否沸腾溢出。。

三、 软件设计

豆浆机控制系统的流程图:

程序:

#include sbit key =P2^0;//全自动开关sbit LED1=P2^1;//加热豆浆 sbit LED=P2^2;// sbit BEEP =P2^3;//蜂鸣

sbit M =P2^4;//搅拌豆浆 sbit jre=P2^5;//加热豆浆

#include //51基本运算(包括_nop_空函数?

typedef unsigned char uint8; // 无符号8位整型变量 //

/********************************************************************************************

// 引脚定义 // (使用者根据实际更改)

/********************************************************************************************/ #define 线

sbit LCM2402_RS = P3 ^ 2;

// 定义LCM2402的RS 控制线 // 定义LCM2402的RW 控制线 // 定义LCM2402的E 控制线 // 定义LCM2402的测忙线(与

LCM2402_DB0_DB7

P1

// 定义LCM2402的数据总

sbit LCM2402_RW = P3 ^ 3; sbit LCM2402_E = P3 ^ 4; sbit LCM2402_Busy = P1 ^ 7; LCM2402_DB0_DB7关联) data unsigned char

TIME_DD,TIME_MO,TIME_YY,TIME_WW,TIME_HH,TIME_MM,TIME_SS;//设置日、月、年、周、时、分、秒和温度存放区

data bit DAY_BIT = 0;//天数增加标志位(用于日期进位的启动) data unsigned char DIS_BIT = 0; //多种信息的切换显示

data unsigned char cou = 0; // 软计数器, 对10ms 时基信号累加到1s /********************************************************************************************

// 定义LCM2402指令集 // (详细请见技术手册)

/********************************************************************************************/ #define

CMD_clear

0x01 // 清除屏幕

#define #define 向左写 #define 向右写 #define 标闪烁 #define 标闪烁 #define 标闪烁 #define 标闪烁 #define #define 行) #define #define 行) #define 行) #define 行)

CMD_back CMD_dec1

0x02 // DDRAM回零位

0x04 // 读入后AC (指针)减1,

CMD_add1 0x06 // 读入后AC (指针)加1,

CMD_dis_gb1 0x0f // 开显示_开光标_开光

CMD_dis_gb2 0x0e // 开显示_开光标_关光

CMD_dis_gb3 0x0c // 开显示_关光标_关光

CMD_OFF_dis 0x08 // 关显示_关光标_关光

CMD_set82 CMD_set81

0x38 // 8位总线_2行显示 0x30 // 8位总线_1行显示(上边

CMD_set42 CMD_set41

0x28 // 4位总线_2行显示 0x20 // 4位总线_1行显示(上边

lin_1 0x80 // 4位总线_1行显示(上边

lin_2 0xc0 // 4位总线_1行显示(上边

/********************************************************************************************* 函数名:毫秒级CPU 延时函数 调 用:DELAY_MS (?);

参 数:1~65535(参数不可为0) 返回值:无

结 果:占用CPU 方式延时与参数数值相同的毫秒时间

备 注:应用于1T 单片机时i

/*********************************************************************************************/ void DELAY_MS (unsigned int a){ }

/*********************************************************************************************/

/********************************************************************************************

// 读LCM 忙程序 [底层协议] // (所有底层协议都无需关注)

// LCM2402测忙,若LCM2402处于忙状态,本函数将等待至非忙状态 // /********************************************************************************************/ void LCM2402_TestBusy(void){ LCM2402_DB0_DB7 = 0xff; LCM2402_RS = 0; LCM2402_RW = 1; LCM2402_E = 1; while(LCM2402_Busy); LCM2402_E = 0; }

/******************************************************************************************** // 写指令程序 //

// 向LCM2402写命令 本函数需要1个指令集的入口参数 //

/********************************************************************************************/

void LCM2402_WriteCMD(uint8 LCM2402_command) { LCM2402_TestBusy();

//等待LCM 不忙

//

//设备读状态

unsigned int i; while( --a != 0){ }

for(i = 0; i

LCM2402_RS = 0; LCM2402_RW = 0;

LCM2402_DB0_DB7 = (LCM2402_command/16)

LCM2402_DB0_DB7 = (LCM2402_command%16)

/******************************************************************************************** // 写数据程序 // // 向LCM2402写数据 //

/********************************************************************************************/

void LCM2402_WriteData(uint8 LCM2402_data){ LCM2402_TestBusy(); LCM2402_RS = 1; LCM2402_RW = 0;

LCM2402_DB0_DB7 = (LCM2402_data/16)

LCM2402_DB0_DB7 = (LCM2402_data%16)

/********************************************************************************************

// 打印字符串程序 // (本函数调用指针函数) // 向LCM 发送一个字符串, 长度48字符之内 // 第一行位置 0x00~0x17 第二行位置 0x40~0x57

// 应用举例:print(0x80,"doyoung.net"); //在第一行第一位处从左向右打印doyoung.net 字符串

/********************************************************************************************/ void print(uint8 a,uint8 *str){ }

/******************************************************************************************** // 打印单字符程序 //

// 第一行位置 0x00~0x17 第二行位置 0x40~0x57 // 向LCM 发送一个字符, 以十六进制(0x00)表示

// 应用举例:print(0xc0,0x30); //在第二行第一位处打印字符“0”

/********************************************************************************************/ void print2(uint8 a,uint8 t){ }

/******************************************************************************************** // 定义小汉字 //

// 可写入8个自字义字符,写入后可用其CGRAM 代码直接提取显示。 // 字符定义方法请参考技术手册

/********************************************************************************************/ uint8 code Xword[]={

0xff,0x00,0x1f,0x11,0x1f,0x11,0xff,0x00, //℃,代码 0x00 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00, //一,代码 0x01 0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, //二,代码 0x02

LCM2402_WriteCMD(a | 0x80); LCM2402_WriteData(t); LCM2402_WriteCMD(a | 0x80); while(*str != '\0'){ } *str = 0;

LCM2402_WriteData(*str++);

0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, //三,代码 0x03 0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, //四,代码 0x04 0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, //五,代码 0x05 0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, //六,代码 0x06 0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00, //日,代码 0x07 };

void CgramWrite(void) { // 装入CGRAM // uint8 i;

LCM2402_WriteCMD(0x06); LCM2402_WriteCMD(0x40);

// CGRAM地址自动加1 // CGRAM地址设为00处

for(i=0;i

/********************************************************************************************

// LCM2402初始化 //(使用者可自定义,加 * 号程序行必须保留但可修改) /********************************************************************************************/ void LCM2402_Init(void){

LCM2402_WriteCMD(CMD_set42); //* 显示模式设置:显示2行,每个字符为5*7个像素

LCM2402_WriteCMD(CMD_set42); //* 显示模式设置:显示2行,每个字符为5*7个像素

LCM2402_WriteCMD(CMD_clear); // 显示清屏 LCM2402_WriteCMD(CMD_back); 位置

LCM2402_WriteCMD(CMD_add1); 光标右移

LCM2402_WriteCMD(CMD_dis_gb3); // 显示开及光标设置:显示开,光标开,闪烁开

// 显示光标移动设置:文字不动,//* 数据指针指向第1行第1个字符

LCM2402_WriteData(Xword[i]);// 按数组写入数据

}

CgramWrite(); // 向CGRAM 写入自定义字符

/********************************************************************************************/ //

以上是LCM2402驱动程序

//

/*********************************************************************************************//********************************************************************************************* 函数名:10位A/D转换初始化函数 调 用:Read_init (?);

参 数:输入的端口(0000 0XXX 其中XXX 是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7) 返回值:无

结 果:开启ADC 功能并设置ADC 的输入端口

备 注:使用ADC 功能时需要将对应的IO 接口设置为高阻输入方式(例如:P1M1 = 0x01;)

/**********************************************************************************************/ void Read_init (unsigned char CHA){

unsigned char AD_FIN=0; //存储A/D转换标志

CHA &= 0x07; //选择ADC 的8个接口中的一个(0000 0111 清0高5位)

ADC_CONTR = 0x40; 度,请根据数据手册设置) _nop_();

ADC_CONTR |= CHA; //选择A/D当前通道 _nop_();

ADC_CONTR |= 0x80; //启动A/D电源

DELAY_MS(1); //使输入电压达到稳定(1ms 即可) }

/********************************************************************

//ADC转换的速度(0XX0 0000 其中XX 控制速

/********************************************************************************************* 函数名:10位A/D转换函数 调 用:? = ADC_Read(); 参 数:无

返回值:10位ADC 数据高(从0到1023(十进制)) 结 果:读出指定ADC 接口的A/D转换值,并返回数值

备 注:适用于STC12C5A60S2系列单片机(必须使用STC12C5A60S2.h 头文件)

/**********************************************************************************************/ unsigned int ADC_Read (void){

unsigned char AD_FIN=0; //存储A/D转换标志

ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1) _nop_(); _nop_(); _nop_(); _nop_();

while (AD_FIN ==0){ //等待A/D转换结束

AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否 }

ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,

return (ADC_RES*4+ADC_RESL);//返回A/D转换结果(10位ADC 数据高8位在ADC_RES中,低2位在ADC_RESL中) }

/**********************************************************************************************/

/********************************************************************

// 测试用函数 // void main (void){ unsigned int m; unsigned char i=0;

//init();//初始化 LCM2402_Init();//LCM2402初始化

while(1){

print(0x00," huan ying"); print(0x40," shi yong");LED=0; BEEP=0;

DELAY_MS (2000); LED=1; BEEP=1;

DELAY_MS (1000);

while(key==1);

print(0x00," jia re"); print(0x40," ");

LED1=0;

while(m!=83){ //主线程//

//RealTime_Display();

P1M1 = 0x01;//

Read_init (0);

m = ADC_Read ();

print2(0x40,m/1000+0x30);// print2(0x41,(m%1000)/100+0x30);// print2(0x42,(m%100)/10+0x30);// print2(0x43,m%10+0x30);// }

LED=1;

print(0x00," kai shi"); print(0x40," Da Jiang");

for(i=0;i

DELAY_MS (2000);

M=1; LED1=0;

DELAY_MS (2000); LED1=1; } }

LED1=0;

DELAY_MS(3000);

}

LED1=1;

print(0x40," yi shu "); LED=0;

DELAY_MS (1000); LED=1; BEEP=1;

print(0x00," dou jiang");

BEEP=0;

参考文献

[l]王千. 使用电子电路大全[M].电子-T 业m 版社,2001,pl01:

[2]何立民. 单片机心用技术选编[M].北京:北京航空大学出版社,1998:

[3]李华.MCS-51系列单片机使用接口技术[M].北京航空航天大学出版社,1993:

[4]彭为. 单片机典型系统设计实例精讲[M].北京:电jJ ,T 业出版礼,2006:

[5]潘永雄. 新编单片机原理及应用[M].两安:两安电j ,科技大学出版社,2003:

[6]朱运利. 单片机技术应用. 北京:机械工业出版社, 2005年1月第一版.

[7]张大彪. 电子技能与实训. 北京:电子工业出版社, 2004年7月.

[8]韩全力. 赵德申. 微机控制技术及应用. 北京:机械工业出版社, 2004年1月第一版.

[9]阎 石. 数字电子电路. 北京:中央广播电视大学出版社, 1993.

[10]张毅坤. 陈善久,龚雪红. 单片微型计算机原理应用. 西安:西安电子科技大学出版社, 2003.

[11]田 良. 黄正瑾,陈建元. 综合电子设计与实践. 南京:东南大学出版社.

[12]杨素行. 模拟电子电路. 北京:中央广播电视大学出版社, 1994.

[13]康平光. 电子技术基础. 北京:高等教育出版社, 2003.

[14]李 华.MCS-51单片机接口技术及应用. 北京:北京航天航空大学出版社.

[15]王兆安、刘建军主编. 电力电子技术.5版. 北京. 机械工程出版社.2009

[16]张友汉主编. 电子线路设计应用手册.1版. 福建. 科学技术出版社.2000

[17]汤光华、宋涛主编. 电子技术.1版. 北京. 化学工业出版社2005

[18]邱世安主编. 机电一体化技术.1版. 西安. 电子科技大学出版社2004

[19]何希才编著. 常用集成电路应用实例. 1版. 北京. 电子工业出版社. 2007


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn