823|4

5676

帖子

7

TA的资源

版主

 

【CW32L052测评】电子称 [复制链接]

 

【材料】

1、CW32L052开发板。

2、HX711测重模块

3、5Kg称重转感器

【接线】

GPIOF4——SCK

GPIIOF5——DOUT

VCC——VCC

GND——GND

【代码】

hx711.h

#ifndef __HX711_H
#define __HX711_H

#include "main.h"
#include "cw32l052_gpio.h"
#include "cw32L052_rcc.h"

//PF04 SCK
//PF05 DOUT
#define HX711_SCK  CW_GPIOF->ODR_f.PIN4// PB0
#define HX711_DOUT GPIO_ReadPin(CW_GPIOF, GPIO_PIN_5)// PB1


extern void Init_HX711pin(void);
extern uint32_t HX711_Read(void);
extern void Get_Maopi(void);
extern void Get_Weight(void);

extern uint32_t HX711_Buffer;
extern uint32_t Weight_Maopi;
extern int32_t Weight_Shiwu;
extern uint8_t Flag_Error;

#endif

hx711.c:

/************************************************************************************
						
*************************************************************************************/
#include "HX711.h"


uint32_t HX711_Buffer;
uint32_t Weight_Maopi;
int32_t Weight_Shiwu;
uint8_t Flag_Error = 0;

//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 109.5
void delay_1us(void)
{
	__NOP();
	__NOP();
}

void Init_HX711pin(void)
{
	__RCC_GPIOF_CLK_ENABLE();
	GPIO_InitTypeDef GPIO_InitStructure;


	//HX711_SCK
	GPIO_InitStructure.Pins = GPIO_PIN_4;
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_Init(CW_GPIOF, &GPIO_InitStructure);

	GPIO_InitStructure.Pins = GPIO_PIN_5;
	GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
	GPIO_Init(CW_GPIOF, &GPIO_InitStructure); 
	
	GPIO_SetBits(CW_GPIOF,GPIO_PIN_4);					//初始化设置为0
}



//****************************************************
//读取HX711
//****************************************************
uint32_t HX711_Read(void)	//增益128
{
	
	unsigned long count; 
	unsigned char i; 
  	//HX711_DOUT=1; 
		CW_GPIOF->ODR_f.PIN5 = 1;
	
  	HX711_SCK=0; 
  	count=0; 
  	while(HX711_DOUT); 
  	for(i=0;i<24;i++)
	{ 
	  	HX711_SCK=1; 
	  	count=count<<1; 
		delay_1us();
		HX711_SCK=0; 
	  	if(HX711_DOUT)
			count++; 
		delay_1us();
	} 
 	HX711_SCK=1; 
  count=count^0x800000;//第25个脉冲下降沿来时,转换数据
	delay_1us();
	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;				//获取实物的AD采样数值。
	
		Weight_Shiwu = (int32_t)((float)Weight_Shiwu/GapValue); 	//计算实物的实际重量
																		//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
																		//当发现测试出来的重量偏大时,增加该数值。
																		//如果测试出来的重量偏小时,减小改数值。
	}

	
}

主程序:

/******************************************************************************/

#include "main.h"
#include "log.h"

int32_t main(void)
{
	
	Init_HX711pin();
	LogInit();
	InitTick(SystemCoreClock);
	Get_Maopi();
	SysTickDelay(2000);
	Get_Maopi();				//重新获取毛皮重量
    CW_SYSCTRL->AHBEN_f.GPIOA = 1U;    //Open GPIOA Clk

    CW_GPIOA->ANALOG_f.PIN0 = 0U;      //Digital
    CW_GPIOA->BRR_f.BRR0 = 1U;         //Reset PA00
    CW_GPIOA->DIR_f.PIN0 = 0U;         //Output

		printf("start...\r\n");
    while(1)
    {
			Get_Weight();

			printf("净重量 = %d g\r\n",Weight_Shiwu); //打印 
			SysTickDelay(1000);
      CW_GPIOA->TOG = bv0;

    }

}


/******************************************************************************
 * EOF (not truncated)
 ******************************************************************************/
#ifdef  USE_FULL_ASSERT
/**
  * [url=home.php?mod=space&uid=159083]@brief[/url] Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
    /* USER CODE BEGIN 6 */
    /* User can add his own implementation to report the file name and line number,
       tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
    /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

【实验效果】

image.png  

【总结】CW32L系列具有低功耗性能,可以实现电池供电的电子称。

最新回复

nmg
  详情 回复 发表于 2023-8-4 18:14
 
 
 

回复
举报

4239

帖子

3

TA的资源

版主

 

我又一次得了一个电子秤,作为一个工程师,看着那个称来回跳,跳的我直接给扔了

 
 
 

回复

4960

帖子

236

TA的资源

管理员

 
秦天qintian0303 发表于 2023-8-4 17:18 我又一次得了一个电子秤,作为一个工程师,看着那个称来回跳,跳的我直接给扔了

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
 
 
 

回复

5676

帖子

7

TA的资源

版主

 

驱动好LCD段码屏以后,效果如下:

54f1c40e675a2a596792b646e845021.jpg  

 
 
 

回复

5676

帖子

7

TA的资源

版主

 

附解说视频,展示用法码标定后的显示,非常准确!

电子称

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表