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

求助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

查看全部评分

12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版