ADS1256tb.h 3.6 KB

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