工程文件放在最前
stm32l151-1262(ad1大).7z
(1.4 MB, 下載次數: 303)
2019-9-7 18:18 上傳
點擊文件名下載附件
最近在做一個項目,里面用到了ADS1262,寫了好久才把芯片驅動寫好,想在這分享出來給大家。
控制芯片我用的是STM32L151系列
通過SPI接口與AD芯片通信
將采集到的電壓信號通過串口打印出來
ADS1262原理圖
這是ADS1262的原理圖
下面是不分代碼,完整工程代碼請下載壓縮文件。
- //讀寄存器
- void ADS1262ReadRegister(int StartAddress, int NumRegs, unsigned char *pdata)
- {
- int i;
- DACNCSS(0);
- SPI_DAC_SendByte(0x20 + StartAddress);
- SPI_DAC_SendByte(NumRegs - 1);
- for( i=0;i<NumRegs;i++)
- {
-
- pdata[i] = SPI_DAC_SendByte(0x00);
- }
- DACNCSS(1);
- }
- //寫寄存器
- void ADS1262WriteRegister(int StartAddress, int NumRegs, unsigned char * pdata)
- {
- int i;
- DACNCSS(0);
- SPI_DAC_SendByte(0x40+StartAddress);
- SPI_DAC_SendByte(NumRegs-1);
- for( i=0;i<NumRegs;i++){
- // GPIO_SetBits(GPIOE,GPIO_Pin_13);
- SPI_DAC_SendByte(pdata[i]);
- // GPIO_ResetBits(GPIOE,GPIO_Pin_13);
- }
- DACNCSS(1);
- }
- //讀數據
- int32_t ADS1262ReadData(uint8_t NumBytes, uint8_t DataByteStartNum)
- {
- // assert((4 == NumBytes) || (5 == NumBytes) || (6 == NumBytes)); //Aborts program if FALSE
- // assert((0 == DataByteStartNum) || (1 == DataByteStartNum)); //Aborts program if FALSE
- uint8_t ADC_Bytes[6]; //Holds
- int32_t ADC_Data_Only;
- int i;
- DACNCSS(0);
- for( i = 0; i < NumBytes; ++i)
- ADC_Bytes[i] = SPI_DAC_SendByte(0);
- ADC_Data_Only = ((int32_t)ADC_Bytes[DataByteStartNum + 0] << 24) | //Data MSB
- ((int32_t)ADC_Bytes[DataByteStartNum + 1] << 16) |
- ((int32_t)ADC_Bytes[DataByteStartNum + 2] << 8) |
- ((int32_t)ADC_Bytes[DataByteStartNum + 3] << 0); //Data LSB
- DACNCSS(1);
- return ADC_Data_Only;
- }
- /* Configure Register Settings */
- //配置AD寄存器
- void LoadInitRegSettings(void)
- {
- uint8_t AdcRegData[ADS126x_NUM_REG]; //Stores the register read values
- uint8_t WriteRegData[ADS126x_NUM_REG]; //Stores the register write values
- ADS1262ReadRegister(ID, ADS126x_NUM_REG, AdcRegData); //Read ALL registers
- /* Configure Register Settings */
- WriteRegData[ID] = AdcRegData[ID]; //ID
- WriteRegData[POWER] = 0x11; //POWER (RESET = 0, INTREF = 1)
- WriteRegData[INTERFACE] = INTERFACE_DEFAULT_VALUE; //INTERFACE (STATUS & CRC bytes ON)
- WriteRegData[MODE0] = 0x13; //MODE0 (0x14 chop on;0x04 chop off)
- WriteRegData[MODE1] = 0x00; //MODE1
- WriteRegData[MODE2] = 0x84; //MODE2 (0x04 PGA on;0x84 PGA off )
- WriteRegData[INPMUX] = 0x01; //INPMUX (AINP1 = AIN1, AINN1 = AIN2)
-
- WriteRegData[OFCAL0] = 0x00; //OFCAL0 (reset to default)
- WriteRegData[OFCAL1] = 0x00; //OFCAL1 (reset to default)
- WriteRegData[OFCAL2] = 0x00; //OFCAL2 (reset to default)
-
- WriteRegData[FSCAL0] = 0x00; //FSCAL0 (reset to default)
- WriteRegData[FSCAL1] = 0x00; //FSCAL1 (reset to default)
- WriteRegData[FSCAL2] = 0x40; //FSCAL2 (reset to default)
-
- WriteRegData[IDACMUX] = MUX2_NO_CONM | MUX1_AINCOM; //IDACMUX (IDAC1MUX = AINCOM)
- WriteRegData[IDACMAG] = IDACMAG_DEFAULT_VALUE; //IDACMAG (IDAC1MAG = 500 uA)
- WriteRegData[REFMUX] = REFMUX_DEFAULT_VALUE; //REFMUX (REFP = AIN0, REFN = AIN3)
- WriteRegData[TDACP] = TDACP_DEFAULT_VALUE; //TDACP (reset to default)
- WriteRegData[TDACN] = TDACN_DEFAULT_VALUE; //TDACN (reset to default)
- WriteRegData[GPIOCON] = GPIOCON_DEFAULT_VALUE; //GPIOCON (Enable GPIOs on AIN8 & AIN9)
- WriteRegData[GPIODIR] = GPIODIR_DEFAULT_VALUE; //GPIODIR (reset to default)
- WriteRegData[GPIODAT] = GPIODAT_DEFAULT_VALUE; //GPIODAT (Biases bridge with + polarity)
- #ifdef ADS1263
- WriteRegData[ADC2CFG] = REF2_AIN4_AIN5 | GAIN2_2; //ADC2CFG (REF2 = AIN4/AIN5, GAIN2 = 2 V/V)
- WriteRegData[ADC2MUX] = MUXP2_AIN6 | MUXN2_AIN7; //ADC2MUX (AINP2 = AIN6, AINN2 = AIN7)
- WriteRegData[ADC2OFC0] = ADC2OFC0_DEFAULT_VALUE; //ADC2OFC0 (reset to default)
- WriteRegData[ADC2OFC1] = ADC2OFC1_DEFAULT_VALUE; //ADC2OFC1 (reset to default)
- WriteRegData[ADC2FSC0] = ADC2FSC0_DEFAULT_VALUE; //ADC2FSC0 (reset to default)
- WriteRegData[ADC2FSC1] = ADC2FSC1_DEFAULT_VALUE; //ADC2FSC1 (reset to default)
- #endif
- ADS1262WriteRegister(ID, ADS126x_NUM_REG, &WriteRegData[0]); //Write ALL registers
- //#ifdef CONSOLE_OUTPUT
- // show_parms('0'); //read back registers and output to console
- //#endif
- }
復制代碼 |