電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 51|回復(fù): 0
收起左側(cè)

SPI應(yīng)用之驅(qū)動(dòng)ADS1220

[復(fù)制鏈接]

454

主題

454

帖子

2398

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
2398
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-4-9 00:07:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
ADS1220是一款24位ADC芯片,內(nèi)部集成PGA、基準(zhǔn)電壓和可編程電流源,可用于溫度傳感器和電橋式傳感器的測量等。本文主要介紹如何配置STM32的SPI接口驅(qū)動(dòng)ADS1220。


01


STM32配置

首先,查閱手冊知道,該器件支持SPI接口。且明確了時(shí)鐘極性和相位:

通過STM32CubeMX配置SPI接口如下:


生成代碼后添加ADS1220讀寫函數(shù):
  • void ADS1220SendByte(unsigned char Byte){    HAL_SPI_Transmit(&hspi1,&Byte,1,10);   }
    unsigned char ADS1220ReceiveByte(){  unsigned char SData = 0xff ,Result = 0;
      HAL_SPI_TransmitReceive(&hspi1,&SData,&Result,1,10);  return Result;}

    02


    ADS1220操作

    該器件通過六種不同命令控制器件的工作狀態(tài)。其中四種命令為獨(dú)立指令(RESET、
    START/SYNC、POWERDOWN 和 RDATA)。器件讀取 (RREG) 和向器件寫入(WREG)配置寄存器數(shù)據(jù)的命令需要附加信息作為指令的一部分。

    其寄存器有以下幾個(gè),具體內(nèi)容詳見數(shù)據(jù)手冊。

    使用時(shí),首先要對(duì)器件進(jìn)行初始化配置,通過WREG指令寫寄存器。首先寫入WREG指令(該指令包含了要寫的寄存器的起始地址和寄存器個(gè)數(shù)),然后寫入n個(gè)寄存器數(shù)據(jù),程序如下:
  • /********************************函數(shù)功能:寫寄存器*入口參數(shù):*  StartAddress--起始地址*  NumRegs--寄存器格式*  pData--要寫入的數(shù)據(jù)*出口參數(shù):無******************************/void ADS1220WriteRegister(int StartAddress, int NumRegs, unsigned char * pData){  int i;     /* assert CS to start transfer */  ADS1220AssertCS(1);     /* send the command byte */  ADS1220SendByte( ADS1220_CMD_WREG | (((StartAddress2) & 0x0c) |((NumRegs-1)&0x03)));    /* send the data bytes */  for (i=0; i  {    ADS1220SendByte(*pData++);  }     /* de-assert CS */  ADS1220AssertCS(0);     return;}
    用戶根據(jù)自己的需求及每個(gè)寄存器的功能,寫入相應(yīng)的寄存器即可。
    其次就是需要讀取ADS1220的數(shù)據(jù),ADS1220讀取數(shù)據(jù)有很多種方式,這里介紹通過RDATA指令讀取數(shù)據(jù)的方式。在數(shù)據(jù)手冊時(shí)序圖中可以看到,需要主機(jī)發(fā)送RDATA指令,隨后連續(xù)讀取3個(gè)字節(jié)數(shù)據(jù)(ADS1120為16位ADC,只需讀2個(gè)字節(jié))。編寫程序如下:
  • long ADS1220ReadData(){  long Data;  /* assert CS to start transfer */  ADS1220AssertCS(1);  /* send the command byte */  ADS1220SendByte(ADS1220_CMD_RDATA);  /* get the conversion result */#ifdef ADS1120  Data = ADS1220ReceiveByte();  Data = (Data 8) | ADS1220ReceiveByte();  /* sign extend data */  if (Data & 0x8000)    Data |= 0xffff0000;#else  Data = ADS1220ReceiveByte();  Data = (Data 8) | ADS1220ReceiveByte();  Data = (Data 8) | ADS1220ReceiveByte();  /* sign extend data */  if (Data & 0x800000)    Data |= 0xff000000; #endif  /* de-assert CS */  ADS1220AssertCS(0);  return Data;}至此,ADS1220的基本驅(qū)動(dòng)已完成,該器件工作方式有很多種,使用靈活,需要用戶根據(jù)自己需求進(jìn)行配置和使用。

    歡迎關(guān)注公眾號(hào)"嵌入式技術(shù)開發(fā)",大家可以后臺(tái)給我留言溝通交流。如果覺得該公眾號(hào)對(duì)你有所幫助,也歡迎推薦分享給其他人。
  • 發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表