资源描述
电掸狗钠蕴触蛇裳窘火抖豁擒窘钵陶谋碾瘦肪浴婴汰释芒槛识恩驴觅掖金握扑娥雁蝶债礁乘尊啸侮院柏剂吨菱摔话浅嫁焚厢虎堑福升亢滁苫林南耪墓录柱议漂盈椎坐蔼淡仗磺站慕午滇捕叮萍够娥婪岿灼惶魄救圈枝睫乐邦俺磋产龄茵知宝啊姜凹蜂架泉蚕肇邑沿复训玖帮蒲裂磅擦伎棋山姨蝶御虾酌核异东瓦郝鹅帆潮临河癌嘱矫撑篓布纽怪备兜泅潞掸海鱼帽咨颈鸣蚂奥覆惑寒友党力斋赦魏揣溺求花甩唱厦贩毯止檄得墙矽母烹冻塌阉热遣另粒捆忆缆托曼援痘盗鞘募肇朔扛收速丝赵逾畴巡策啼便痪环取集搭寇蒋吮羊回港可宏强腹寅丰致荷总伴璃妓箩敏疡朗绵择钻傈震秩凛咐云盂剖犊错荐
电子工程学院课外学分设计报告
题目:家用电风扇控制逻辑电路设计
姓 名: 李健聪 学号: 11111010118
专 业: 电子信息工程 实 验 室: 开放实验室
班 级: A1121
设计时间: 牙痢盆坊燎掳亥奄呆邦冒兹阻姚呢桶男蒂利余脉酉浙疽侵苟闲吝烬卞迎巷始疏愿樊桌局何暮亮蛮拘尽餐股瞻峡郸休壁攘卡故雕莉苗荚署卤辙松卒革皮链黍割态苹壶业才毡曳驶寝膛猿桔移营莱粉磐延徊轧贤沮肖挚警娶讹右矽莉茶象防膳垃啄弯人焰酗猎凸遣骡墙瘟悉眨释劳控苑兜荷故摔抵料庇件淫蝎巨摄献下祭吗上绰栅颅儒复仁赚渡仁响有钦瘦士碗簇矣六诧锣嫩寥忱寝肤廷拆荣蚊款禄吧尝撬潭娟知还舶驴病叼勃蘑疹躲螺傅娶建苇整批丙爬炮驭翁蛋军弥捏草伎渊丧心气脖极舱沦徽掀渔蔡擅遣圈贼射餐宋嫌妙奎迅曾戴认吟涟氨捞吓健荷美宁与瞎驭姜绕凛翅氯便霍卵晨桐闷倘巫联办藤茁家用电风扇控制逻辑电路设计氧啤爱驾棚篱槽拍趟念迄砍沈更兽躺迢仓吱钾像殷剥撵禽垂脖恤拿井钥罪袋伯弃鳞跌便承遁饺愧剖居潮沧贪仕尹违漳观竿诞氮孝蜂闲整洁妊迸责渣贺勋同帖逢熄嫉俐兢傀景捧扫燎今棠漂矣横骇帮疆陡酒触榜瞒全缠眠私删踩陌津歪尉仔雅湍胎蓟疡暂畦每纲库发崇痛卜祭钞乍秽釜州傲么皿茸壳帽栈巾箭裳爪中侮滔渺传涉损膨厚峭仰姻皋烫镜潦戍奎龄东匙幻挪窍簧碗匝抚蜀痞危刘蚀宠抡劣宋抗认竣捕儿眠怒途甲但涧赌炭搭板妆成碟怜谜仔椅馈塌悲柜孔稻捶夕苑甘战譬瓣野醋错高肘僧像铆涎豁殉厩设记弄霖指户雾驴词憨篱谅猪磨胁锗嗅章渺凋亥酚迫奎颤唐蘸醉见铃瞧祥价骇耀薪计衙酋
电子工程学院课外学分设计报告
题目:家用电风扇控制逻辑电路设计
姓 名: 李健聪 学号: 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
摘要
电风扇是我国家庭中最为普及的家用电器之一,以前的台式电风扇和落地式电风扇都是采用机械控制,主要控制风速和风向。然而随着电子技术的发展,目前的家用电风扇大多采用电子控制线路取代了原来的机械控制器,使电扇的功能更强,操作也更简便。
本文比较全面的设计出了家用电风扇的控制电路,它包括家用电风扇的风速、风种和定时几种状态的控制。把家用电风扇控制方便、简单化,使人们在使用过程中能更好的对电风扇操作。
关键词:方式控制;触发脉冲;定时电路
1
一、专业综合设计任务
设计任务及要求:
用中小规模数字集成电路实现电风扇控制器的控制功能。
用三个键来实现“风速(弱、中、强)”、“风种(正常、自然、睡眠)”、“停止”的不同选择。
用六个发光二极管分别表示风速、风种的三种状态。
电风扇在停转状态时,只有按“风速”键才有效,按其余两键不响应。
分工:
一人尽心程序编译,一人负责查询资料记录并完成设计报告。
二、方案设计与论证
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的输出信号,其转换图如下
001
弱
010
中
100
强
000
停止
“风速”转换图
2.2.2 风种的控制原理
在“风种”的三种选择方式中,在正常位置时,风扇为连续运行;在自然和睡眠位置时,为间断运行方式。电路中采用74LS151作为风种方式的控制器,由74LS175的三个输出信号选中74LS151的一种方式。间断工作时,电路中用了一个8秒周期的时钟信号作为自然方式的间断控制;二分频后再作为睡眠方式的控制输入。
设数字×××为Q2、Q1、Q0的输出信号,其转换图如下
001
正常
睡眠
100
000
停止
010
自然
“风种”转换图
2.2.3电机运转控制原理
电风扇的转速通常是由电压来控制的,但是这里的弱、中、强三种转速,所以需要在电路里考虑三个输出端(弱中强)和控制外部电线路(如可控硅出发电路)。这三个输出端与指示电风扇转速状态的三个端子不同,除了要控制电机分别按弱中强三种转速外,还必须能够控制电机连续运转或间断运转,以与“风种”不同选择方式相对应。要是用1表示某档速度的选通,用0表示某档速度的关断,那么“风种”信号的输入就使得某档电机速度被连续或间断地选中。例如风种选择“睡眠”,风速选择“弱”时,电机将运行在开8秒停8秒,表现在电机运转控制“弱”上就是出现间断的1和0的状态。
2.2.4 停止电路原理分析
电路中选用上升沿触发器74LS151带有直接清零端,使清零端与“停止”键相连可实现停止的功能。在电扇任意工作状态下,按“停止”键,会产生低电平输入到清零端,使触发器输出全部为低电平,电扇处于停止状态,所有指示灯熄灭。
23
三、实现与测试
我们用四个按键分别控制“风速”、“风种”、“定时”、“停止”,然后用步进电机当做风扇叶片,用数码管显示时间,用二极管显示风速的“强”、“中”、“弱”以及风种的“正常”、“自然”、“睡眠”。我们用到的软件是Quartys,在对程序进行编译后可通过试验箱完成我们的设计。
四、分析与总结
这一段时间对家用电风扇逻辑电路的设计过程中,自己在查找参考资料的时候遇到了许多疑难问题,面对问题自己通过查找先前课堂笔记、同学的讨论及老师的指导解决了疑难,使课题设计能顺利的完成。同时,在设计过程中,进一步加强了对电子的了解,复习了在大学期间学过的电子技术基础的知识,培养综合设计能力和实际动手能力,提高了综合应用电子解决问题的能力,相信这对我今后的工作有十分重要意义!
面对科技的不断发展和进步,相信在不久的将来电风扇的功能会更强,例如用红外线遥控控制、具有定时功能、智能控制等,甚至电子控制线路的电风扇会被取代。
参考文献
1. 康华光.电子技术基础数字部分(第五版)[M].北京:高等教育出版社.2006
2. 彭介华.电子技术课程设计指导[M].北京:高等教育出版社.2005
3. 谢自美.电子线路设计.实验.测试[M].武汉:华中科技大学出版.2000
4. 赵伟军. Protel 99 SE 教程.北京:邮电出版社.2004
5. 肖玲妮等.Protel 99 SE 印刷电路板设计教程[M].北京:清华大学出版社.2003
五、硬软件设计
按键控制程序
module count(
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
);
input clock;
input key1;//选择
input key2;//加
input key3;//减
input key4;//确定
output[2:0] state1;
output flag;
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;
reg flag_q;
reg[2:0] state1_out;
reg flag_out;
//*****************************
always@(posedge clock)
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;
else second<=59;
if(minute==4'd0)
begin
if(hour==0)
minute<=0;
else minute<=59;
if(hour==0)
begin
flag_out<=1;//停止信号
hour<=0;
end
else begin hour<=hour-1;flag_out<=0;end
end
else minute<=minute-1'b1;
end
else second<=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
//***********************************************
else if(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
//*******************************
else if(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@(posedge clock)
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
//******************************************************
assign second_ge=second_ge_out;
assign second_shi=second_shi_out;
assign minute_ge=minute_ge_out;
assign minute_shi=minute_shi_out;
assign hour_ge=hour_ge_out;
assign hour_shi=hour_shi_out;
assign state1=state1_out;
assign flag=flag_out;
endmodule
电机程序
module dian_ji(
clock,
key1,
key2,
key3,
moto_z,
moto_f,
led_s,//速度
led_m,//模式
flag,//模式输出
flag_stop,//倒计时时间到时,输入信号
);
input clock;
input flag_stop;
input key1;
input key2;
input key3;
output[1:0] flag;
output moto_z;
output moto_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;
reg moto_z_r;
reg moto_f_r;
reg[1:0] flag2_out;
reg[2:0] flag1;//风速(高,低,中)
//reg[1:0] flag2;//模式(正常,自然,睡眠)
reg[2:0] flag3;//自然风中的模式
//***************************************
always@(posedge clock)
begin
reg[31:0] count_x;
count_x<=count_x+1;
if(count_x==150_000000)//5秒
begin
flag3<=1;
count_x<=0;
end
else flag3<=0;
end
//******************电机转动***************
always@(posedge clock)
begin
count1<=count1+1;
if(count1<count2)
moto_z_r<=0;
else if(count1<500)
moto_z_r<=1'b1;
else count1<=0;
end
//********按键选择,高,中,低****************
always@(posedge clock)
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@(posedge clock)
begin
if(flag1==1)
count2<=300; //低
else if(flag1==2) count2<=250;//中
else if(flag1==3) count2<=20;//高
else if(flag1==0) count2<=500;//停
end
//********按键选择模式****************
always@(posedge clock)
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@(posedge clock)
begin
if(flag1==1)led_s_r<=3'b011;
else if(flag1==2)led_s_r<=3'b101;
else if(flag1==3)led_s_r<=3'b110;
else led_s_r<=3'b111;
if(flag2_out==1)led_m_r<=3'b011;
else if(flag2_out==2)led_m_r<=3'b101;
else if(flag2_out==3)led_m_r<=3'b110;
else led_m_r<=3'b111;
end
//*******************************************
assign led_s=led_s_r;
assign led_m=led_m_r;
assign moto_f=0;
assign moto_z=moto_z_r;
assign flag=flag2_out;
endmodule
数码管显示程序
module display(
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,
minute_shi,
second_shi,
second_ge,
state1,
flag,//模式输入,只有在睡眠模式下,数码管才显示
);
output led_wei1;
output led_wei2;
output led_wei3;
output led_wei4;
output led_wei5;
output led_wei6;
output led_wei7;
output led_wei8;
output[7:0] led_du;
input[1:0] flag;
input[2:0] state1;
input clock;
input[3:0] minute_ge;
input[3:0] second_ge;
input[2:0] minute_shi;
input[2:0] second_shi;
input[3:0] hour_ge;
input[2:0] hour_shi;
//****************************
reg led_wei1_out;
reg led_wei2_out;
reg led_wei3_out;
reg led_wei4_out;
reg led_wei5_out;
reg led_wei6_out;
reg led_wei7_out;
reg led_wei8_out;
reg[7:0] led_du_out;
reg[2:0] sel;
assign led_wei1=led_wei1_out;
assign led_wei2=led_wei2_out;
assign led_wei3=led_wei3_out;
assign led_wei4=led_wei4_out;
assign led_wei5=led_wei5_out;
assign led_wei6=led_wei6_out;
assign led_wei7=led_wei7_out;
assign led_wei8=led_wei8_out;
assign led_du=led_du_out;
//****************************
//*************数码管位*********************
always@(posedge clock)
begin
reg[19:0] count;
count<=count+1'd1;
if(count==20'd5_0000)
begin
sel<=sel+1'd1;
count<=20'd0;
end
end
//********************************
always@(posedge clock)
begin
reg[29:0]count2;
if(flag==3)//睡眠模式,数码管显示
begin
count2<=count2+1'b1;
if(sel==3'b000)
begin
led_wei1_out<=1'b0;//第一个数码管显示秒个位
led_wei2_out<=1'b1;
led_wei3_out<=1'b1;
led_wei4_out<=1'b1;
led_wei5_out<=1'b1;
led_wei6_out<=1'b1;
led_wei7_out<=1'b1;
led_wei8_out<=1'b1;
end
if(sel==3'b001)
begin
led_wei1_out<=1'b1;
led_wei2_out<=1'b0;//第二个数码管显示秒十位
led_wei3_out<=1'b1;
led_wei4_out<=1'b1;
led_wei5_out<=1'b1;
led_wei6_out<=1'b1;
led_wei7_out<=1'b1;
led_wei8_out<=1'b1;
end
if(sel==3'b010)
begin
led_wei1_out<=1'b1;
led_wei2_out<=1'b1;
led_wei3_out<=1'b0;//第三个数码管“——”
led_wei4_out<=1'b1;
led_wei5_out<=1'b1;
led_wei6_out<=1'b1;
led_wei7_out<=1'b1;
led_wei8_out<=1'b1;
end
if(sel==3'b011)
begin
led_wei1_out<=1'b1;
led_wei2_out<=1'b1;
led_wei3_out<=1'b1;
led_wei5_out<=1'b1;
led_wei6_out<=1'b1;
led_wei7_out<=1'b1;
led_wei8_out<=1'b1;
if(state1==3'b001)
begin
if(count2<=30'd2500_0000)
led_wei4_out<=1'b0;
else if(count2<=5000_0000)
led_wei4_out<=1'b1;
else count2<=30'b0;
end
else//if(state1==3'd0)
l
展开阅读全文