硬汉嵌入式论坛

 找回密码
 立即注册
查看: 999|回复: 8
收起左侧

[ADC] 求教H750 ADC采集问题

[复制链接]
回帖奖励 36 个金币 回复本帖可获得 4 个金币奖励! 每人限 1 次

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
发表于 2024-11-20 11:40:56 | 显示全部楼层 |阅读模式
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2024-11-20 11:44:30 | 显示全部楼层
这是数据 微信图片_20241120105549.jpg 微信图片_20241120105553.jpg 微信图片_20241120111624.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-20 16:36:50 | 显示全部楼层

回帖奖励 +4 个金币

是因为我的触发时间太短了吗?我给的上升沿触发,频率为1khz也就是1ms,持续时间是100us
这个描述没看懂,是1ms触发一次吗
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2024-11-20 18:37:25 | 显示全部楼层
对,1ms触发一次,我现在感觉就是ADC没有来得及启动,然后我想着ADC一直开启,上升沿开始DMA转换,然后下降沿结束,把这段之间的数据保存下来。HAL_ADC_Start(&hadc3);

HAL_DMA_Start(&hdma_adc3, (uint32_t)&ADC3->DR,(uint32_t)g_adc3_dma_data1, ADC_DATA_LENGTH); // 不停止DMA,ADC始终保持运行这两个是冲突的吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-21 09:57:09 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-11-20 18:37
对,1ms触发一次,我现在感觉就是ADC没有来得及启动,然后我想着ADC一直开启,上升沿开始DMA转换,然后下降 ...

冲突,二选一即可。

看了你的代码明白你的意思了,你这个是接到触发信号后,手动启动的ADC吧,我理解成了外部信号触发了。
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2024-11-21 10:22:29 | 显示全部楼层
eric2013 发表于 2024-11-21 09:57
冲突,二选一即可。

看了你的代码明白你的意思了,你这个是接到触发信号后,手动启动的ADC吧,我理解 ...

嗯对,就是我有一个引脚是接收外部的1Khz的方波信号,然后上升沿触发中断给一个标志位启动ADC_DMA,我现在是怀疑ADC没反应过来,因为速度太快了,我需要在上升沿到的一瞬间开始采集87us的信号,所以我怀疑是我的内置AD没反应过来才没采集到的。请问有什么好的解决思路吗,我想着是一直采集,然后上升沿保存,下降沿停止保存
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-22 09:16:28 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-11-21 10:22
嗯对,就是我有一个引脚是接收外部的1Khz的方波信号,然后上升沿触发中断给一个标志位启动ADC_DMA,我现在 ...

可以ADC DMA一致采集,接收到上升沿后记录当前位置,DMA的NDTR可以记录。下降沿再记录位置。

注意DMA的缓冲大小够存储1ms的数据。这样即使DMA转换过程中循环了一次也不影响。
回复

使用道具 举报

20

主题

102

回帖

162

积分

初级会员

积分
162
QQ
 楼主| 发表于 2024-11-24 00:34:27 | 显示全部楼层
eric2013 发表于 2024-11-22 09:16
可以ADC DMA一致采集,接收到上升沿后记录当前位置,DMA的NDTR可以记录。下降沿再记录位置。

注意DMA ...

嗯,请问一下:GPIO设置为GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;怎么在回调函数记录NDTR的度数呀?
或者我想用这个方法:HAL_ADC_Start_DMA(&hadc3, (uint32_t*)current_buffer, ADC_DATA_LENGTH)开启之后,我只用上升沿,这时候记录NDTR的度数,然后跟着保存从这个数之后的多少个点应该也可以吧?不需要我频繁记录上升沿和下降沿之间的度数,记上升沿的就可以,然后边DMA边保存
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-11-24 10:10:35 | 显示全部楼层
不吃鱼的猫大人 发表于 2024-11-24 00:34
嗯,请问一下:GPIO设置为GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;怎么在回调函数记录NDTR ...

行,满足需求的话,可以实测下效果
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 02:06 , Processed in 0.286476 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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