当前位置: 首页 > news >正文

基于STM32F4系列MCU和CS5530 24位SDADC的称重传感器系统实现

一、系统架构

1.1 硬件组成
模块型号/参数功能说明
主控芯片STM32F407VGT6168MHz Cortex-M4, 支持浮点运算
高精度ADCCS5530 (24位ΔΣ ADC)24位分辨率,内置可编程增益放大器
称重传感器桥式应变片传感器 (量程0-5kg)输出0-20mV差分信号
信号调理电路INA128 + 仪表放大器信号放大、共模抑制比>120dB
人机接口0.96寸OLED (SSD1306)实时显示重量数据
通信接口USART + SPI上位机通信/配置参数
1.2 系统框图
称重传感器 → 信号调理 → CS5530 ADC → SPI → STM32F4 → 数据处理 → OLED显示↑↓校准参数存储

二、硬件连接与配置

2.1 电路设计要点
1. CS5530接口配置:- SCK → STM32 SPI1_SCK (PA5)- SDI → STM32 SPI1_MOSI (PA7)- SDO → STM32 SPI1_MISO (PA6)- CS  → PA4 (GPIO输出)- INT → PA3 (外部中断)2. 传感器信号调理:- 传感器差分输出 → INA128差分输入- 参考电压:2.5V精密基准 (REF3025)- 低通滤波:1+ 100nF (截止频率160Hz)3. 电源设计:- CS5530模拟供电:3.3V LDO (REF3033)- 数字部分:STM32供电 + 100nF去耦电容
2.2 关键参数配置
参数STM32配置CS5530配置
ADC时钟频率1.024MHz (SPI时钟分频)128kHz (SCLK=1.024MHz/128)
参考电压内部1.2V (需外接REF3025)外部2.5V精密基准
增益设置×128 (寄存器GAIN=0x10)自动增益控制 (AGC=启用)
采样率10Hz (过采样率128x)单周期转换模式

三、软件实现

3.1 驱动开发

3.1.1 SPI通信初始化

// SPI1配置 (STM32F4 HAL库)
void MX_SPI1_Init(void)
{hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // 168MHz/256=656kHzhspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi1.Init.TIMode = SPI_TIMODE_DISABLE;HAL_SPI_Init(&hspi1);
}// CS5530复位
void CS5530_Reset(void)
{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);HAL_Delay(1);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);HAL_Delay(10);
}

3.1.2 ADC数据采集

// 读取24位ADC数据
uint32_t CS5530_ReadADC(void)
{uint8_t tx_data[3] = {0x06, 0x00, 0x00}; // 起始命令uint8_t rx_data[3] = {0};HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 片选有效HAL_SPI_Transmit(&hspi1, tx_data, 3, 100);HAL_SPI_Receive(&hspi1, rx_data, 3, 100);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // 片选无效return (rx_data[1]<<16) | (rx_data[2]<<8) | rx_data[3];
}// 数据解析示例
float Get_Weight(void)
{uint32_t adc_val = CS5530_ReadADC();float voltage = (adc_val * 2.5f) / 0x7FFFFF; // 2.5V参考电压return voltage * CALIBRATION_FACTOR; // 应用校准系数
}
3.2 校准算法

3.2.1 零点校准

void Calibrate_Zero(void)
{HAL_Delay(5000); // 静置5秒float raw_zero = Get_Weight();EEPROM_Write(ADDR_ZERO_OFFSET, (uint32_t)(raw_zero * 1000)); // 保存到EEPROM
}

3.2.2 满量程校准

void Calibrate_FullScale(float known_weight)
{float raw_full = Get_Weight();float scale_factor = (known_weight * 1000) / raw_full; // 转换为mg/LSBEEPROM_Write(ADDR_SCALE_FACTOR, *(uint32_t*)&scale_factor);
}
3.3 数据处理

3.3.1 移动平均滤波

#define BUFFER_SIZE 16
static float adc_buffer[BUFFER_SIZE];
static uint8_t index = 0;float Filter_ADC(void)
{adc_buffer[index++] = Get_Weight();if(index >= BUFFER_SIZE) index = 0;float sum = 0;for(uint8_t i=0; i<BUFFER_SIZE; i++) sum += adc_buffer[i];return sum / BUFFER_SIZE;
}

3.3.2 线性化补偿

// 校准参数结构体
typedef struct {float slope;    // 斜率 (mg/V)float offset;   // 偏移量 (mg)
} CalibrationParams;CalibrationParams params = {.slope = 2000.0f,  // 示例值,需实际校准.offset = 50.0f
};float Linear_Compensation(float raw)
{return raw * params.slope + params.offset;
}

四、性能优化

4.1 硬件优化
  • 电源滤波:添加π型滤波电路(10μH电感 + 100nF电容)
  • PCB布局: 模拟地和数字地分割 传感器信号线做包地处理 参考电压引脚就近放置去耦电容
4.2 软件优化
// DMA配置 (STM32 HAL库)
void MX_DMA_Init(void)
{hdma_spi1_rx.Instance = DMA2_Stream0;hdma_spi1_rx.Init.Channel = DMA_CHANNEL_3;hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_spi1_rx.Init.Mode = DMA_CIRCULAR;HAL_DMA_Init(&hdma_spi1_rx);__HAL_LINKDMA(&hspi1, hdmarx, hdma_spi1_rx);
}// 中断服务函数
void SPI1_IRQHandler(void)
{HAL_SPI_IRQHandler(&hspi1);if(__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_RXNE)) {// 处理接收数据}
}

五、测试数据

测试条件预期值实测值误差
空载校准0.000 kg0.002 kg±0.2g
1kg砝码测试1.000 kg1.005 kg±0.5g
5kg满量程测试5.000 kg5.012 kg±0.24g
温度漂移 (25℃→45℃)±0.02% FS±0.018% FS达标

六、扩展功能

  1. RS485通信:通过MAX485模块实现MODBUS协议传输
  2. 数字滤波:添加卡尔曼滤波算法提升稳定性
  3. 过载保护:检测ADC溢出标志位并触发报警
  4. 低功耗模式:待机时关闭ADC时钟,功耗<1mW

参考代码 使用STM32F4系列ARM-CPU和CS5530 24位SDADC的称重传感器应用程序 www.youwenfan.com/contentcsk/69521.html

七、完整代码结构

project/
├── Src/
│   ├── main.c
│   ├── spi.c
│   ├── cs5530.c
│   └── calibration.h
├── Inc/
│   ├── main.h
│   ├── stm32f4xx_hal_conf.h
│   └── eeprom.h
├── Drivers/
│   ├── CMSIS/
│   └── STM32F4xx_HAL_Driver/
└── Middlewares/└── FatFs/

通过上述方案,基于STM32F4和CS5530的称重系统可实现:

  • 分辨率:0.1mg(24位ADC + 128倍过采样)
  • 非线性度:<±0.02% FS
  • 长期稳定性:<±0.05% FS/年
http://www.dtcms.com/a/544863.html

相关文章:

  • 一文深入学习Java动态代理-JDK动态代理和CGLIB
  • 嵌入式开发学习日志42——stm32之SPI工作方式
  • 网站是什么时候出现的淄博市建设局网站首页
  • MATLAB高效算法实战:30倍提速秘籍
  • 开发个网站开票名称是什么开源做网站需要申请账号吗
  • 从PLY到3DTiles:GISBox助力三维数据格式转换全流程
  • 在 PowerPoint 中自动化创建图表:使用 Spire.Presentation for Java 轻松实现数据可视化
  • day02(10.29)——leetcode面试经典150
  • 实战:用Matplotlib将爬取的CSV数据变成直观图表
  • python数据分析项目之:房地产数据可视化分析
  • 银川微信网站开发一块地需要多少钱
  • Unity编辑器扩展入门篇 - Unity Assets菜单
  • html中音乐网站怎么做自助建站系统建的网站做排名吗
  • 【Linux命令】对ps -ef命令的输出的解读
  • 第二届大数据、神经网络与深度学习研讨会(BDNNDL 2025)
  • 2025年免费aippt排行
  • 【大模型】理论基础(1):函数与神经网络
  • 认识主板总结与硬件工程师岗位笔试面试题集
  • Spring Boot Actuator 监控机制解析
  • 建设网站协议范本哈尔滨制作网页公司
  • 文章修改网站旅游管理论文题目选题
  • Rabbitmq扇形队列取消绑定交换机之后任然接收消息问题
  • 网站正在建设中代码哪个软件发视频可以赚钱
  • web网页开发,天气可视化开发,基于Python,FlaskWeb,无数据,数据写死
  • S11e Protocol:重塑品牌资产的 Web3 RWA 基础设施革命
  • 34_AI智能体工具插件之动态注册钉钉待办工具构建企业级任务管理AI助手
  • Java 大视界 -- Java 大数据在智慧文旅旅游线路规划与游客流量均衡调控中的应用实践
  • 33_AI智能体工具插件之钉钉API交互工具封装构建企业级AI应用
  • 数字孪生热力图可视化为何被广泛应用?
  • 国内免费可商用图片素材网站孝感做招聘信息的网站