FPGA温控风扇设计Word文件下载.docx
- 文档编号:20299186
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:50
- 大小:504.29KB
FPGA温控风扇设计Word文件下载.docx
《FPGA温控风扇设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《FPGA温控风扇设计Word文件下载.docx(50页珍藏版)》请在冰豆网上搜索。
1.3.1温度传感器的选择
在本设计中,温度传感器的选择有以下两种方案:
方案一:
采用热敏电阻作为检测温度的核心元件,并通过运算放大器放大,由于热敏电阻会随温度变化而变化,进而产生输出电压变化的微弱电压变化信号,再经模数转换芯片ADC0809将微弱电压变化信号转化为数字信号输入FPGA处理。
方案二:
采用数字式的集成温度传感器DS18B20作为温度检测的核心元件,由其检测并直接输出数字温度信号给FPGA进行处理。
对于方案一,采用热敏电阻作为温度检测元件,有价格便宜,元件易购的优点,但热敏电阻对温度的细微变化不太敏感,在信号采集、放大以及转换的过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其自身电阻对温度的变化存在较大误差,虽然可以通过一定电路来修正,但这不仅将使电路变得更加复杂,而且在人体所处环境温度变化过程中难以检测到小的温度变化。
故该方案不适合本系统。
对于方案二,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转化等电路的误差因数,温度误差变得很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。
温度值在器件内部转化成数字量直接输出,简化了系统程序设计,又由于该温度传感器采用先进的单总线技术,与FPGA的接口变得非常简洁,抗干扰能力强,因此该方案适用于本系统。
1.3.2调速方式的选择
采用数模转换芯片DAC0832来控制,由FPGA根据当前环境温度值输出相应数字量到DAC0832中,再由DAC0832产生相应模拟信号控制晶闸管的导通角,从而通过无级调速电路实现风扇电机转速的自动调节。
采用FPGA软件编程实现PWM(脉冲宽度调制)调速的方法。
PWM是英文PulseWidthModulation的缩写,它是按一定的规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调节方式,在PWM驱动控制的调节系统中,最常用的是矩形波PWM信号,在控制时需要调节PWM波得占空比。
占空比是指高电平持续时间在一个周期时间内的百分比。
在控制电机的转速时,占空比越大,转速就越快,若全为高电平,占空比为100%时,转速达到最大[2]。
对于方案一,该方案能够实现对直流风扇电机的无级调速,速度变化灵敏,但是D/A转换芯片的价格较高,与其温控状态下无级调速功能相比性价比不高。
对于方案二,相对于其他用硬件或者软硬件相结合的方法实现对电机进行调速而言,采用PWM用纯软件的方法来实现调速过程,具有更大的灵活性,并可大大降低成本,能够充分发挥FPGA的功能,对于简单速度控制系统的实现提供了一种有效的途径。
综合考虑选用方案二。
第2章各单元模块的硬件设计
系统主要器件包括热释电红外传感器、DS18B20温度传感器、XILINXFPGA、LED共阴数码管、风扇直流电机。
2.1系统器件简介
2.1.1DS18B20单线数字温度传感器简介
DS18B20数字温度传感器,是采用美国DALLAS半导体公司生产的DS18B20可组网数字温度传感器芯片封装而成,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。
适用于各种狭小空间设备数字测温和控制领域。
DS18B20的主要特征:
测量的结果直接以数字信号的形式输出,以“一线总线”方式串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;
温度测量范围在-55℃~+125℃之间,在-10℃~+85℃时精度为±
0.5℃;
可检测温度分辨率为9~12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和0.0625℃,可实现高精度测温;
它单线接口的独特性,使它与微处理器连接时仅需一条端口线即可实现与微处理器的双向通信;
支持多点组网功能,即多个DS18B20可以并联在唯一的三线上,实现组网多点测温的功能;
工作电压范围宽,其范围在3.0~5.5V[3]。
DS18B20内部结构主要有四部分:
64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
其管脚有三个,其中DQ为数字信号端,GND为电源地,VDD为电源输入端。
(电原理图如右图)
2.1.2热释电红外线传感器原理简介
人体辐射的红外线中心波长为9~10um,而探测元件的波长灵敏度在0.2~20um范围内几乎稳定不变。
在传感器顶端开设了一个装有滤光镜片的窗口,这个滤光片可通过光的波长范围为7~10um,正好适合于人体红外辐射的探测,而对其它波长的红外线由滤光片予以吸收,这样便形成了一种专门用作探测人体辐射的红外线传感器。
实质上热释电传感器是对温度敏感的传感器。
它由陶瓷氧化物或压电晶体元件组成,在元件两个表面做成电极,如图2所示。
在环境温度有ΔT的变化时,由于有热释电效应,在两个电极上会产生电荷ΔQ,即在两电极之间产生一微弱的电压ΔV。
2.1.3风扇电机控制模块
电路图:
2.1.3蜂鸣器以及按键模块
电路图如下:
第3章软件设计
程序设置
程序设计部分主要包括主程序、DS18B20模块、风扇电机控制模块、热释电红外线传感器模块以及蜂鸣器模块。
DS18B20模块完成对DS18B20的初始化,对环境温度的实时采集、主机对温度传感器数据的读取及数据换算以及包含了温度对数码管的输出;
风扇电机控制函数则根据按键值以及温度的数值完成对电机转速及启停的控制;
热释电红外线传感器模块完成对人体是否存在进行检测,并将信号送到电机模块使能端入口;
蜂鸣器模块对按键进行提醒。
主程序流程图如图:
顶层模块:
moduletop(clk,rst,icdata,dclk,dlk,dain,drst,key,moto,led,sc2);
inputclk;
inouticdata;
inputrst;
input[1:
0]key;
outputdclk;
outputdlk;
outputdain;
outputdrst;
outputmoto;
output[2:
0]led;
outputsc2;
wire[1:
0]jieguo;
0]duty_cyc;
countercounter(
.clk(clk),
.rst(rst),
.icdata(icdata),
.dclk(dclk),
.dlk(dlk),
.drst(drst),
.dain(dain),
.jieguo(jieguo),
.duty_cyc(duty_cyc)
);
dianjidianji(
.key(key),
.wd(jieguo),
.moto(moto),
.led(led),
fengmingqifengmingqi(
.sc2(sc2)
endmodule
DS18B20模块:
这里我们采用12位分辨率,DS18B20在750ms内把温度值转换为数字,实现高精度测温。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
流程图如下:
Verilog代码如下:
moduleDS18B20(nReset,clk,data,icdata);
//nReset是复位端;
data是输出温度数据;
icdata是总线
inputnReset,clk;
output[15:
0]data;
wirea,b;
yuu3(
.temperature(data),
.one_wire(icdata),
.rst_n(nReset),
.clk(clk)
);
moduleyu(
inputclk,//50MHz时钟
inputrst_n,//异步复位
inoutone_wire,//One-Wire总线
output[15:
0]temperature//输出温度值
//++++++++++++++++++++++++++++++++++++++
//分频器50MHz->
1MHz开始
//++++++++++++++++++++++++++++++++++++++
reg[5:
0]cnt;
//计数子
always@(posedgeclk,negedgerst_n)
if(!
rst_n)
cnt<
=0;
else
if(cnt==49)
=cnt+1'
b1;
regclk_1us;
//1MHz时钟
clk_1us<
if(cnt<
=24)//24=50/2-1
=1;
//--------------------------------------
1MHz结束
//--------------------------------------
//延时模块开始
reg[19:
0]cnt_1us;
//1us延时计数子
regcnt_1us_clear;
//请1us延时计数子
always@(posedgeclk_1us)
if(cnt_1us_clear)
cnt_1us<
=cnt_1us+1'
//延时模块结束
//DS18B20状态机开始
//格雷码
parameterS00=5'
h00;
parameterS0=5'
h01;
parameterS1=5'
h03;
parameterS2=5'
h02;
parameterS3=5'
h06;
parameterS4=5'
h07;
parameterS5=5'
h05;
parameterS6=5'
h04;
parameterS7=5'
h0C;
parameterWRITE0=5'
h0D;
parameterWRITE1=5'
h0F;
parameterWRITE00=5'
h0E;
parameterWRITE01=5'
h0A;
parameterREAD0=5'
h0B;
parameterREAD1=5'
h09;
parameterREAD2=5'
h08;
parameterREAD3=5'
h18;
reg[4:
0]state;
//状态寄存器
//-------------------------------------
regone_wire_buf;
//One-Wire总线缓存寄存器
reg[15:
0]temperature_buf;
//采集到的温度值缓存器(未处理)
0]step;
//子状态寄存器0~50
reg[3:
0]bit_valid;
//有效位
always@(posedgeclk_1us,negedgerst_n)
begin
one_wire_buf<
=1'
bZ;
step<
state<
=S00;
end
case(state)
S00:
begin
temperature_buf<
=16'
h001F;
=S0;
S0:
begin//初始化
cnt_1us_clear<
=S1;
S1:
if(cnt_1us==500)//延时500us
//释放总线
=S2;
end
S2:
if(cnt_1us==100)//等待100us
=S3;
S3:
if(~one_wire)//若18b20拉低总线,初始化成功
=S4;
elseif(one_wire)//否则,初始化不成功,返回S0
S4:
if(cnt_1us==400)//再延时400us
=S5;
S5:
begin//写数据
if(step==0)//0xCC
=step+1'
=WRITE0;
elseif(step==1)
elseif(step==2)
=WRITE01;
elseif(step==3)
elseif(step==4)
elseif(step==5)
elseif(step==6)
elseif(step==7)
elseif(step==8)//0x44
elseif(step==9)
elseif(step==10)
elseif(step==11)
elseif(step==12)
elseif(step==13)
elseif(step==14)
elseif(step==15)
//第一次写完,750ms后,跳回S0
elseif(step==16)
=S6;
//再次置数0xCC和0xBE
elseif(step==17)//0xCC
elseif(step==18)
elseif(step==19)
elseif(step==20)
elseif(step==21)
elseif(step==22)
elseif(step==23)
elseif(step==24)
elseif(step==25)//0xBE
elseif(step==26)
elseif(step==27)
elseif(step==28)
ste
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 温控 风扇 设计