为你存在卡卡 发表于 2016-10-26 21:09:03

求助STM32F407 如何采集外接的一个16位AD数据信号


导师让我设计一个基于STM32F407芯片的液压控制器,希望外接一个16位的AD转换器来提高精度,求各位大神如何采集外部16位AD芯片的 16位数据信号

peter001 发表于 2016-10-29 08:52:17

沙发,哈哈

peter001 发表于 2016-10-29 08:53:41

其实可以通过过采样的方式提高分辨率,如果你对速度要求不高,外部16位AD需要看你具体接口,读数据手册吧

anywill 发表于 2016-10-29 08:54:43

#include "stm32f10x_lib.h"

#include "main.h"

#define AD7606_CS_H() {GPIOB->BSRR = GPIO_Pin_0;} // 置 “1”

#define AD7606_CS_L() {GPIOB->BRR = GPIO_Pin_0;} // 置 “0”

#define AD7606_CLK_H() {GPIOB->BSRR = GPIO_Pin_13;}

#define AD7606_CLK_L() {GPIOB->BRR = GPIO_Pin_13;}

#define AD7606_OS0_H() {GPIOE->BSRR = GPIO_Pin_9;}

#define AD7606_OS0_L() {GPIOE->BRR = GPIO_Pin_9;}

#define AD7606_OS1_H() {GPIOE->BSRR = GPIO_Pin_8;}

#define AD7606_OS1_L() {GPIOE->BRR = GPIO_Pin_8;}

#define AD7606_OS2_H() {GPIOB->BSRR = GPIO_Pin_2;}

#define AD7606_OS2_L() {GPIOB->BRR = GPIO_Pin_2;}

#define AD7606_Reset_ON() {GPIOB->BSRR = GPIO_Pin_1;} // ___|ˉˉˉˉˉ        (0 -> 1)        >= 50ns

#define AD7606_Reset_OFF() {GPIOB->BRR = GPIO_Pin_1;}        //        ˉˉˉˉ|_____ (1 -> 0)

#define AD7606_CONVT_ON() {GPIOB->BRR = GPIO_Pin_6;} // ˉˉˉˉ|____ (1 -> 0)        开始转换/脉冲

#define AD7606_CONVT_OFF() {GPIOB->BSRR = GPIO_Pin_6;} // ___|ˉˉˉˉ (0 -> 1)        >= 25ns

/*******************************************************************************

* Function Name : AD7606_Int

* Description : ADC7606 Int

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void AD7606_Int(void)

{

AD7606_OS0_L();

AD7606_OS1_L();

AD7606_OS2_L(); // 无过采样

AD7606_CLK_H();

AD7606_Reset_ON();

AD7606_Reset_ON();

AD7606_Reset_ON();

AD7606_Reset_OFF();

AD7606_Reset_OFF();

AD7606_Reset_OFF();

}

/*******************************************************************************

* Function Name : AD7606_Read

* Description : ADC7606 Data Get

* Input : None

* Output : None

* Return : None

*******************************************************************************/

void AD7606_Read(void)

{

u8 i,ii;

u16 data;

AD7606_CS_L();

AD7606_CONVT_ON();

AD7606_CONVT_OFF();

AD7606_CLK_L();

data=0;

while((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14)) == 0){        // 等待 BUSY 信号变低

for(i=0;i<8;i++){        // 采集8个通道数据,每通道16个脉冲

for(ii=16;ii>0;ii--){

data <<= 1;

data |= (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5));

AD7606_CLK_H();

AD7606_CLK_H();

AD7606_CLK_L();

AD7606_CLK_L();

}

ADC_buf=data;

}

break;

}

AD7606_CS_H();

}

anywill 发表于 2016-10-29 08:55:01

STM32控制AD7606 进行16位数据采集

andrewz 发表于 2016-10-29 09:39:56

看AD的接口是什么啊

黑皮男 发表于 2016-10-29 12:25:17

得看AD采用的是哪种通信接口,具体看AD数据手册

无薪税绵 发表于 2016-10-29 15:02:42

建议用SPI接口的AD芯片。

笑鸟007 发表于 2016-10-30 10:11:33

签到!!!

arno_gsm 发表于 2016-10-31 00:17:22

經過STM32F407的FSMC介面並列讀ADC效率最高!!可選analog devices的ADC7606系列,可串列,並列控制!!
页: [1] 2
查看完整版本: 求助STM32F407 如何采集外接的一个16位AD数据信号