• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

体脂秤(压力传感器和HX711)设计Verilog代码Quartus仿真讲解视频

09/03 11:54
555
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240925122S0622.doc

共1个文件

名称:体脂秤(压力传感器HX711)设计Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:

基于FPGA的体脂秤设计(压力传感器和HX711)

研究思路和方法:

整体方案基于BMI法计算得出体脂。相比于传统的四电极方法,由于使用者要赤脚并且双脚同时站在四个电极上,由于使用者用餐前后身体内水分会有变化,从而导致导电性有所差异,会导致体脂测量出现误差,出现同一天内,测量结果不一致的情况,且考虑到赤脚测量带来局限性,不能更方便的随时随地检测,本设计决定将国际通用被认可的BMI?值计算公式写入设计,可以得到具有参考价值的身体健康指数。

本设计采用FPGA作为主控芯片;利用四片?50kg?量程的传感器串接成?200kg?量程的压力传感器与一片?HX711?芯片组成人体体重测量模块;使用矩阵键盘实现按键输入身高以及控制模式切换的功能;采用LCD1602显示模块显示相应的体重以及体脂等数据;使用EEPROM储存之前所测的体重以及体脂数据。

通过hx711测人体体重,矩阵键盘设置身高,按下按键15确定,计算得出体脂

按下按键12体重秤清零

按下按键13进行体重储存,按下按键14读出上次的体重数据

清单:

FPGA最小系统

4个50kg压力传感器

HX711模块

OLED

矩阵键盘

EEPROM

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

顶层模块

e2prom_rw模块

 

 

hx_711模块

i2c_dri模块

Keypad模块

Oled模块

pLL模块

部分代码展示:

module?fpga_body_scale(
inputsys_clk_1,
inputkey,
outputoled_scl,
inoutoled_sda,
inputhx711_out,
outputpd_clk,
???output???????????eeprom_scl,??
???inout??????????eeprom_sda,??
outputregled,
outputreg[1:0]yu_out,
input???[3:0]?key_row??,
output[3:0]?key_col??
);
parameter????SLAVE_ADDR?=?7'b1010000????;?//器件地址(SLAVE_ADDR)
parameter????BIT_CTRL???=?1'b1??????????;?//字地址位控制参数(16b/8b)
parameter????CLK_FREQ???=?26'd50_000;?//i2c_dri模块的驱动时钟频率(CLK_FREQ)
parameter????I2C_FREQ???=?18'd250???;?//I2C的SCL时钟频率
reg[3:0]code[2:0];
reg[3:0]yuzhi[2:0];
reg[2:0]code_num;
wire??dht11_done;
wire[7:0]??tempH;
wire[15:0]??tempL;
wire[7:0]??humidityH;
wire[7:0]??humidityL;
wire[3:0]key_value;//按键值
wirekey_flag;//按键按下的标志位
wire???????????dri_clk???;?//I2C操作时钟
wire???????????i2c_exec??;?//I2C触发控制
wire???[15:0]??i2c_addr??;?//I2C操作地址
wire???[?7:0]??i2c_data_w;?//I2C写入的数据
wire???????????i2c_done??;?//I2C操作结束标志
wire???????????i2c_ack???;?//I2C应答标志?0:应答?1:未应答
wire???????????i2c_rh_wl?;?//I2C读写控制
wire???[?7:0]??i2c_data_r;?//I2C读出的数据
wire???????????rw_done???;?//E2PROM读写测试完成
wire???[?7:0]??rw_result?;?
wire??[23:0]??weight;
wirelocked;
wiresys_clk;
regsys_rst_n;
reg?[3:0]rst_cnt;
assign??dht11_done?=?1'b1;
assign??tempH?=?8'd73;
assign??tempL?=?weight[7:0]/((yuzhi[0]*100?+?yuzhi[1]*10?+?yuzhi[2])*(yuzhi[0]*100?+?yuzhi[1]*10?+?yuzhi[2])/10000);
assign??humidityH?=?8'd178;
always?@(posedge?sys_clk_1?)?begin
???if(locked?==?1'b0)
??????rst_cnt??<=?4'd0;??
???else?if(key?==?1'b0)
??????rst_cnt??<=?4'd0;
???else?if(rst_cnt==4'd10)
??????rst_cnt??<=?4'd10;
???else
??????rst_cnt??<=?rst_cnt?+?1'b1;
end
always?@?(posedge?sys_clk_1)begin
???if(rst_cnt<4'd10)
???????sys_rst_n?<=?1'b0;
???else
???????sys_rst_n?<=?1'b1;?
end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1131

  • 2-240925122S0622.doc
    下载

相关推荐