豆浆机控制电路工作过程大致是:上电-水位检测-水位合适开始加热-加热5分钟-开始打浆(打15秒,停15秒,共4次)-继续加热10分钟(溢出检测到时暂时停止加热)-完成全部工作。
电路见下图,单片机输入有水位检测,溢出检测,输出有电机控制、加热控制、工作指示、报警蜂鸣器控制。工作过程中指示灯闪烁,完成全部工作时常亮,蜂鸣器响。当水位检测失败时为防止干烧,停止加热和打浆,蜂鸣器报警。
水位检测和溢出检测的公共端是加热管的外壳,水位检测是温度探头外壳或电机外壳,溢出检测有专用电极。
用单片机设计的豆浆机控制电路的程序
//********************************************************************
//豆浆机控制器,工作过程:加热5分钟,打浆4次,(17秒打、19秒停),继续加热15分钟。
//在8位单片机P89LPC901上测试通过
//输入:液位
//输出:电机、加热器、指示灯、蜂鸣器
//编写日期:2008.10.04
//更新日期:2008.10.05
//********************************************************************
#include //单片机头文件
unsigned char data MOTS; //状态,
unsigned char data HETS; //状态
unsigned long data Num1; //计数1
unsigned int data Num2; //计数2
sbit LED=P0^4; //发光二极管
sbit BUZ=P0^5; //蜂鸣器
sbit MOT=P3^0; //搅拌机
sbit HET=P3^1; //加热器
sbit HIG=P1^5; //高位
sbit LOW=P1^2; //低位
//--------------------------------------------------------------------
//io_init:初始化IO子程序
//--------------------------------------------------------------------
void io_init(void)
{
P0M1=0x00; //P0推挽
P0M2=0x30;
P1M1=0xFF; //P1仅为输入
P1M2=0x00;
P3M1=0x00; //P3推挽
P3M2=0x03;
}
//-------------------------------------------------------------------
//TIMER_init:初始化定时器
//-------------------------------------------------------------------
void TIMER_init(void)
{
TMOD=0x11; //定时器0和1配置为模式1
TAMOD=0x00;
// ET0=1; //允许定时器0中断
TH1=0x6F; //10ms,根据波特率和单片机计算出
TL1=0xFE;
ET1=1; //允许定时器1中断
// TR1=1; //打开定时器1
}
//------------------------------------------------------------------
//main:主函数
//------------------------------------------------------------------
void main(void)
{
MOT=0;
HET=0;
MOTS=0;
HETS=0;
BUZ=1;
P1=0xFF;
io_init(); //端口初始化
TIMER_init();
EA=1;
while(LOW==1); //有水检测,防止干烧
LED=0;
if(HIG)
{
HETS=1; //水位不超,开始工作,LED闪
TR1=1;
}
while(1) //循环检测
{
if(LOW) //水烧干,停止工作,LED常亮
{
HETS=0;
MOTS=0;
LED=0;
TR1=0;
BUZ=0;
}
if(MOTS==1) MOT=1; //到打浆时间,电机工作
else MOT=0;
if(HETS==1 && HIG==1) HET=1; //加热时间,没有溢出就加热,有溢出停
else HET=0;
}
}
//-------------------------------------------------------------------
//Timer1Int:定时中断子程序,用于显示输出及按键延时计时,1ms
//-------------------------------------------------------------------
void Timer1Int(void) interrupt 3
{
TH1=0x6F; //10ms,根据波特率和单片机计算出
TL1=0xFE;
Num1++; //超时计数
Num2++; //超时计数
if(Num2>50) //闪烁,工作指示
{
LED=!LED;
Num2=0;
}
if((Num1>30000 && Num133600 && Num137200 && Num140800 && Num131800 && Num135400 && Num139000 && Num130100 && Num133700 && Num137300 && Num140900 && Num1
if(Num1>90000)
{
LED=0; //时间到15分钟,全部停止
HETS=0;
TR1=0;
BUZ=0;
}
}