stm32g474 实现5个独立ADC同步采样 |
您所在的位置:网站首页 › stm32g474中文 › stm32g474 实现5个独立ADC同步采样 |
stm32g474 实现5个独立ADC同步采样
[复制链接]
STM32G474集成了5个独立4Msps采样率的12位ADC 上一次使用STM32G474实现了正弦信号发生器 http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=1088578&extra= 这次使用ADC采集DAC的输出看一下波形,用5个ADC同步采样,注意是5个独立的ADC不是1个ADC的5个通道 在上一帖的基础上继续用STM32CubeMX配置STM32G474 STM32G474的ADC时钟最大支持60MHz,12位分辨率sampling time为2.5时的采样率为60/(2.5+12+0.5)=4Msps
image001.jpg (24.12 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
原来的主频170MHz无法实现60Mhz的ADC时钟,需要将主频设置成120MHz ADC时钟在主时钟2分频后正好是60MHz 主频修改后原来的Timer4的Counter Period也要做相应修改,使其输出频率正好是1Msps 时钟和DAC配置好后再配置ADC,5个ADC使用相同的配置 Clock Prescaler选择Asynchronous clock mode divided by 2
image002.jpg (63.84 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
下边的External Trigger Conversion Source选择Timer 3 Trigger Out event,使用Timer3触发ADC采样
image003.png (31.27 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 在DMA选项卡下添加DMA配置,使用默认即可
image004.jpg (53.28 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 ADC配置好以后再配置触发ADC的定时器 选择左边的TIM3,右边的Clock Source选择Internal Clock Counter Period设置成30-1 Trigger Event Selection TRGO选择Update Event 120MHz下每30个周期触发一次Update Event事件 对应的ADC采样率正好是4Msps
image005.jpg (44.3 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
完成后生成工程 添加存放ADC数据的数组,这里使用一个二维数组,数量是5,对应5个ADC 长度是5000个,每个结果使用16位共5个通道一共占用50K byte的内存 #define ADC_RESULT_COUNT 5000 //5k*2byte*5channal=50k byte memory uint16_t adc_result[5][ADC_RESULT_COUNT]; 添加启动ADC的代码,一定要先启动ADC再启动定时器
image006.png (10.93 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 主函数里添加adc_start();启动ADC采样 添加void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)函数,这个是ADC将数据写满DMA对应的内存后触发,在里边放一个__NOP();断点卡上去,下边再放上adc_start函数,这样每次存满数组后就会暂停执行,点继续(Go F5)就会进行下一次采样,方便调试。
image007.png (5.7 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 执行到断点时可以看到adc_result的结果
image008.png (38.26 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 展开二维数据,在数据上点右键选择Save to File把内存数据保存到本地硬盘,文件名默认为Watch1.log
image009.png (36.36 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
等保存完成后使用文本工具打开Watch1.log文件(数据量比较大IAR需要一段时间才能保存完,保存过程中IAR会卡顿一段时间,一搬调试器的红灯不再闪烁或者IAR不再卡顿说明已经保存完成)
image010.png (38.49 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
全选所有数据,将数据全部复制,然后新建一个EXCEL文件 将数据粘贴到其中一个工作表内
image011.png (24.98 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传 再另一个工作表引用粘贴数据的工作表中的数据 实现每一列数据对应一组ADC的结果
image012.jpg (83.56 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
选中5组数据,插入折线图可以看到对应的波形,下边的波形是5条线重叠在一起的效果
image013.jpg (36.8 KB, 下载次数: 0) 下载附件 保存到相册 2019-9-2 23:04 上传
为了方便观看可以将数据的长度选少一些,这样就可以实现局部放大效果 放大后能看到有很多锯齿,这是因为DAC的样本数比较少 每一个周期只有60个数据,输出的信号也没做滤波处理所以才会不平滑
image014.jpg (33.81 KB, 下载次数: 1) 下载附件 保存到相册 2019-9-2 23:04 上传
DAC的更新频率是1Msps,每个周期60个样本,ADC的采样率是4Msps,对应一个周期的结果是4/1*60=240个 到这里测试就已经结束了 可能会有人问,说好的同步采样呢?在哪设置的?这个就不说了,自己去理解吧。
工程文件和用来分析数据的EXCEL文件: adc_dac.rar (11.45 MB, 下载次数: 264) 2019-9-2 23:07 上传 点击文件名下载附件 adc数据分析.xlsx (1.51 MB, 下载次数: 22) 2019-9-2 23:06 上传 点击文件名下载附件 此内容由EEWORLD论坛网友littleshrimp原创,如需转载或用于商业用途需征得作者同意并注明出处 补充内容 (2019-9-14 11:23): 这个贴子存在问题 首先使用定时器触发ADC时ADC的Continuous Conversion Mode应该是DISABLE,而不是ENABLE 另外一个问题是经过测试,大于2个ADC同步采样数据会有问题 目前还没找到解决办法 补充内容 (2019-9-26 17:23): 经过测试,贴子中Continuous Conversion Mode应该是DISABLE,功能正常 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |