123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef __ADS1256TB_H
- #define __ADS1256TB_H
- #include "stm32l4xx_hal.h"
- // ==== 命令定义 ====
- #define CMD_WAKEUP 0x00 // 从休眠模式唤醒(必须在 SYNC 后使用)退出待机模式
- #define CMD_RDATA 0x01 // 读取数据(一次性读取当前结果)
- #define CMD_RDATAC 0x03 // 启动连续数据读取模式
- #define CMD_SDATAC 0x0F // 停止连续数据读取模式
- #define CMD_RREG 0x10 // 读取寄存器命令(后跟寄存器地址和数量)
- #define CMD_WREG 0x50 // 写寄存器命令(后跟寄存器地址和数量)
- #define CMD_SELFCAL 0xF0 // 启动偏移和增益自动校准
- #define CMD_SYNC 0xFC // 同步命令(等待转换)
- #define CMD_STANDBY 0xFD // 进入低功耗待机模式
- #define CMD_RESET 0xFE // 复位芯片
- // ==== 寄存器定义 ====
- #define REG_STATUS 0x00 // 状态寄存器:时钟选择、自动校准、缓冲使能等
- #define REG_MUX 0x01 // 多路复用器设置:选择输入通道 AINp 和 AINn
- #define REG_ADCON 0x02 // A/D 控制寄存器:增益选择、时钟配置
- #define REG_DRATE 0x03 // 数据速率设置寄存器
- // ==== 增益 ====
- #define GAIN_1 0x00
- // ==== 数据率 ====
- #define DRATE_30000SPS 0xF0 // 30000 采样/秒
- #define DRATE_15000SPS 0xE0 // 15000
- #define DRATE_7500SPS 0xD0 // 7500
- #define DRATE_3750SPS 0xC0 // 3750
- #define DRATE_2000SPS 0xB0 // 2000
- #define DRATE_1000SPS 0xA1 // 1000(推荐默认)
- #define DRATE_500SPS 0x92 // 500
- #define DRATE_100SPS 0x82 // 100
- #define DRATE_60SPS 0x72 // 60
- #define DRATE_50SPS 0x63 // 50
- #define DRATE_30SPS 0x53 // 30
- #define DRATE_25SPS 0x43 // 25
- #define DRATE_15SPS 0x33 // 15
- #define DRATE_10SPS 0x23 // 10
- #define DRATE_5SPS 0x13 // 5
- #define DRATE_2_5SPS 0x03 // 2.5(最低速)
- /*
- 数据速率(SPS) 有效位数(ENOB) 噪声 RMS (µV)
- 2.5 SPS ~23 位 ~0.3 µV
- 10 SPS ~22 位 ~0.5 µV
- 100 SPS ~20 位 ~2.5 µV
- 1000 SPS ~17 位 ~20 µV
- 30000 SPS ~12 位 ~500 µV
- */
- // ==== MUX 输入 ====
- #define MUX_AIN0 0x00
- #define MUX_AIN1 0x10
- #define MUX_AIN2 0x20
- #define MUX_AINCOM 0x08
- // 1 = 单通道(单端),2 = 双通道(差分)
- #define ADS1256_INPUT_MODE 1
- // ========== 单端输入通道配置 (AINx - AINCOM) ==========
- #define ADS1256_MUX_AIN0_AINCOM 0x08 // AIN0 - AINCOM
- #define ADS1256_MUX_AIN1_AINCOM 0x18 // AIN1 - AINCOM
- #define ADS1256_MUX_AIN2_AINCOM 0x28 // AIN2 - AINCOM
- #define ADS1256_MUX_AIN3_AINCOM 0x38 // AIN3 - AINCOM
- #define ADS1256_MUX_AIN4_AINCOM 0x48 // AIN4 - AINCOM
- #define ADS1256_MUX_AIN5_AINCOM 0x58 // AIN5 - AINCOM
- #define ADS1256_MUX_AIN6_AINCOM 0x68 // AIN6 - AINCOM
- #define ADS1256_MUX_AIN7_AINCOM 0x78 // AIN7 - AINCOM
- // ========== 差分输入通道配置 (AINp - AINn) ==========
- #define ADS1256_MUX_AIN0_AIN1 0x01 // AIN0 - AIN1
- #define ADS1256_MUX_AIN2_AIN3 0x23 // AIN2 - AIN3
- #define ADS1256_MUX_AIN4_AIN5 0x45 // AIN4 - AIN5
- #define ADS1256_MUX_AIN6_AIN7 0x67 // AIN6 - AIN7
- // ==== 接口定义 ====
- #define ADS1256_CS_LOW() HAL_GPIO_WritePin(GPIOA, SPI_CS_Pin, GPIO_PIN_RESET)
- #define ADS1256_CS_HIGH() HAL_GPIO_WritePin(GPIOA, SPI_CS_Pin, GPIO_PIN_SET)
- #define ADS1256_DRDY_Read() HAL_GPIO_ReadPin(ADS_DRDY_GPIO_Port, ADS_DRDY_Pin)
- // ==== 声明 ====
- void ADS1256_Init(SPI_HandleTypeDef *hspi);
- void ADS1256_SetChannel(uint8_t mux_pos);
- int32_t ADS1256_ReadChannel(uint8_t channel);
- int32_t ADS1256_Readdata(void);
- float ADS1256_ConvertToVoltage(int32_t adc_val, float vref, uint8_t gain);
- #endif
|