你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
为你存在卡卡 提问时间:2016-10-26 21:09 /

导师让我设计一个基于STM32F407芯片的液压控制器,希望外接一个16位的AD转换器来提高精度,求各位大神如何采集外部16位AD芯片的 16位数据信号
收藏 1 评论15 发布时间:2016-10-26 21:09

举报

15个回答
peter001 回答时间:2016-10-29 08:52:17
沙发,哈哈
peter001 回答时间:2016-10-29 08:53:41
其实可以通过过采样的方式提高分辨率,如果你对速度要求不高,外部16位AD需要看你具体接口,读数据手册吧

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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[i]=data;

}

break;

}

AD7606_CS_H();

}

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

anywill 回答时间:2016-10-29 08:55:01
STM32控制AD7606 进行16位数据采集
andrewz 回答时间:2016-10-29 09:39:56
看AD的接口是什么啊

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

黑皮男 回答时间:2016-10-29 12:25:17
得看AD采用的是哪种通信接口,具体看AD数据手册

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间: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系列,可串列,並列控制!!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

samhong 回答时间:2016-10-31 00:30:15
签到,好多内容,谢谢!
迷你小子 回答时间:2016-10-31 12:24:15
用ADI的   SPI 接口
andypanfan 回答时间:2016-11-1 09:23:40
使用  AD  芯片  比较靠谱!!!
zero99 回答时间:2016-11-1 11:24:07
楼主解决没
beijk222 回答时间:2016-11-1 11:41:48
自带的只有12位AD。
要是13/14位还能勉强应付,16位只能外接AD芯片了
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版