|
“ADS1220是一款24位ADC芯片,內(nèi)部集成PGA、基準(zhǔn)電壓和可編程電流源,可用于溫度傳感器和電橋式傳感器的測量等。本文主要介紹如何配置STM32的SPI接口驅(qū)動(dòng)ADS1220。”
01
—
STM32配置
首先,查閱手冊知道,該器件支持SPI接口。且明確了時(shí)鐘極性和相位:
satuzjncrl464048943920.png (98.01 KB, 下載次數(shù): 0)
下載附件
保存到相冊
satuzjncrl464048943920.png
2024-10-5 23:00 上傳
通過STM32CubeMX配置SPI接口如下:
gni131djtkp64048944020.png (37.84 KB, 下載次數(shù): 1)
下載附件
保存到相冊
gni131djtkp64048944020.png
2024-10-5 23:00 上傳
生成代碼后添加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ù)的命令需要附加信息作為指令的一部分。
0rpctye4ld164048944121.png (56.1 KB, 下載次數(shù): 0)
下載附件
保存到相冊
0rpctye4ld164048944121.png
2024-10-5 23:00 上傳
其寄存器有以下幾個(gè),具體內(nèi)容詳見數(shù)據(jù)手冊。
xrknojnc03164048944221.png (42.89 KB, 下載次數(shù): 0)
下載附件
保存到相冊
xrknojnc03164048944221.png
2024-10-5 23:00 上傳
使用時(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ì)你有所幫助,也歡迎推薦分享給其他人。
diljdycruye64048944321.jpg (17.95 KB, 下載次數(shù): 0)
下載附件
保存到相冊
diljdycruye64048944321.jpg
2024-10-5 23:00 上傳
|
|