微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 基于STM32F103的ADS8361,两通道模拟转换驱动程序

基于STM32F103的ADS8361,两通道模拟转换驱动程序

时间:10-02 整理:3721RD 点击:

本文基于stm32f103的ADS8361两通道模拟转换驱动程序

附件包含文件:

ADS8361.C

ADS8361.H

hw_config.c

hw_config.h

ADS8361.C文件为AD的模式选择引脚的初始化程序

/****************************AD_MODE_CONFIG******************************************
M0--M1--A0--TWO CHANNEL FOUR--CHANNEL OPERATION--DATA ON SERIAL OUTPUTS CHANNELS CONVERTED
0       0      0          Two-Channel                  A and B                                  A0 and B0
0       0      1          Two-Channel                  A and B                                  A1 and B1
0       1      0          Two-Channel                  A Only                                    A0 and B0
0       1      1          Two-Channel                  A Only                                    A1 and B1
1       0     X           Four-Channel                 A and B                                 Sequential
1       1     X           Four-Channel                 A Only                                    Sequential
********************************************************************************/

hw_config.c文件为初始化SPI和定时器5。

下面 介绍在定时器中采集两通道数据如下:

uint16_t adc_out[4];

uint8_t adc_out_buffer[4];

adc_out[0]=SPIx_ReadWriteByte(0x8000);

adc_out[1]=SPIx_ReadWriteByte(0x0000);

adc_out[2]=SPIx_ReadWriteByte(0x8000);

adc_out[3]=SPIx_ReadWriteByte(0x0000);

后根据时序图,对采集到的数据进行处理

/**************A0通道数据*******************/

adc_out_buffer[0]=(adc_out[0]>>5)&0x00ff;
adc_out_buffer[1]=((adc_out[0]<<3)+(adc_out[1]>>13))&0x00ff;

/**************B0通道数据*******************/

adc_out_buffer[2]=(adc_out[2]>>5)&0x00ff;
adc_out_buffer[3]=((adc_out[2]<<3)+(adc_out[3]>>13))&0x00ff;

支持下

Hi Rong,

非常感谢你的分享,是一篇很精彩的技术贴

没来得及细看你的程序,请问你应该是用MCU的MOSI作为ADC的RD引脚吧?

另外,你的SPI好像也只有16位的数据长度,你是采用什么方法确保SPI 连续发送数据的呢?

Best wishes

Martin Li

是用MOSI作为AD的RD引脚

连续发是根据程序需要把如下放在调用函数里或定时中断里的,

uint16_t adc_out[4];

uint8_t adc_out_buffer[4];

adc_out[0]=SPIx_ReadWriteByte(0x8000);

adc_out[1]=SPIx_ReadWriteByte(0x0000);

adc_out[2]=SPIx_ReadWriteByte(0x8000);

adc_out[3]=SPIx_ReadWriteByte(0x0000);

SPI是16位,每次采集一个点是实际发送的是两个十六位数据,

adc_out[0]=SPIx_ReadWriteByte(0x8000);

adc_out[1]=SPIx_ReadWriteByte(0x0000);

adc_out[2]=SPIx_ReadWriteByte(0x8000);

adc_out[3]=SPIx_ReadWriteByte(0x0000);

然后下面进行数据处理

比如一个点的确切数据应该是

adc_out_buffer[0]=(adc_out[0]>>5)&0x00ff;
adc_out_buffer[1]=((adc_out[0]<<3)+(adc_out[1]>>13))&0x00ff;

如果要判断是什么通道需要在前面添加判断adc_out_buffer[0]的第15位是0还是1

 

需将您的分享作品的链接,在此活动帖下跟帖贴出,才能给您评奖。

http://bbs.21ic.com/icview-709594-1-1.html

您好,请问可以把您的STM32控制ADS8361的全部程序给我一份吗?邮箱957673760@qq.com  有偿也可以

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top