|
實(shí)驗(yàn)器材:
stm32f103c8t6最小系統(tǒng),ads8681(ads8685,ads8689)
實(shí)驗(yàn)?zāi)康?
以硬件spi1驅(qū)動(dòng)該ADC芯片工作讀取數(shù)據(jù)
硬件資源:
1.ads8681外圍電路請查看官方文檔設(shè)計(jì)。
2.引腳連接如下:
stm32f103c8t6 ads8681(AD)
PA5-----------------AD_SCK
硬件spi1引腳 PA6----------------AD_SDO_0
PA7-----------------AD_SDI
PB10----------------AD_RVS
PB11----------------AD_RST
PB12----------------AD_CS
其它說明:
1.本實(shí)驗(yàn)只測試了ads8681芯片.根據(jù)官方文檔或可驅(qū)動(dòng)ads8685以及ads8689芯片,具體請自行測試;
2.由于stm32f103c8t6的硬件spi時(shí)鐘最多為18Mhz,所以未能測試ads8681官方文檔所標(biāo)注的1Msps采樣率;
3.代碼中驅(qū)動(dòng)該adc芯片采用的是:Standard SPI with CPOL = 0 and CPHASE = 0 模式,如有需要請自行更改配置;
4.若使用更高速率單片機(jī)驅(qū)動(dòng),請自行研究移植,基本思路一致。
注意事項(xiàng):
注意驅(qū)動(dòng)電壓:
注意正負(fù)極連接短路!
STM32單片機(jī)源程序如下:
- #include "ADS8681.h"
- #include "spi.h"
- #include "delay.h"
- // 復(fù)位
- void ADS8681_RST(){
- AD_RST = 0;
- delay_ms(30);
- AD_RST = 1;
- delay_ms(30);
- }
- void ADS8681_Init(){
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時(shí)鐘
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12; //RST CS
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOB
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RVS
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- SPI1_Init();
- //AD_SCK=0;
- ADS8681_RST();
- ADS8681_Write_Register(0x14,0x000b);//配置電壓測量范圍,具體對應(yīng)地址位14H的寄存器內(nèi)容
- }
- //寫寄存器
- void ADS8681_Write_Register(u8 Addr,u16 data) // 11010_00_<9-bit address>_<16-bit data>
- {
- u16 retry = 0;
- AD_CS = 1;
- AD_CS = 0;
- while(AD_RVS){//判斷RVS狀態(tài),下同
- retry++;
- if(retry>=0XFFFE)
- break;
- }
- SPI1_ReadWriteByte((0xD0<<8)|Addr);
- SPI1_ReadWriteByte(data&0xffff);
- AD_CS = 1;
- }
- // 讀寄存器
- u16 ADS8681_Read_Register(u8 Addr) // 11001_xx_<9-bit address>_00000000_00000000
- {
- u16 data1,data2;
- u16 retry = 0;
- AD_CS = 0;
- while(AD_RVS){
- retry++;
- if(retry>=0Xff)
- break;
- }
- SPI1_ReadWriteByte((0xC8<<8)|Addr);
- SPI1_ReadWriteByte(0x0000);
- AD_CS = 1;
- retry = 0;
- while(!AD_RVS){
- retry++;
- if(retry>=0Xff)
- break;
- }
- AD_CS = 0;
- retry = 0;
- while(AD_RVS){
- retry++;
- if(retry>=0Xff)
- break;
- }
- data1 = SPI1_ReadWriteByte(0x00);//低16位
- data2 = SPI1_ReadWriteByte(0x00);//高16位
- AD_CS = 1;
- return (data2<<16)|data1;
- }
- // 讀取ads8681采樣值
- u32 ADS8681_Read_ConversionData()
- {
- u16 data;
- u16 retry = 0;
- AD_CS = 1;
- while(!AD_RVS){
- retry++;
- if(retry>=0xfffe)
- break;
- }
- AD_CS = 0;
- retry = 0;
- while(AD_RVS){
- retry++;
- if(retry>=0xfffe)
- break;
- }
- data = SPI1_ReadWriteByte(0x00);//里邊的地址任意,該處主要是讀取數(shù)據(jù)
- return data;
-
- }
復(fù)制代碼 致謝:
感謝相關(guān)人員提供的思路以及支持!
聲明:
只為提高技術(shù),歡迎交流,不參與撕逼,如有雷同,純屬巧合。
全部代碼下載:
C8T6_ADS8681硬件spi.7z
(187.23 KB, 下載次數(shù): 175)
2021-7-26 18:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|