概述
涂鴉智能 (NYSE:TUYA) 是一家致力于讓生活更智能的領(lǐng)先技術(shù)公司,涂鴉提供能夠智連萬(wàn)物的云平臺(tái),打造互聯(lián)互通的開發(fā)標(biāo)準(zhǔn),連接品牌、OEM 廠商、開發(fā)者、零售商和各行業(yè)的智能化需求,涂鴉的解決方案賦能并提升合作伙伴和客戶的產(chǎn)品價(jià)值,同時(shí)通過技術(shù)應(yīng)用使消費(fèi)者的生活更加便利,涂鴉智能的智慧商業(yè) SaaS 為豐富的垂直行業(yè)提供智能解決方案。涂鴉智能領(lǐng)先業(yè)界的技術(shù),符合嚴(yán)格的數(shù)據(jù)保護(hù)標(biāo)準(zhǔn)和安全性。
壓力傳感器是工業(yè)實(shí)踐中最為常用的一種傳感器,其廣泛應(yīng)用于各種工業(yè)自控環(huán)境,涉及水利水電、鐵路交通、智能建筑、生產(chǎn)自控、航空航天、軍工、石化、油井、電力、船舶、機(jī)床、管道等眾多行業(yè)。
同時(shí)壓力傳感器可以應(yīng)用于電子稱重系統(tǒng)或者久坐系統(tǒng),實(shí)現(xiàn)了稱重顯示、超限報(bào)警、校準(zhǔn)、適應(yīng)各種工作環(huán)境、遠(yuǎn)程實(shí)時(shí)監(jiān)控等多種功能,可以廣泛應(yīng)用于各種稱重場(chǎng)景。
本章主要是配置開發(fā)板對(duì)壓力傳感器HX711進(jìn)行數(shù)據(jù)讀取以及通過串口打印數(shù)據(jù)。
? 進(jìn)入IoT商機(jī)孵化營(yíng),獲取開發(fā)資料及相關(guān)硬件物料。 ? ? ? ? ? ? ? ? ? ?
? IoT商機(jī)孵化營(yíng):
?https://t.tuya.com/AY1D3R9jFf ? ? ? ? ? ? ? ? ? ? ? ? ??
硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F103RB的開發(fā)板:

對(duì)于該主控的原理圖,可以在官方種進(jìn)行下載,下載地址如下:
https://www.st.com/zh/evaluation-tools/nucleo-f103rb.html#cad-resources

選擇芯片型號(hào)
使用STM32CUBEMX選擇芯片stm32f103rb,如下所示:

配置時(shí)鐘源
HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:
?

?
配置時(shí)鐘樹
STM32F1的最高主頻到72M,但是使用內(nèi)部時(shí)鐘最快只能達(dá)到64M,所以配置64即可:
?

?
串口配置
本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。
?

?
開啟中斷。

生成工程設(shè)置

代碼生成設(shè)置
最后設(shè)置生成獨(dú)立的初始化文件:
?

?
生成代碼

串口接線配置
由于只用做發(fā)送數(shù)據(jù),故不需要接開發(fā)板的rx。
?

|
開發(fā)板 |
串口模塊 |
|
PA9(TX) |
RX |
|
GND |
GND |
配置keil
?


打印代碼
在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier “FILE” is undefined報(bào)錯(cuò)。
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */
變量定義:
/* USER CODE BEGIN PV */
#define BUFFERSIZE 255 //可以接收的最大字符個(gè)數(shù)
uint8_t ReceiveBuff[BUFFERSIZE]; //接收緩沖區(qū)
uint8_t recv_end_flag = 0,Rx_len;//接收完成中斷標(biāo)志,接收到字符長(zhǎng)度
/* USER CODE END PV */
函數(shù)聲明和串口重定向:
/* USER CODE BEGIN PFP */
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END PFP */
打印數(shù)據(jù)進(jìn)行測(cè)試。
/* USER CODE BEGIN 2 */
printf("壓力傳感器HX711\r\n");
/* USER CODE END 2 */
打印演示效果

壓力傳感器HX711接線說(shuō)明
橋式傳感器于HX711原理如下所示。

模塊接線方式如下所示。
?

壓力傳感器與HX711模塊接線。
|
壓力傳感器 |
串口模塊 |
|
紅線 |
E+ |
|
黑線 |
E- |
|
白線 |
A- |
|
綠線 |
A+ |
開發(fā)板HX711模塊接線。
|
開發(fā)板 |
串口模塊 |
|
VCC |
VCC |
|
DT |
PC10 |
|
SCK |
PC11 |
|
GND |
GND |
STM32CUBEMX配置數(shù)據(jù)管腳
配置PC10為DT數(shù)據(jù)腳,配置PC11為SCK時(shí)鐘腳。
?

壓力傳感器HX711通訊
串口通訊線由管腳 PD_SCK 和 DOUT 組成,用來(lái)輸出數(shù)據(jù),選擇輸入通道和增益。
當(dāng)數(shù)據(jù)輸出管腳 DOUT 為高電平時(shí),表明A/D 轉(zhuǎn)換器還未準(zhǔn)備好輸出數(shù)據(jù),此時(shí)串口時(shí)鐘輸入信號(hào) PD_SCK 應(yīng)為低電平。當(dāng) DOUT 從高電平變低電平后,PD_SCK 應(yīng)輸入 25 至 27 個(gè)不等的時(shí)鐘脈沖。其中第一個(gè)時(shí)鐘脈沖的上升沿 將讀出輸出 24 位數(shù)據(jù)的最高位(MSB),直至第 24 個(gè)時(shí)鐘脈沖完成,24 位輸出數(shù)據(jù)從最高位至最低位逐位輸出完成。第 25至 27 個(gè)時(shí)鐘脈沖用來(lái)選擇下一次 A/D 轉(zhuǎn)換的輸入通道和增益。
PD_SCK 的輸入時(shí)鐘脈沖數(shù)不應(yīng)少于 25 或多于 27,否則會(huì)造成串口通訊錯(cuò)誤。
當(dāng) A/D 轉(zhuǎn)換器的輸入通道或增益改變時(shí),A/D 轉(zhuǎn)換器需要 4 個(gè)數(shù)據(jù)輸出周期才能穩(wěn)定。
DOUT 在 4 個(gè)數(shù)據(jù)輸出周期后才會(huì)從高電平變低電平,輸出有效數(shù)據(jù)。


壓力傳感器HX711驅(qū)動(dòng)程序
通過參考的驅(qū)動(dòng)程序,修改成自己的代碼。

主程序代碼
/* USER CODE BEGIN 2 */
printf("壓力傳感器HX711\r\n");
weight_qupi=ReadCount();//首次讀取重量進(jìn)行去皮操作
printf("首次去皮weight_qupi=%d\n",weight_qupi);
HAL_Delay(100);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
weight_shiji=ReadCount();
if(weight_qupi>=weight_shiji)
{
weight_shiji=weight_qupi-weight_shiji;
weight_shiji=weight_shiji/100;
printf("重量為:%dg",weight_shiji);
}
else
{
weight_shiji=weight_shiji-weight_qupi;
weight_shiji=weight_shiji/100;
printf("重量為:-%dg",weight_shiji);
}
HAL_Delay(1000);
}
/* USER CODE END 3 */
實(shí)際演示
實(shí)際測(cè)試重量為1115g。

模塊測(cè)試如下所示1157g。


電子發(fā)燒友App




















































評(píng)論