家用电风扇控制逻辑电路设计.docx
《家用电风扇控制逻辑电路设计.docx》由会员分享,可在线阅读,更多相关《家用电风扇控制逻辑电路设计.docx(27页珍藏版)》请在冰豆网上搜索。
![家用电风扇控制逻辑电路设计.docx](https://file1.bdocx.com/fileroot1/2023-1/26/a8403bf6-5117-47f8-ac61-8cb1129dcd15/a8403bf6-5117-47f8-ac61-8cb1129dcd151.gif)
家用电风扇控制逻辑电路设计
电子工程学院课外学分设计报告
题目:
家用电风扇控制逻辑电路设计
姓名:
李健聪学号:
11111010118
专业:
电子信息工程实验室:
开放实验室
班级:
A1121
设计时间:
2013年12月1日——2013年12月7日
评定成绩:
审阅教师:
目录
摘要1
一、专业综合设计任务2
二、方案设计与论证3
2.1电风扇单元电路的设计3
2.1.1触发脉冲的形成3
2.1.2触发脉冲电路3
2.2电风扇单元电路的工作原理4
2.2.1风速的控制原理4
2.2.2风种的控制原理4
2.2.3电机运转控制原理5
2.2.4停止电路原理分析5
三、实现与测试6
四、分析与总结6
五、硬软件设计8
摘要
电风扇是我国家庭中最为普及的家用电器之一,以前的台式电风扇和落地式电风扇都是采用机械控制,主要控制风速和风向。
然而随着电子技术的发展,目前的家用电风扇大多采用电子控制线路取代了原来的机械控制器,使电扇的功能更强,操作也更简便。
本文比较全面的设计出了家用电风扇的控制电路,它包括家用电风扇的风速、风种和定时几种状态的控制。
把家用电风扇控制方便、简单化,使人们在使用过程中能更好的对电风扇操作。
关键词:
方式控制;触发脉冲;定时电路
一、专业综合设计任务
设计任务及要求:
用中小规模数字集成电路实现电风扇控制器的控制功能。
用三个键来实现“风速(弱、中、强)”、“风种(正常、自然、睡眠)”、“停止”的不同选择。
用六个发光二极管分别表示风速、风种的三种状态。
电风扇在停转状态时,只有按“风速”键才有效,按其余两键不响应。
分工:
一人尽心程序编译,一人负责查询资料记录并完成设计报告。
二、方案设计与论证
2.1电风扇单元电路的设计
2.1.1触发脉冲的形成
“风速”和“风种”状态锁存电路的输出信号状态的变化依靠各自的触发脉冲。
在“风速”状态的锁存电路中,可以利用“风速”按键(k1)所产生的脉冲信号作为触发脉冲;在“风种”状态锁存器的触发脉冲CP由“风种”(k2)、“风速”(k1)的信号和电风扇的工作状态信号(设ST为电风扇的工作状态,ST=0停,ST=1运转)三者组合而成。
当电风扇处于停止状态(ST=0)时,按(k2)无效,CP信号将保持低电平;只有按k1后,CP信号变成高电平,电风扇进入运转状态(ST=1)。
此后,CP不再受k1的控制,而是有k2控制,可得触发脉冲逻辑表达式:
CP=K1·ST¯+K2·ST。
(当k1输出的三个信号Q2、Q1、Q0全部为零时,电扇停转,ST=0;当三个输出信号Q2、Q1、Q0不全为零时,电扇运转,ST=1,从而可得电风扇工作状态ST逻辑表达式为:
ST=Q0+Q1+Q2)
最后得到触发脉冲CP的逻辑表达式:
CP=K1·Q2¯Q1¯Q0¯+K2·(Q0+Q1+Q2)
CP信号状态表
K2
K1
ST
CP
0
0
0
0
0
0
1
0
0
1
0
1
0
1
1
0
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
2.1.2触发脉冲电路
键K1按动后形成的脉冲信号作为“风速”状态锁存电路的触发信号。
键K1、K2及74LS00、74LS08构成“风种”状态锁存电路的触发信号CP。
电风扇停转时,ST=0,K1=0,与非门U2输出为高电平,U3输出为高电平,所以U4输出的CP信号变为低电平。
当按下K1后,U2输出为低电平,使U4输出CP信号变为高电平,并使触发器翻转,“风种”处于“正常”状态。
由于k1输出的上升沿脉冲,也使“风速”处于“弱”状态,电风扇开始运转,ST=1。
电风扇开始运转后,U2输出始终为高电平,这样使风种状态的触发脉冲CP与K2的状态相同。
每次按下K2并释放后,CP信号就会产生上升沿使风种的状态发生变化。
CP
2.2电风扇单元电路的工作原理
2.2.1风速的控制原理
电风扇处于停转状态时,所有指示灯不亮。
此时只有按“风速”键,电扇才会启动运转,其初始状态处于“弱”档,相对应的只是灯亮。
此时,按动“风速”键会产生触发脉冲可循环选择弱、中、强三种状态中的任意种状态。
“风速”的工作状态是由触发器来锁存状态,触发器输出1表示工作状态有效,0表示无效,当三个输出全部为0则表示停止状态。
设数字×××为Q2、Q1、Q0的输出信号,其转换图如下
“风速”转换图
2.2.2风种的控制原理
在“风种”的三种选择方式中,在正常位置时,风扇为连续运行;在自然和睡眠位置时,为间断运行方式。
电路中采用74LS151作为风种方式的控制器,由74LS175的三个输出信号选中74LS151的一种方式。
间断工作时,电路中用了一个8秒周期的时钟信号作为自然方式的间断控制;二分频后再作为睡眠方式的控制输入。
设数字×××为Q2、Q1、Q0的输出信号,其转换图如下
“风种”转换图
2.2.3电机运转控制原理
电风扇的转速通常是由电压来控制的,但是这里的弱、中、强三种转速,所以需要在电路里考虑三个输出端(弱中强)和控制外部电线路(如可控硅出发电路)。
这三个输出端与指示电风扇转速状态的三个端子不同,除了要控制电机分别按弱中强三种转速外,还必须能够控制电机连续运转或间断运转,以与“风种”不同选择方式相对应。
要是用1表示某档速度的选通,用0表示某档速度的关断,那么“风种”信号的输入就使得某档电机速度被连续或间断地选中。
例如风种选择“睡眠”,风速选择“弱”时,电机将运行在开8秒停8秒,表现在电机运转控制“弱”上就是出现间断的1和0的状态。
2.2.4停止电路原理分析
电路中选用上升沿触发器74LS151带有直接清零端,使清零端与“停止”键相连可实现停止的功能。
在电扇任意工作状态下,按“停止”键,会产生低电平输入到清零端,使触发器输出全部为低电平,电扇处于停止状态,所有指示灯熄灭。
三、实现与测试
我们用四个按键分别控制“风速”、“风种”、“定时”、“停止”,然后用步进电机当做风扇叶片,用数码管显示时间,用二极管显示风速的“强”、“中”、“弱”以及风种的“正常”、“自然”、“睡眠”。
我们用到的软件是Quartys,在对程序进行编译后可通过试验箱完成我们的设计。
四、分析与总结
这一段时间对家用电风扇逻辑电路的设计过程中,自己在查找参考资料的时候遇到了许多疑难问题,面对问题自己通过查找先前课堂笔记、同学的讨论及老师的指导解决了疑难,使课题设计能顺利的完成。
同时,在设计过程中,进一步加强了对电子的了解,复习了在大学期间学过的电子技术基础的知识,培养综合设计能力和实际动手能力,提高了综合应用电子解决问题的能力,相信这对我今后的工作有十分重要意义!
面对科技的不断发展和进步,相信在不久的将来电风扇的功能会更强,例如用红外线遥控控制、具有定时功能、智能控制等,甚至电子控制线路的电风扇会被取代。
参考文献
1. 康华光.电子技术基础数字部分(第五版)[M].北京:
高等教育出版社.2006
2. 彭介华.电子技术课程设计指导[M].北京:
高等教育出版社.2005
3. 谢自美.电子线路设计.实验.测试[M].武汉:
华中科技大学出版.2000
4. 赵伟军. Protel 99 SE 教程.北京:
邮电出版社.2004
5. 肖玲妮等.Protel 99 SE 印刷电路板设计教程[M].北京:
清华大学出版社.2003
五、硬软件设计
按键控制程序
modulecount(
clock,
key1,
key2,
key3,
key4,
hour_ge,
hour_shi,
minute_ge,
minute_shi,
second_shi,
second_ge,
state1,//调整位选择输出到display
flag,//当到达00:
00:
00时输出1停止信号到dian_ji
);
inputclock;
inputkey1;//选择
inputkey2;//加
inputkey3;//减
inputkey4;//确定
output[2:
0]state1;
outputflag;
output[3:
0]minute_ge;
output[3:
0]second_ge;
output[2:
0]minute_shi;
output[2:
0]second_shi;
output[3:
0]hour_ge;
output[2:
0]hour_shi;
//**************************
reg[4:
0]hour;//最大31
reg[5:
0]minute;
reg[5:
0]second;
reg[3:
0]minute_ge_out;
reg[3:
0]second_ge_out;
reg[2:
0]minute_shi_out;
reg[2:
0]second_shi_out;
reg[3:
0]hour_ge_out;
reg[2:
0]hour_shi_out;
regflag_q;
reg[2:
0]state1_out;
regflag_out;
//*****************************
always@(posedgeclock)
begin
reg[19:
0]count1;//消抖
reg[29:
0]count;//计数
reg[29:
0]count6;
if(key4==1'b0)//确认键
if(count1<50_0000)
begin
count1<=count1+1'd1;
if(count1==49_9999)
if(key4==1'b0)
begin
flag_q=~flag_q;
second<=59;//确认键按下后秒置数59,
flag_out<=0;//停止信号复位
end
end
if(key4==1'b1)count1<=20'd0;
//*****************************
if(flag_q==1'b1)//确定键按下后才开始倒计时
begin
count<=count+1'd1;
if(count==30'd50_00_0000)
begin
count<=30'd0;
if(second==6'd0)
begin
if((hour==0)&&(minute==0))
second<=0;
elsesecond<=59;
if(minute==4'd0)
begin
if(hour==0)
minute<=0;
elseminute<=59;
if(hour==0)
begin
flag_out<=1;//停止信号
hour<=0;
end
elsebeginhour<=hour-1;flag_out<=0;end
end
elseminute<=minute-1'b1;
end
elsesecond<=second-1'b1;
end
end
//*************************按键控制加减***************************************
if(state1==3'b001)//分钟加
begin
if(key2==1'b0)
begin
count6<=count6+1'b1;
if(count6==30'd100_00000)//
begin
count6<=30'd0;
if(key2==1'b0)
begin
minute<=minute+1'd1;
if(minute>7'd59)
minute<=0;
end
end
end
//***********************************************
elseif(key3==1'b0)//分钟减
begin
count6<=count6+1'b1;
if(count6==30'd100_00000)//10ms
begin
count6<=30'd0;
if(key3==1'b0)
begin
minute<=minute-1'd1;
if(minute==7'd0)
minute<=7'd59;
end
end
end
end
//*******************************
elseif(state1==3'b010)//小时加
begin
if(key2==1'b0)
begin
count6<=count6+1'b1;
if(count6==30'd10_00_0000)//12ms
begin
count6<=30'd0;
if(key2==1'b0)
begin
hour<=hour+1'd1;
if(hour>6'd23)
hour<=6'd0;
end
end
end
//*********************************
if(key3==1'b0)//小时减
begin
count6<=count6+1'b1;
if(count6==30'd100_00000)//10ms
begin
count6<=30'd0;
if(key3==1'b0)
begin
hour<=hour-1'd1;
if(hour==6'd0)
hour<=6'd23;
end
end
end
end
second_shi_out<=second/10;
second_ge_out<=second%10;
minute_shi_out<=minute/10;
minute_ge_out<=minute%10;
hour_shi_out<=hour/10;
hour_ge_out<=hour%10;
end
//********按键选择调整对象****************
always@(posedgeclock)
begin
reg[19:
0]count_x1;//消抖
if(key1==0)
begin
if(count_x1<50_0000)
begin
count_x1<=count_x1+1;
if(count_x1==49_9999)
begin
if(key1==0)
state1_out<=state1_out+1;
if(state1_out==2)state1_out<=0;
end
end
end
if(key1==1)count_x1<=0;
if(key4==0)state1_out<=0;//确认键按下
end
//******************************************************
assignsecond_ge=second_ge_out;
assignsecond_shi=second_shi_out;
assignminute_ge=minute_ge_out;
assignminute_shi=minute_shi_out;
assignhour_ge=hour_ge_out;
assignhour_shi=hour_shi_out;
assignstate1=state1_out;
assignflag=flag_out;
endmodule
电机程序
moduledian_ji(
clock,
key1,
key2,
key3,
moto_z,
moto_f,
led_s,//速度
led_m,//模式
flag,//模式输出
flag_stop,//倒计时时间到时,输入信号
);
inputclock;
inputflag_stop;
inputkey1;
inputkey2;
inputkey3;
output[1:
0]flag;
outputmoto_z;
outputmoto_f;
output[2:
0]led_s;
output[2:
0]led_m;
//******************
reg[29:
0]count1;
reg[29:
0]count2;//正常模式
reg[29:
0]count3=5_00000;//自然模式
reg[2:
0]led_s_r;
reg[2:
0]led_m_r;
regmoto_z_r;
regmoto_f_r;
reg[1:
0]flag2_out;
reg[2:
0]flag1;//风速(高,低,中)
//reg[1:
0]flag2;//模式(正常,自然,睡眠)
reg[2:
0]flag3;//自然风中的模式
//***************************************
always@(posedgeclock)
begin
reg[31:
0]count_x;
count_x<=count_x+1;
if(count_x==150_000000)//5秒
begin
flag3<=1;
count_x<=0;
end
elseflag3<=0;
end
//******************电机转动***************
always@(posedgeclock)
begin
count1<=count1+1;
if(count1moto_z_r<=0;
elseif(count1<500)
moto_z_r<=1'b1;
elsecount1<=0;
end
//********按键选择,高,中,低****************
always@(posedgeclock)
begin
reg[29:
0]count_x1;//消抖
if((flag2_out==1)||(flag2_out==3))//正常模式下
begin
if(key1==0)
begin
if(count_x1<50_0000)
begin
count_x1<=count_x1+1;
if(count_x1==49_9999)
begin
if(key1==0)
flag1<=flag1+1;
if(flag1==3)flag1<=1;
end
end
end
end
if(key1==1)count_x1<=0;
if(key3==0)flag1<=0;//停止
//***********自然模式下,高,中,低循环******************
if(flag2_out==2)
begin
if(flag3==1)
flag1<=flag1+1;
if(flag1>3)
flag1<=0;
end
if(flag_stop==1)flag1<=0;//倒计时完毕,风扇停止,风速调节无效,需要按确定键复位flag_stop
end
//***************风速***********************
always@(posedgeclock)
begin
if(flag1==1)
count2<=300;//低
elseif(flag1==2)count2<=250;//中
elseif(flag1==3)count2<=20;//高
elseif(flag1==0)count2<=500;//停
end
//********按键选择模式****************
always@(posedgeclock)
begin
reg[29:
0]count_x2;//消抖
if(key2==0)
begin
if(count_x2<50_0000)
begin
count_x2<=count_x2+1;
if(count_x2==49_9999)
begin
if(key2==0)
flag2_out<=flag2_out+1;
if(flag2_out==3)flag2_out<=1;
end
end
end
if(key2==1)count_x2<=0;
if(key3==0)flag2_out<=0;//停止
if(flag_stop==1)flag2_out<=0;//倒计时完毕后模式按键无效,需要按确定键复位flag_stop
end
//***************led*****************
always@(posedgeclock)
begin
if(flag1==1)led_s_r<=3'b011;
elseif(flag1==2)led_s_r<=3'b101;
elseif(flag1==3)led_s_r<=3'b110;
elseled_s_r<=3'b111;
if(flag2_out==1)led_m_r<=3'b011;
elseif(flag2_out==2)led_m_r<=3'b101;
elseif(flag2_out==3)led_m_r<=3'b110;
elseled_m_r<=3'b111;
end
//*******************************************
assignled_s=led_s_r;
assignled_m=led_m_r;
assignmoto_f=0;
assignmoto_z=moto_z_r;
assignflag=flag2_out;
endmodule
数码管显示程序
moduledisplay(
led_wei1,
led_wei2,
led_wei3,
led_wei4,
led_wei5,
led_wei6,
led_wei7,
led_wei8,
led_du,
clock,
hour_ge,
hour_shi,
minute_ge,