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

24位采集卡AD7190用STC51驱动的程序

一、硬件连接与配置

1. 引脚连接

AD7190与STC51的SPI接口连接如下(需根据实际硬件调整引脚):

AD7190引脚 STC51引脚 功能
SCLK P1.0 串行时钟
DIN P1.1 串行数据输入
DOUT P1.2 串行数据输出
CS P1.3 片选(低电平有效)
VREF+ VCC 参考电压(3.3V)
AGND GND 模拟地

2. STC51 SPI模式设置

AD7190要求SPI为软件模拟SPI(因STC51硬件SPI不支持灵活时序调整),需手动控制时钟和数据线。


二、核心代码实现

1. SPI通信函数
#include <reg51.h>sbit SCLK = P1^0;  // 时钟线
sbit DIN  = P1^1;  // 数据输入
sbit DOUT = P1^2;  // 数据输出
sbit CS   = P1^3;  // 片选// SPI写1字节(高位先发)
void SPI_WriteByte(unsigned char data) {for (int i = 0; i < 8; i++) {SCLK = 0;DIN = (data & 0x80) ? 1 : 0;  // 发送高位data <<= 1;SCLK = 1;}
}// SPI读1字节(高位先收)
unsigned char SPI_ReadByte() {unsigned char data = 0;for (int i = 0; i < 8; i++) {SCLK = 0;data <<= 1;SCLK = 1;if (DOUT) data |= 0x01;}return data;
}
2. AD7190复位与初始化
// 软复位AD7190(连续发送40个0xFF)
void AD7190_Reset() {CS = 0;  // 选中芯片for (int i = 0; i < 40; i++) {SPI_WriteByte(0xFF);DelayUs(10);  // 每个脉冲至少10us}CS = 1;  // 释放芯片DelayMs(1);    // 等待500us以上
}// 写入AD7190寄存器(地址+数据)
void AD7190_WriteReg(unsigned char addr, unsigned int data) {CS = 0;SPI_WriteByte(0x40 | addr);  // 通信寄存器:写操作(0x40=01000000)SPI_WriteByte((data >> 16) & 0xFF);  // 高字节SPI_WriteByte((data >> 8) & 0xFF);   // 中字节SPI_WriteByte(data & 0xFF);          // 低字节CS = 1;
}// 读取AD7190寄存器(地址)
unsigned int AD7190_ReadReg(unsigned char addr) {CS = 0;SPI_WriteByte(0x80 | addr);  // 通信寄存器:读操作(0x80=10000000)unsigned int data = SPI_ReadByte() << 16;data |= SPI_ReadByte() << 8;data |= SPI_ReadByte();CS = 1;return data;
}
3. 关键寄存器配置
// 模式寄存器配置(连续转换模式,内部时钟,SINC4滤波器)
#define MODE_REG 0x080C05  // 0000 1000 0000 1100 0000 0101// 配置寄存器配置(差分输入,增益1,通道AIN1-AIN2)
#define CONF_REG 0x800118  // 1000 0000 0000 0001 0001 1000void AD7190_Init() {AD7190_Reset();DelayMs(1);// 写入模式寄存器AD7190_WriteReg(0x01, MODE_REG);// 写入配置寄存器AD7190_WriteReg(0x02, CONF_REG);// 验证ID(应为0x4)unsigned char id = AD7190_ReadReg(0x04) & 0x0F;if (id != 0x04) {while(1);  // 初始化失败}
}
4. 数据读取与转换
// 读取24位ADC数据(差分输入)
long AD7190_ReadADC() {CS = 0;SPI_WriteByte(0x58);  // 通信寄存器:读数据寄存器(0x58=01011000)long data = SPI_ReadByte() << 16;data |= SPI_ReadByte() << 8;data |= SPI_ReadByte();CS = 1;// 转换为电压值(参考电压3.3V)return (data * 3300.0) / 16777216;  // 单极性模式
}// 主循环示例
void main() {AD7190_Init();while(1) {long adc_val = AD7190_ReadADC();printf("ADC Value: %ld mV\r\n", adc_val);DelayMs(100);}
}

三、关键问题与解决方案

  1. SPI时序不匹配
    • 问题:STC51的SPI速度可能过快,导致AD7190无法解析数据。
    • 解决:在SPI_WriteByteSPI_ReadByte中添加延时(如DelayUs(1))。
  2. 数据溢出
    • 问题:24位数据超出8位变量范围。
    • 解决:使用unsigned long类型存储数据,并手动拼接高低字节。
  3. 参考电压漂移
    • 问题:VREF不稳定导致测量误差。
    • 解决:通过校准寄存器(0x06-0x07)进行失调和满量程校准。

参考代码 24位采集卡AD7190用STC51驱动的程序 www.youwenfan.com/contentcnq/70440.html

四、扩展功能

  1. 多通道切换

    修改配置寄存器的CONF_CHAN位(位8-15),支持AIN1-AIN4通道切换。

    #define CONF_CHAN_CH1 0x000100  // 通道1(AIN1-AIN2)
    #define CONF_CHAN_CH2 0x000200  // 通道2(AIN3-AIN4)
    
  2. 滤波器优化

    调整模式寄存器的MODE_SINC3MODE_RATE位,平衡噪声与带宽。

    #define MODE_SINC3_FILTER 0x00080000  // 启用SINC3滤波器
    

五、调试建议

  1. 逻辑分析仪验证

    使用逻辑分析仪捕获SPI通信波形,确认命令和数据帧格式正确。

  2. 参考电压校准

    通过AD7190_WriteReg(0x06, 0x800000)写入失调校准值,补偿零点误差。

  3. 实时监控

    在串口打印ADC值,观察是否随输入信号变化。

http://www.jsqmd.com/news/337789/

相关文章:

  • 计算机SSM毕设实战-基于ssm的铜产品商城管理系统铜工业品工艺品销售管理商城的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 美国AI求职服务哪家高效:AI服务独家攻略 - 技研备忘录
  • AI智能体开发概念-MCP简介 - 努力-
  • 【课程设计/毕业设计】基于ssm的铜产品商城销售管理系统铜金属货源采购批发零售平台【附源码、数据库、万字文档】
  • 2026 技术实测:域前置(Domain Fronting)未死?EdgeOne 的深度“奇技淫巧”
  • 2026年四川江苏靠谱的陶坛生产企业盘点,有经验的厂家别错过 - mypinpai
  • 学霸同款8个降AIGC平台 千笔·专业降AI率智能体解决论文查重难题
  • 2026国内最新板材十大源头厂家推荐!山东等地优质板材品牌权威榜单发布,资质服务双优助力高品质家居 - 品牌推荐2026
  • 拒绝工业铁柜,适合豪宅的高端保险箱品牌排行榜 - 博客万
  • 【扫盲】大模型部署落地相关技术栈
  • 直接上硬货!最近用STM32F103搞了个数控Buck电源,实测效率干到96%,能通过程序直接调电压,这玩意做出来是真的爽。咱们不整虚的,直接拆开看门道
  • 沃尔玛购物卡回收怎么选?五大标准教你避开陷阱 - 京回收小程序
  • 计算机SSM毕设实战-基于ssm的常熟非物质文化遗产展示平台非遗数字化管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 瑞祥商联卡回收三步到账,正规平台实现快速回收 - 京回收小程序
  • 计算机毕业设计之springboot基于微信小程序的图书馆座位管理系统的设计与实现
  • 【无人机控制】基于matlab无人机集群完成污染物云团的追踪与监测任务,无人机动力学模型、机间通信协议、电池续航限制、云团扩散模型【含Matlab源码 15056期】
  • 五大关键指标筛选优质音乐喷泉厂家:2026年喷泉厂家权威推荐清单 - 深度智识库
  • 吴恩达深度学习课程五:自然语言处理 第三周:序列模型与注意力机制(四)语音识别和触发字检测
  • 收藏!DeepSeek薪资刷新行业认知,程序员/大模型小白必看,顶薪岗位无经验可投
  • 2026成都消防设施操作员培训机构推荐 - 深度智识库
  • 渠道数据采集方法有哪些?国内好用的渠道数据采集/渠道数据管理服务商推荐 - 麦麦唛
  • 实用指南:机器学习日报06
  • Comsol弱形式求解三维光子晶体能带
  • AI大模型时代:谁在摧毁2025年中国的企业软件产业?白嫖,开源,外包,招标,数科,AI...
  • 2026年湖北武汉二手房买卖/新房分销/工抵房分销/商铺买卖/写字楼买卖服务商推荐指南 - 2026年企业推荐榜
  • 必收藏|Java后端转大模型保姆级指南,小白程序员也能轻松入门不踩坑
  • 供暖季来临,盘点那些备受好评的散热器品牌,工业暖风机/散热器/高大空间冷暖风机/干冷器/乏风取热箱,散热器厂商排行榜单 - 品牌推荐师
  • 2026年全国地坪漆厂家权威榜单 全场景适配 技术与品质双优全景解析 - 深度智识库
  • 从原理看LuatOS 框架的嵌入式设计架构
  • 2026华东户外照明品牌采购指南:路灯/景观灯/交通信号灯/智慧路灯/文创灯 - 深度智识库