豆浆机控制电路工作过程大致是:上电-水位检测-水位合适开始加热-加热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; } } 来源: 工控PLC博客_工控人家园_电工论坛_电工学习网_防爆电气_煤矿用电器论坛 (www.) (微信/QQ:503660666) 欢迎分享本文,转载请保留出处!
|
|