体脂秤(压力传感器和HX711)设计Verilog代码Quartus仿真讲解视频
名称:体脂秤(压力传感器和HX711)设计Verilog代码Quartus仿真(文末获取)
软件:Quartus
语言:Verilog
代码功能:
基于FPGA的体脂秤设计(压力传感器和HX711)
研究思路和方法:
整体方案基于BMI法计算得出体脂。相比于传统的四电极方法,由于使用者要赤脚并且双脚同时站在四个电极上,由于使用者用餐前后身体内水分会有变化,从而导致导电性有所差异,会导致体脂测量出现误差,出现同一天内,测量结果不一致的情况,且考虑到赤脚测量带来局限性,不能更方便的随时随地检测,本设计决定将国际通用被认可的BMI 值计算公式写入设计,可以得到具有参考价值的身体健康指数。
本设计采用FPGA作为主控芯片;利用四片 50kg 量程的传感器串接成 200kg 量程的压力传感器与一片 HX711 芯片组成人体体重测量模块;使用矩阵键盘实现按键输入身高以及控制模式切换的功能;采用LCD1602显示模块显示相应的体重以及体脂等数据;使用EEPROM储存之前所测的体重以及体脂数据。
代码讲解:
体脂秤(压力传感器和HX711)设计Verilog代码Quartus仿真
通过hx711测人体体重,矩阵键盘设置身高,按下按键15确定,计算得出体脂
按下按键12体重秤清零
按下按键13进行体重储存,按下按键14读出上次的体重数据
清单:
FPGA最小系统
4个50kg压力传感器
HX711模块
OLED
矩阵键盘
EEPROM
顶层模块

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
源代码
点击下方的公众号卡片获取
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)