OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 151|回复: 3

大佬们,求助一个STM32F4通过SPI驱动高速ADC的问题

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2020-9-24
在线时间
25 小时
发表于 3 天前 | 显示全部楼层 |阅读模式
15金钱
大佬们,我最近有个需求,要用单片机对一个正负电压信号实现不低于500kHz的采样。之前我是用F407内部ADC+DMA+外部模拟偏置电路实现的;现在我想提高采样精度,准备用STM32控制TI的ADS8681芯片(SPI接口,双极性输入,最高1M采样率),实现高速正负电压采样。


但是因为之前对SPI不太了解,本来我想的是同样通过SPI+DMA实现高速数据采集,但是在实操过程中遇到很大的问题:
1.ADS8681只能作为SPI从机,需要单片机执行SPI_TransmitReceive_DMA才能产生SPI时钟,无法像ADC一样等待数据到来;
2.ADS8681需要单片机在CONVST引脚上输出低电平信号,启动转换,转换完成后ADC拉低RVS引脚作为指示信号,之后单片机才可以读取数据。
本来我的想法是通过定时器固定输出一个1MHz的PWM信号接到CONVST引脚,控制ADC固定1M采样率,通过计算ADC的转换完成时间调整占空比;数据读取方面使用SPI-DMA循环模式读取数据就可以了。但是后面发现SPI的DMA循环模式好像是没有办法调节每次操作之间的时间间隔,我用SPI_TransmitReceive_DMA的话相当于是一股脑把设定次数的SPI读和写全部完成了,完全没办法按照1MHz的固定频率来进行。
请问大佬们对于这个问题有没有什么好的解决办法呢?如果想用外置ADC实现这样500kHz及更高采样率的采样,除了使用FPGA以外,有办法通过单片机来实现吗?

QQ_1769986090856.png
回复

使用道具 举报

13

主题

3498

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
9062
金钱
9062
注册时间
2020-5-11
在线时间
4690 小时
发表于 3 天前 | 显示全部楼层
如果实在没办法,不如就在PWM中断程序里启动一个少量的SPI的DMA,只读一次转换结果。
专治疑难杂症
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2020-9-24
在线时间
25 小时
 楼主| 发表于 3 天前 | 显示全部楼层
LcwSwust 发表于 2026-2-2 10:03
如果实在没办法,不如就在PWM中断程序里启动一个少量的SPI的DMA,只读一次转换结果。

是的,我目前确实在用这个思路写,用RVS触发外部中断,在外部中断里面用一次DMA,但是采样率高了的话中断应该就不太行了
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2022-7-13
在线时间
8 小时
发表于 前天 15:37 | 显示全部楼层
没理解你的难点在哪里,SPI速率配置到24M,定时器500KHZ,RVS配置成外部中断。定时器中断产生时拉低CONVST引脚,等待外部中断产生后,启动DMA采样,DMA中断产生,拉高CONVST引脚。从理论时许计算,还在范围内啊。是哪里不行?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-2-5 17:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表