handshake 发表于 2020-12-19 10:43:18

请教:没有DMA功能的ARM芯片,如何使用片上ADC高速采样

某国产cortex-m4核,主频时钟100MHz,技术规格书中描述3路采样保持器,1个14位ADC转换,采样频率最高可达4MHz(实际上推荐的是150ns 采样时间和150ns的转换时间,也就是可靠的采样频率是3.3MHz)。
试过用时钟中断触发ADC转换,中断1us(采样频率1MHz)以下,中断函数中读取AD采样结果,采样结果不正确。
使用pwm触发,1MHz以上PWM触发ADC中断,中断函数中读取AD采样结果,采样结果同样不正确。查资料说cortex-m4最小中断时间为1.5us。我觉得我的1MHz的采样频率已经到了芯片极限。问芯片的技术支持,答复是芯片中断进出栈最小30~31个时钟周期(300~310ns)。中断采样频率还没有达到极限。
后来采用屏蔽中断函数的做法,就是循环查询AD采样转换完成标志位的做法,一有AD转换完成标志位就读取一次,并清转换完成标志位,采样完成32个结果就跳出循环。结果也是1MHz采样频率上不去。
在没有DMA的情况下,我一下子也想不到更好的办法了,发在这里,看看大家有没有好的解决思路。

fengyunyu 发表于 2020-12-19 10:59:05

哪家可以到4m?st的记得是1m

canspider 发表于 2020-12-19 11:15:56

看你的描述可能三路交错能达到
你最好能联系上他们的技术人员,问一下你这种应用场景能不能用
千万不要和他们的销售联系

huangqi412 发表于 2020-12-19 11:16:03


低速采样正确高速采样不正确?怎么判断采样结果不正确? 输入阻抗?   国产货也许本来就高速不准呢。   

huangqi412 发表于 2020-12-19 11:19:43

fengyunyu 发表于 2020-12-19 10:59
哪家可以到4m?st的记得是1m

F3是高速的

handshake 发表于 2020-12-19 11:58:00

三路交错是一个思路,如果采样三个点。应该没有问题,但想连续采样32个点,读取AD采样值操作时间间隔低于1us好像就会有问题。三路交错1/3us连续读取同一个采样信号,每路读取的时间间隔要求在1/3 us之内。可以回去试一试。
不过这样一来,采样频率不能标称3Mhz吧,更别说是4MHz了。应该实事求是标个1MHz。

handshake 发表于 2020-12-19 12:41:03

huangqi412 发表于 2020-12-19 11:16
低速采样正确高速采样不正确?怎么判断采样结果不正确? 输入阻抗?   国产货也许本来就高速不准呢。    ...

用100kHz的占空比50%,Vpp=3.3V方波信号测试,使用1us的时钟中断触发ADC转换,或是1MHzPWM波触发ADC转换。完成连续采样128个点,观察结果数据。128个结果数据很规律,5个0值附近的数据,5个高电平的数据点。1个周期10个点,符合采样频率和信号频率的规律。降低信号频率没有问题。
使用低于1us的时钟中断,例如500ns的时钟中断,或是2MHz的PWM波触发,采样数据结果就没有什么规律了可言。1~4个低电平数据后跟1~4个高电平数据。并没有像理论上的10个高电平数据和10个低电平数据。离1MHz AD采样频率越接近的设置。采样结果一个周期10个点规律越接近。
比如采用1.1MHz的采样频率。并不是每个周期都有11个有规律的数据点。有时有10个点,有时有11个点,有时也有9个点的情况。

redroof 发表于 2020-12-19 12:59:57

handshake 发表于 2020-12-19 12:41
用100kHz的占空比50%,Vpp=3.3V方波信号测试,使用1us的时钟中断触发ADC转换,或是1MHzPWM波触发ADC转换 ...

这种偏门芯片,明显最应该问的是他们自己厂家的技术支持啊。
要相信设计这个芯片的人肯定不傻,只要设计了这么高的采样率,肯定会有某种方式让你能拿到这个数据。至于什么方式最快,只有芯片厂家的人自己知道。你按他们规定的方法做就行了。
页: [1]
查看完整版本: 请教:没有DMA功能的ARM芯片,如何使用片上ADC高速采样