Verilog实现ZYBO板搭载ds18b20所测温度的收集和超温时报警

该博客介绍了使用Verilog在ZYBO Z720开发板上实现DS18B20温度传感器的数据收集,并结合蜂鸣器进行超温报警的硬件连接与模块设计。内容包括硬件信息、硬件连接图、温度传感器和蜂鸣器模块的详细解释,以及相关代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件信息

所用开发板为zybo z720
ds18b20测温元件介绍
报警装置由蜂鸣器构成,选用最简单的蜂鸣器,输入高电平蜂鸣器报警,低电平无响应

硬件连接

ds18b20温控模块连接图
在这里插入图片描述蜂鸣器连接图
在这里插入图片描述

模块详解

温度传感器模块

在这里插入图片描述clk为系统时钟输入引脚,输入为125mhz时钟,模块内部写有分频器;
rst引脚为复位引脚;
one_wire为数据总线,从温度传感器接收温度数据,
Led和buzzer为自己定义的管脚,如果温度高于某个值,则点亮led并且启动buzzer(蜂鸣器)。
Temp_control为自己添加的使能开关,开关闭合时,温度传感器不工作,可删去。

蜂鸣器模块

在这里插入图片描述蜂鸣器模块,接收一个寄存器的值,如果为高电平,则输出1个高电平,使蜂鸣器发出警报声。

代码实现

蜂鸣器模块

module DS18B20(
  input         clk,                    // 50MHz时钟
//  input         rst_n,                  // 异步复位
  inout         one_wire,               // One-Wire总线
  output [15:0] temperature            // 输出温度值

);

 reg rst_n;
 reg [19:0]count;
 always@(posedge clk)
 begin
    if(count<20'h80000)
       begin
       rst_n<=1;
       count<=count+1;
       end
    else if(count<20'h8ffff) 
       begin
       rst_n<=0;
       count<=count+1;
       end
    else
       rst_n<=1;
 end

//++++++++++++++++++++++++++++++++++++++
// 分频器125MHz->1MHz 开始
//++++++++++++++++++++++++++++++++++++++
reg [7:0] cnt;                         // 计数器

always @ (posedge clk, negedge rst_n)
  if (!rst_n)
    cnt <= 0;
  else
    if (cnt == 125)
      cnt <= 0;
    else
      cnt <= cnt + 1'b1;

reg clk_1us;                            // 1MHz 时钟

always @ (posedge clk, negedge rst_n)
  if (!rst_n)
    clk_1us <= 0;
  else
    if (cnt <= 62)                      // 24 = 50/2 - 1
      clk_1us <= 0;
    else
      clk_1us <= 1;      

//--------------------------------------
// 分频器50MHz->1MHz 结束
//--------------------------------------

//延时模块的使用
//++++++++++++++++++++++++++++++++++++++
// 延时模块 开始
//++++++++++++++++++++++++++++++++++++++
reg [19:0] cnt_1us;                      // 1us延时计数器
reg cnt_1us_clear;                       // 请1us延时计数器

always @ (posedge clk_1us)
  if (cnt_1us_clear)
    cnt_1us <= 0;
  else
    cnt_1us <= cnt_1us + 1'b1;
//--------------------------------------
// 延时模块 结束
//--------------------------------------


//++++++++++++++++++++++++++++++++++++++
// DS18B20状态机 开始
//++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++
// 格雷码
parameter S00     = 5'h00;
parameter S0      = 5'h01;
parameter S1      = 5'h03;
parameter S2      = 5'h02;
parameter S3      = 5'h06;
parameter S4      = 5'h07;
parameter S5      = 5'h05;
parameter S6      = 5'h04;
parameter S7      = 5'h0C;
parameter WRITE0  = 5'h0D;
parameter WRITE1  = 5'h0F;
parameter WRITE00 = 5'h0E;
parameter WRITE01 = 5'h0A;
parameter READ0   = 5'h0B;
parameter READ1   = 5'h09;
parameter READ2   = 5'h08;
parameter READ3   = 5'h18;

reg [4:0] state;                       // 状态寄存器
//-------------------------------------

reg one_wire_buf;                      // One-Wire总线 缓存寄存器

reg [15:0] temperature_buf;            // 采集到的温度值缓存器(未处理)
reg [5:0] step;                        // 子状态寄存器 0~50
reg [3:0] bit_valid;                   // 有效位  
  
always @(posedge clk_1us, negedge rst_n)
begin
  if (!rst_n)
  begin
    one_wire_buf <= 1'bZ;
    step         <= 0;
    state        <= S00;
  end
  else
  begin
    case (state)
      S00 : begin              
              temperature_buf <= 16'h001F;
              state           <= S0;
            end
      S0 :  begin                       // 初始化
              cnt_1us_clear <= 1;
              one_wire_buf  <= 0;              
              state         <= S1;
            end
      S1 :  begin
              cnt_1us_clear <= 0;
              if (cnt_1us == 500)         // 延时500us
              begin
                cnt_1us_clear <= 1;
                one_wire_buf  <= 1'bZ;  // 释放总线
                state         <= S2;
              end 
            end
      S2 :  begin


              cnt_1us_clear <= 0;
              if (cnt_1us == 100<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值