家用电风扇控制逻辑电路设计Word格式文档下载.docx
《家用电风扇控制逻辑电路设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《家用电风扇控制逻辑电路设计Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
分工:
一人尽心程序编译,一人负责查询资料记录并完成设计报告。
二、方案设计与论证
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的逻辑表达式:
Q2¯
Q1¯
Q0¯
+K2·
(Q0+Q1+Q2)
CP信号状态表
K2
K1
ST
CP
0
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信号就会产生上升沿使风种的状态发生变化。
2.2电风扇单元电路的工作原理
2.2.1风速的控制原理
电风扇处于停转状态时,所有指示灯不亮。
此时只有按“风速”键,电扇才会启动运转,其初始状态处于“弱”档,相对应的只是灯亮。
此时,按动“风速”键会产生触发脉冲可循环选择弱、中、强三种状态中的任意种状态。
“风速”的工作状态是由触发器来锁存状态,触发器输出1表示工作状态有效,0表示无效,当三个输出全部为0则表示停止状态。
设数字×
×
为Q2、Q1、Q0的输出信号,其转换图如下
“风速”转换图
2.2.2风种的控制原理
在“风种”的三种选择方式中,在正常位置时,风扇为连续运行;
在自然和睡眠位置时,为间断运行方式。
电路中采用74LS151作为风种方式的控制器,由74LS175的三个输出信号选中74LS151的一种方式。
间断工作时,电路中用了一个8秒周期的时钟信号作为自然方式的间断控制;
二分频后再作为睡眠方式的控制输入。
“风种”转换图
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
印刷电路板设计教程[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;
0]second_ge;
0]minute_shi;
0]second_shi;
0]hour_ge;
0]hour_shi;
//**************************
reg[4:
0]hour;
//最大31
reg[5:
0]minute;
0]second;
reg[3:
0]minute_ge_out;
0]second_ge_out;
reg[2:
0]minute_shi_out;
0]second_shi_out;
0]hour_ge_out;
0]hour_shi_out;
regflag_q;
0]state1_out;
regflag_out;
//*****************************
always@(posedgeclock)
begin
reg[19:
0]count1;
//消抖
reg[29:
0]count;
//计数
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
b1)count1<
=20'
d0;
//*****************************
if(flag_q==1'
b1)//确定键按下后才开始倒计时
count<
=count+1'
if(count==30'
d50_00_0000)
=30'
if(second==6'
d0)
if((hour==0)&
&
(minute==0))
elsesecond<
if(minute==4'
if(hour==0)
minute<
elseminute<
begin
=1;
//停止信号
hour<
end
elsebeginhour<
=hour-1;
flag_out<
end
end
elseminute<
=minute-1'
b1;
elsesecond<
=second-1'
end
//*************************按键控制加减***************************************
if(state1==3'
b001)//分钟加
if(key2==1'
count6<
=count6+1'
if(count6==30'
d100_00000)//
count6<
if(key2==1'
minute<
=minute+1'
if(minute>
7'
d59)
end
//***********************************************
elseif(key3==1'
b0)//分钟减
d100_00000)//10ms
if(key3==1'
if(minute==7'
minute<
=7'
d59;
end
end
//*******************************
elseif(state1==3'
b010)//小时加
d10_00_0000)//12ms
hour<
=hour+1'
if(hour>
6'
d23)
hour<
=6'
//*********************************
if(key3==1'
b0)//小时减
=hour-1'
if(hour==6'
d23;
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
//********按键选择调整对象****************
reg[19:
0]count_x1;
if(key1==0)
if(count_x1<
count_x1<
=count_x1+1;
if(count_x1==49_9999)
if(key1==0)
state1_out<
=state1_out+1;
if(state1_out==2)state1_out<
if(key1==1)count_x1<
if(key4==0)state1_out<
//确认键按下
//******************************************************
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(
key1,
key2,
key3,
moto_z,
moto_f,
led_s,//速度
led_m,//模式
flag,//模式输出
flag_stop,//倒计时时间到时,输入信号
);
inputflag_stop;
output[1:
0]flag;
outputmoto_z;
outputmoto_f;
0]led_s;
0]led_m;
//******************
reg[29:
0]count2;
//正常模式
0]count3=5_00000;
//自然模式
0]led_s_r;
0]led_m_r;
regmoto_z_r;
regmoto_f_r;
reg[1:
0]flag2_out;
0]flag1;
//风速(高,低,中)
//reg[1:
0]flag2;
//模式(正常,自然,睡眠)
0]flag3;
//自然风中的模式
//***************************************
reg[31:
0]count_x;
count_x<
=count_x+1;
if(count_x==150_000000)//5秒
flag3<
elseflag3<
//******************电机转动***************
=count1+1;
count2)
moto_z_r<
elseif(count1<
500)
=1'
elsecount1<
//********按键选择,高,中,低****************
if((flag2_out==1)||(flag2_out==3))//正常模式下
flag1<
=flag1+1;
if(flag1==3)flag1<
if(key3==0)flag1<
//停止
//***********自然模式下,高,中,低循环******************
if(flag2_out==2)
if(flag3==1)
flag1<
if(flag1>
3)
if(flag_stop==1)flag1<
//倒计时完毕,风扇停止,风速调节无效,需要按确定键复位flag_stop
//***************风速***********************
if(flag1==1)
count2<
=300;
//低
elseif(flag1==2)count2<
=250;
//中
elseif(flag1==3)count2<
=20;
//高
elseif(flag1==0)count2<
=500;
//停
//********按键选择模式****************
0]count_x2;
if(key2==0)
if(count_x2<
count_x2<
=count_x2+1;
if(count_x2==49_9999)
if(key2==0)
flag2_out<
=flag2_out+1;
if(flag2_out==3)flag2_out<
if(key2==1)count_x2<
if(key3==0)flag2_out<
if(flag_stop==1)flag2_out<
//倒计时完毕后模式按键无效,需要按确定键复位flag_stop
//***************led*****************
if(flag1==1)led_s_r<
=3'
b011;
elseif(flag1==2)led_s_r<
b101;
elseif(flag1==3)led_s_r<
b110;
elseled_s_r<
b111;
if(flag2_out==1)led_m_r<
elseif(flag2_out==2)led_m_r<
elseif(flag2_out==3)led_m_r<
elseled_m_r<
//*******************************************
assignled_s=led_s_r;
assignled_m=led_m_r;
assignmoto_f=0;
assignmoto_z=moto_z_r;
assignflag=flag2_out;
数码管显示程序
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,