FPGA课件设计电风扇自动定时开关控制器Word格式.docx
- 文档编号:358981
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:33
- 大小:144.47KB
FPGA课件设计电风扇自动定时开关控制器Word格式.docx
《FPGA课件设计电风扇自动定时开关控制器Word格式.docx》由会员分享,可在线阅读,更多相关《FPGA课件设计电风扇自动定时开关控制器Word格式.docx(33页珍藏版)》请在冰点文库上搜索。
模块的功能是把50MHz的系统时钟转换为1Hz的时钟,和2Hz的时钟。
1Hz的时钟供计数模块的使用。
2Hz的时钟供输入定时数值的使用。
(2)模式选择控制模块:
选择需要的工作模式。
包括两个模式:
定时、普通。
(3)自动定时倒计时模块:
选择定时模式后,根据键盘的输入值来设定工作时间,在定时时间以内则风扇工作,倒计时结束或开关关闭时风扇自动关闭。
(4)显示模块:
LED上显示当前工作状态:
数码管显示总的设定的时间和剩余工作时间。
4.1.3应用范围
可以用于控制电扇手动控制电风扇工作或停止,也可以按照设定的时间自动工作或停止。
4.1.4引脚描述
顶层模块管脚描述
(1)输入开关管脚
信号名称
功能描述
输入输出
位宽
Clk
系统时钟,频率为50MHz
input
1
Op
模式选择信号,为1时为定时模式;
为0时为普通模式。
In
输入设定时间信号
4
Key
设定时间后开始计时信号
Input
Clr
清零信号
Fz
复制信号
En
开始计时信号
(2)输出显示管脚
Out
风扇工作信号,为1是风扇工作,为0时风扇停止工作
Output
Out_3
时间高位数码管输出端,为时钟的十位
output
7
Out_2
时间低位数码管输出端,为时钟的个位
Out_1
时间高位数码管输出端,为分钟的十位
Out_0
4.2设计方案
4.2.1概述
此自动定时控制器,可以实现定时模式和普通模式的切换,一共有六个模块。
模式选择控制模块:
风扇工作亮,停止工作
灭。
(5)信号处理模块:
该模块的主要作用是在定时没有结束的时候用火仍可以通过开关来控制电扇的关闭。
(6)数据输入模块:
当赋值信号(fz)有效后可以通过键盘输入定时的时间,确定输入无误后按下启动键(en),风扇开始倒计时。
4.2.2顶层模块划分
(1)分频模块
这个模块的功能是把频率为50MHz的时钟转换为1Hz的时钟,供计时模块的使用。
引脚分配:
信号名称
方向
宽度
Clk
输入50MHz的时钟信号
Inclk
输出经过分频以后的1Hz的时钟信号
Nclk
输出经过分频后的2hz的时钟信号
电路设计:
自动、手动,op为1时是定时模式,opl为0时是普通模式。
若为定时模式风在设定的时间内自动工作,当计时结束时风扇自动停止工作,即计时反馈信号out为0时,风扇自动关闭。
若选为手动模式,则在有手动开关key来控制风扇的开关,key为1时风扇工作,为0时停止工作。
引脚分配
op
模式选择信号,为1时为自动开关模式;
为0时为手动开关模式。
key
开关信号
out
风扇工作状态信号
clk
主时钟
A_1
Op为1时a_1为1
A_0
Op为0时a_0为1
Key_1
Key和a_0都为1时可key_1为1,否则为0。
电路设计
选择定时模式后,根据键盘的输入值来设定工作时间,在定时时间以内则风扇工作,倒计时结束时风扇自动关闭。
管脚分配
nclk
计时时钟,频率为1Hz
en
开始倒计时信号
H
小时数据输入
8
m
分钟数据输入
Sign
时间计数为零反馈信号
Data_3
时间高位输出端,为小时的十位
Data_2
时间低位输出端,为小时的个位
Data_1
时间高位输出端,为分钟的十位
Data_0
时间低位输出端,为分钟的个位
时间高位数码管输出端,为小时的十位
时间低位数码管输出端,为小时的个位
时间低位数码管输出端,为分钟的个位
clr
sign
计时信号
(5)信号处理模块
该模块主要是用来在定时还没有结束时,用户仍可以通过开关关闭电扇。
电扇开关
电扇在普通模式下产生的工作信号
倒计时信号
电扇工作信号
(6)数据输入模块
该模块用于用户输入定时时间。
2hz时钟,用于防抖
赋值信号
H_0
小时低位输入端
H_1
小时高位输入端
M_0
分钟低位输入端
M_1
分钟高位输入端
小时输入数值
M
分钟输入数值
4.3功能验证方案
4.3功能验证方案可变模值计数器模块项目信号名预期结果实际结果结果比较时钟输入clk_50M20ns时钟信号同左√复位检测rst初始化高电平,等待同左√200ns后变为低电平分频器脉冲进位Clkrst为低电平后,每5同左√个时钟脉冲(为测试方便选用模5分频器)后产生一个高脉冲秒time_sec当clk为高时,加1,同左√从0加到60分time_min当time_sec为高时,同左√time_min.
4.4电路设计源代码,功能仿真激励源代码及功能仿真结果报告
//顶层模块
modulefan(op,clr,clk,key,fz,en,h_1,h_0,m_1,m_0,out,out_3,out_2,out_1,out_0,nclk);
inputop,clr,clk,key,fz,en;
inputh_1,h_0,m_1,m_0;
outputout,nclk;
wireout,nclk;
output[6:
0]out_3,out_2,out_1,out_0;
wire[7:
0]h,m;
wireb_m,b_h;
wire[3:
0]h_bcd_h,h_bcd_l,m_bcd_h,m_bcd_l;
wirea_1,a_0;
wirekey_1;
wiresign;
wireinclk;
displayplay(.fz(fz),.h_1(h_1),.h_0(h_0),.m_1(m_1),.m_0(m_0),.clk(inclk),.clr(clr),.h(h),.m(m));
fenpinfen(.inclk(inclk),.nclk(nclk),.clk(clk),.clr(clr));
clockmin(.a_1(a_1),.sign(sign),.sclk(nclk),.en(en),.data(m),.clk(clk),.b_m(b_m),.bcd_h(m_bcd_h),.bcd_l(m_bcd_l));
hourho(.sign(sign),.en(en),.a(b_m),.data(h),.clk(clk),.b_h(b_h),.bcd_h(h_bcd_h),.bcd_l(h_bcd_l));
optoption(.op(op),.a_1(a_1),.a_0(a_0),.key(key),.clk(clk),.clr(clr),.key_1(key_1));
lastla(.key(key),.key_1(key_1),.sign(sign),.out(out));
sgsos(.b_m(b_m),.b_h(b_h),.clk(clk),.clr(clr),.sign(sign));
led_displayl_play(.sign(out),.out_3(out_3),.out_2(out_2),.out_1(out_1),.out_0(out_0),.clk(clk),.clr(clr),.data_3(h_bcd_h),.data_2(h_bcd_l),.data_1(m_bcd_h),.data_0(m_bcd_l));
endmodule
分频模块
modulefenpin(clk,clr,nclk,inclk);
inputclk,clr;
outputnclk,inclk;
regnclk,inclk;
reg[50:
0]nadd,inadd;
always@(posedgeclk)
begin
if(!
clr)
nclk=0;
nadd=0;
end
else
if(nadd==24999999)
nclk=!
nclk;
else
nadd=nadd+1;
inclk=0;
inadd=0;
if(inadd==12999999)
inclk=!
inclk;
inadd=inadd+1;
倒计时模块
modulehour(a,en,sign,data,clk,b_h,bcd_h,bcd_l);
inputa,clk,en,sign;
input[7:
0]data;
outputb_h;
regb_h;
output[3:
0]bcd_h,bcd_l;
reg[3:
reg[7:
0]count;
rege;
always@(posedgeclk)
en)
e=1;
always@(posedgeaornegedgeen)
count=data;
b_h=0;
if(a)
if(count[3:
0]==0)
if(count[7:
4]==0)
b_h=1;
begin
count[7:
4]=count[7:
4]-1;
count[3:
0]=4'
b1001;
end
0]=count[3:
0]-1;
always@(posedgeclkorposedgee)
if(e)
bcd_h=count[7:
4];
bcd_l=count[3:
0];
endmodule
moduleclock(en,a_1,sign,data,sclk,clk,b_m,bcd_h,bcd_l);
inputen,sign,clk,sclk,a_1;
outputb_m;
regb_m;
wireas;
assignas=e&
sign&
a_1;
always@(posedgesclkornegedgeen)
b_m=0;
if(as)
4]=4'
b0101;
count[3:
b_m=1;
modulesg(b_m,b_h,clk,sign,clr);
inputb_m,b_h,clk,clr;
outputsign;
regsign;
always@(posedgeclkornegedgeclr)
sign=1;
if(b_h)
if(b_m)
sign=0;
endmodule
信号处理模块
modulelast(key,sign,key_1,out);
inputkey,sign,key_1;
outputout;
wireout;
wireks;
assignks=key&
sign;
assignout=ks|key_1;
数据输入模块
moduledisplay(h_1,h_0,m_1,m_0,fz,clk,clr,h,m);
inputclk,clr,fz;
output[7:
0]add_m_0,add_m_1,add_h_0,add_h_1;
add_m_0=0;
add_m_1=0;
if(fz)
m_0)
if(add_m_0==4'
b1001)
add_m_0=1'
b0;
add_m_0=add_m_0+1'
b1;
m_1)
if(add_m_1==4'
b0101)
add_m_1=1'
add_m_1=add_m_1+1'
add_h_0=0;
add_h_1=0;
h_0)
if(add_h_0==4'
add_h_0=add_h_0+1;
h_1)
if(add_h_1==4'
add_h_1=add_h_1+1;
h=0;
m=0;
h={add_h_1,add_h_0};
m={add_m_1,add_m_0};
Endmodule
模式切换模块
moduleopt(op,a_1,a_0,key_1,key,clk,clr);
inputop,key,clk,clr;
outputa_1,a_0,key_1;
rega_1,a_0;
assignkey_1=key&
a_0;
a_0=0;
a_1=0;
if(op)
a_1=1;
a_0=1;
led数码管显示模块
moduleled_display(out_3,out_2,out_1,out_0,clk,clr,data_3,data_2,data_1,data_0,sign);
inputclk,clr,sign;
input[3:
0]data_3,data_2,data_1,data_0;
wire[6:
ledh_1(.clk(clk),.clr(clr),.d(data_3),.out(out_3),.sign(sign));
ledh_0(.clk(clk),.clr(clr),.d(data_2),.out(out_2),.sign(sign));
ledm_1(.clk(clk),.clr(clr),.d(data_1),.out(out_1),.sign(sign));
ledm_0(.clk(clk),.clr(clr),.d(data_0),.out(out_0),.sign(sign));
moduleled(d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课件 设计 电风扇 自动 定时 开关 控制器