一 前言
今天使用XH710檢測(cè)氣壓值,記錄一下測(cè)量過(guò)程分享大家,計(jì)算思路和測(cè)量重量一樣,調(diào)整我們的系數(shù),測(cè)量時(shí)需要注意的的點(diǎn),兩個(gè)設(shè)備盡量保持在同一個(gè)水平面進(jìn)行測(cè)量,這樣得到的波動(dòng)值才更精確,最后系數(shù)值算出來(lái)的數(shù)據(jù)才更接近我們的真實(shí)值。
二 測(cè)試效果
?需要儀器有,一個(gè)針管,一個(gè)氣壓檢測(cè)儀,一個(gè)氣壓檢測(cè)模塊和MCU,我們通過(guò)一個(gè)三閾去連接我們的設(shè)備即可實(shí)現(xiàn)測(cè)量基數(shù)
三 計(jì)算思路
首先我們需要一個(gè)測(cè)量氣壓的設(shè)備,通過(guò)檢測(cè)氣壓的設(shè)備來(lái)調(diào)節(jié)系數(shù)比,在將我們的數(shù)據(jù)通過(guò)excl進(jìn)行一個(gè)計(jì)算,得出我們需要的系數(shù)值,采集的系數(shù)最后計(jì)算的時(shí)候最好去掉一個(gè)最高值和一個(gè)最低值,防止設(shè)備出錯(cuò)
四 工程代碼
XH711.h
#ifndef __HX711_H
#define __HX711_H
#include "sys.h"
#include "tool.h"
#define HX711_SCK PBout(0) // PB0
#define HX711_DOUT PBin(1) // PB1
extern void Init_HX711pin(void);
extern u32 HX711_Read(void);
extern void Get_Maopi(void);
extern void Get_Weight(void);
extern u32 HX711_Buffer;
extern u32 Weight_Maopi;
extern F32 Weight_Shiwu;
extern u8 Flag_Error;
#endif
XH711.c
我們只需要將excl上計(jì)算的時(shí)間帶入Gap_Value ,就可以得到我們想要的數(shù)據(jù)了
/************************************************************************************
*************************************************************************************/
#include "HX711.h"
#include "delay.h"
u32 HX711_Buffer;
u32 Weight_Maopi;
F32 Weight_Shiwu;
u8 Flag_Error = 0;
// 校準(zhǔn)參數(shù)
// 因?yàn)椴煌?a class="article-link" target="_blank" href="/tag/%E4%BC%A0%E6%84%9F%E5%99%A8/">傳感器特性曲線不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測(cè)量值很準(zhǔn)確。
// 當(dāng)發(fā)現(xiàn)測(cè)試出來(lái)的重量偏大時(shí),增加該數(shù)值。
// 如果測(cè)試出來(lái)的重量偏小時(shí),減小改數(shù)值。
// 該值可以為小數(shù)
#define Value 100000
#define Gap_Value 156997.8217
void Init_HX711pin(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能PF端口時(shí)鐘
// HX711_SCK
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); // 根據(jù)設(shè)定參數(shù)初始化GPIOB
// HX711_DOUT
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 輸入上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 初始化設(shè)置為0
}
//****************************************************
// 讀取HX711
//****************************************************
u32 HX711_Read(void) // 增益128
{
unsigned long count;
unsigned char i;
HX711_DOUT = 1;
delay_us(1);
HX711_SCK = 0;
count = 0;
while (HX711_DOUT)
;
for (i = 0; i < 24; i++)
{
HX711_SCK = 1;
count = count << 1;
delay_us(1);
HX711_SCK = 0;
if (HX711_DOUT)
count++;
delay_us(1);
}
HX711_SCK = 1;
count = count ^ 0x800000; // 第25個(gè)脈沖下降沿來(lái)時(shí),轉(zhuǎn)換數(shù)據(jù)
delay_us(1);
HX711_SCK = 0;
return (count);
}
//****************************************************
// 獲取毛皮重量
//****************************************************
void Get_Maopi(void)
{
Weight_Maopi = HX711_Read();
}
//****************************************************
// 稱重
//****************************************************
void Get_Weight(void)
{
HX711_Buffer = HX711_Read();
if (HX711_Buffer > Weight_Maopi)
{
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; // 獲取實(shí)物的AD采樣數(shù)值。
Weight_Shiwu = Weight_Shiwu / Gap_Value;
// 計(jì)算實(shí)物的實(shí)際重量
// 因?yàn)椴煌膫鞲衅魈匦郧€不一樣,因此,每一個(gè)傳感器需要矯正這里的GapValue這個(gè)除數(shù)。
// 當(dāng)發(fā)現(xiàn)測(cè)試出來(lái)的重量偏大時(shí),增加該數(shù)值。
// 如果測(cè)試出來(lái)的重量偏小時(shí),減小改數(shù)值。
}
}
main函數(shù)
首先初始化我們的傳感器設(shè)備,再將我們寫的功能函數(shù)放上去即可
int main()
{
delay_init(); // 延時(shí)函數(shù)初始化
USART1_Config(115200, 2, 3); // 日志打印串口
Init_HX711pin();
Get_Maopi(); // 歸零
delay_ms(1000);
delay_ms(1000);
Get_Maopi(); // 歸零
while (1) {
Get_Weight();
printf_log("壓強(qiáng) = %.2f kParn", Weight_Shiwu);
delay_ms(1000);
}
}
五、參考
HX711壓力傳感器學(xué)習(xí)一(STM32)https://blog.csdn.net/Miraitowain/article/details/130454687?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170202577716800226594021%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170202577716800226594021&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-1-130454687-null-null.nonecase&utm_term=hx711&spm=1018.2226.3001.4450
完整代碼請(qǐng)關(guān)注公眾號(hào)進(jìn)行獲取和咨詢
聯(lián)系方式 微信號(hào):13648103287