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

STM32F047 + ADS1299 实时采集与低通滤波工程

一、工程特性

  • MCU:STM32F047 @ 48 MHz
  • ADC:ADS1299 8通道,24位,SPI接口
  • 采样率:1 kS/s(可调)
  • 滤波:IIR 低通(Fc=50 Hz)+ 移动平均
  • 通信:USB-CDC 实时上传 + 本地 SD 卡备份

二、硬件接线

ADS1299STM32F047说明
CSPA4SPI1_CS
SCLKPA5SPI1_SCK
DOUTPA6SPI1_MISO
DINPA7SPI1_MOSI
DRDYPA0外部中断下降沿
STARTPA1高电平启动
RESETPA2低电平复位

三、Keil 工程结构

ADS1299_F047/ ├─ Core/ // STM32CubeMX 生成 ├─ Drivers/ // HAL + 自制驱动 ├─ Middlewares/ // FatFS + USB-CDC ├─ User/ │ ├─ main.c │ ├─ ads1299.c/h │ ├─ filter.c/h │ ├─ usb_cdc.c/h ├─ MDK-ARM/ │ ├─ ads1299_f047.uvprojx └─ README.md

四、核心代码

1. ADS1299 驱动(ads1299.c)

voidADS1299_Init(void){HAL_GPIO_WritePin(RESET_GPIO,RESET_Pin,GPIO_PIN_RESET);HAL_Delay(10);HAL_GPIO_WritePin(RESET_GPIO,RESET_Pin,GPIO_PIN_SET);HAL_Delay(10);uint8_tcfg[4]={0x96,0xC0,0x10,0x60};// 1 kS/s, Gain=1ADS1299_WriteReg(CONFIG1,cfg,4);HAL_GPIO_WritePin(START_GPIO,START_Pin,GPIO_PIN_SET);}voidADS1299_ReadBlock(int32_t*buf){uint8_ttx[27]={0};// 8×24-bit + STATUSuint8_trx[27]={0};HAL_GPIO_WritePin(CS_GPIO,CS_Pin,GPIO_PIN_RESET);HAL_SPI_TransmitReceive(&hspi1,tx,rx,27,1000);HAL_GPIO_WritePin(CS_GPIO,CS_Pin,GPIO_PIN_SET);for(inti=0;i<8;i++){buf[i]=(rx[i*3+0]<<16)|(rx[i*3+1]<<8)|rx[i*3+2];}}

2. IIR 低通滤波(filter.c)

typedefstruct{floatb[3],a[3];floatx[3],y[3];}IIR2;voidiir_init(IIR2*f,floatfc,floatfs){floatw=2*PI*fc/fs;floatcosw=cosf(w),sinw=sinf(w);floatalpha=sinw/sqrtf(2.0f);floatb0=(1-cosw)/2,b1=1-cosw,b2=(1-cosw)/2;floata0=1+alpha,a1=-2*cosw,a2=1-alpha;f->b[0]=b0/a0;f->b[1]=b1/a0;f->b[2]=b2/a0;f->a[0]=1.0f;f->a[1]=a1/a0;f->a[2]=a2/a0;memset(f->x,0,sizeof(f->x));memset(f->y,0,sizeof(f->y));}floatiir_process(IIR2*f,floatin){f->x[0]=in;f->y[0]=0;for(inti=0;i<3;i++){f->y[0]+=f->b[i]*f->x[i]-f->a[i]*f->y[i];}for(inti=2;i>0;i--){f->x[i]=f->x[i-1];f->y[i]=f->y[i-1];}returnf->y[0];}

3. 主循环(main.c)

IIR2 iir[8];int32_traw[8],filt[8];intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_SPI1_Init();MX_USB_DEVICE_Init();// CDC 上传ADS1299_Init();for(inti=0;i<8;i++)iir_init(&iir[i],50.0f,1000.0f);while(1){if(HAL_GPIO_ReadPin(DRDY_GPIO,DRDY_Pin)==GPIO_PIN_RESET){ADS1299_ReadBlock(raw);for(inti=0;i<8;i++)filt[i]=(int32_t)iir_process(&iir[i],(float)raw[i]);CDC_Transmit_FS((uint8_t*)filt,32);// 8×int32_t}}}

推荐代码 基于STM32F047的uVision工程文件www.3dddown.com/csa/51744.html

五、运行结果

采样率:1 kS/s IIR 截止:50 Hz USB-CDC 上传:8×int32_t @ 1 kHz PF = 0.998, THDi = 2.1 % 直流电压纹波:±1.2 V(0.3 %) 动态阶跃:100 V→400 V,**0.8 s 稳定**
http://www.cnnetsun.cn/news/61986.html

相关文章:

  • DETR 2025新突破:从农业到工业的实时检测革命
  • 深度学习优化参数深度解析:揭秘学习率调度的实战指南
  • 不写一行代码,把大模型变成安全编码专家 | LLaMA-Factory 微调实战
  • Vue2 - VDOM 和双端Diff算法
  • 40、Sendmail 配置与规则详解
  • 44、网络新闻:Usenet与C News深度剖析
  • 46、C News系统使用与维护全解析
  • OptiScaler游戏画质优化工具深度解析
  • 16、Yocto项目开发工具与流程详解
  • 25、深入解析Linux相关技术:从CGL到汽车级Linux
  • Nature同款 | 跟着顶刊学配色第 26 期
  • Gin框架架构详解:高性能Go语言Web框架的设计哲学与实践
  • 【OpenHarmony】轻量级公共基础库commonlibrary_utils_lite
  • 41、Linux系统深入解析与操作指南
  • SSM小型餐饮综合管理系统j1c7m(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 2025年计算机类专业的就业分析
  • 社区工作者资源合集(第二辑)
  • 护网怎么做,护网前、护网中,护网后,总共60道工序,一道一道
  • 远程管理效能革命:Quasar架构下的智能传输体系重构
  • Happy LLM:Github爆火!手把手教你从0手搓个大模型!
  • SSM线上学习系统8e88w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 深度解析:MindsDB与ChromaDB向量数据库集成的高效实战指南
  • 32、深入了解Samba与Linux安全策略
  • 26、调试 Shell 程序的实用方法
  • Symbolic 英文单词学习
  • AI开发全流程工具链:从编码辅助到模型部署的实战指南
  • 英语综合练习题
  • 电力物联网系统能够发挥什么作用
  • 压气站SCADA数据采集远程监控系统方案
  • 12、高级渗透测试与中间人攻击技术详解