自动采集子系统(扫描模式ChannelADC转换通道10SamplingTime配置)

优采云 发布时间: 2021-12-22 13:14

  自动采集子系统(扫描模式ChannelADC转换通道10SamplingTime配置)

  多维数据集配置。目前网上提到的多路DMA+TIM中断触发无法实现。 Simulink 生成的代码一直卡在 DMA 中断中,但是其他中断无法进入。原因还没找到。

  取消DMA并使用ADC中断。多渠道还是有问题的。 Simulink产生的代码中断可以正常进入,但是ADC采集的值不对,找不到原因。

  最后只能使用单通道,ADC中断,不连续采集,没有DMA,ADC1和ADC2同时使用就可以了,采集的值很好。本文采用这种方法。

  如果有人成功实现了DMA+TIM中断触发的simulink代码生成,欢迎小弟指导~~~

  也欢迎在做STM32自动代码生成童鞋的时候和我交流~~

  QQ/微信:9535909472

  CUBE配置:时钟树配置:(最高时钟只有12M)

  

  ADC 配置:

  

  Mode Independent mode ADC1和ADC2工作在独立模式(如果只有ADC1可用,则只能选择独立模式)

  Data Alignment ADC 数据左对齐或右对齐(默认右对齐)

  Scan Conversion Mode 禁用是否开启扫描模式(如果是多通道只能选择开启,单通道只能选择不开启)

  Continuous Conversion Mode Disable是否开启连续转换(这里选择不开启,开启后其他中断不会进入)

  Discontinuous Conversion Mode Disable 是否开启单次转换(单通道只能是Disable,多通道可以选择Enable)

  ADCs_Regular_ConversionMode(常规通道转换模式)

  启用定期转换 ENABLE 启用定期转换

  Number of Conversion ADC 转换通道数 1(单通道只能选为1)

  External Trigger Conversion Source 由软件软件触发转换(可以在TIM中选择中断触发,但Simulink中生成的代码有问题,中断和DMA最终无用)

  Rank只能在2个频道以上时开启扫描模式

  通道ADC转换通道10

  Sampling Time ADC 采样周期 1.5cyces

  ADC_Injected_ConversionMode(注入通道转换模式)暂时不使用。

  WatchDog 暂时未使用。

  转换时间 = 采样时间 + 12.5 个周期 = 14 个周期

  从时钟树上看,ADC频率为12M,转换时间为14/12M = 1.17us

  开启ADC中断:

  

  ADC2的配置与ADC1相同,这里不再赘述。

  没有使用DMA,所以这是CUBE的配置。本项目是在上一篇文章的基础上进行修改的。其他配置请参考上一篇文章。

  Simulink 模型建立:

  在模块库中找到ADC模块,我放在500ms时序和1s时序,一个ADC1,一个ADC2(配置同1)

  这里的模块只负责读取ADC采样的值,采集和转换总是中断。

  

  我这里配置的是通道ADC1-通道10

  

  在CUBE中配置后,这里的中断是打开的,不能修改。 (关闭中断只能在cube中配置)

  

  输入信号为12位精度ADC取值范围0-4095,电压范围0-3.3(本次使用的开发板adc采集电压只能达到3.3v,如果要测试5V,需要换硬件)

  

  CHAR 转换模块收录在 ADC 演示中。如果找不到,可以参考我的项目。

  ADC2与ADC1类似,只不过是放在1s定时器中断,然后转换模块加一个2来区分串口打印。

  现在模型已构建,Ctrl+B 生成代码、打开项目、编译和下载。

  测试结果:

  其他中断也能正常触发,ADC采集也能正常采集电压。

  ADC1采集通道接电源,采集电压3.24v,ADC2采集通道接地,采集电压0V

  

  ADC2采集通道接电源,采集电压3.25v,ADC1采集通道接地,采集电压0V

  

  附件

  CUBE 项目、Simulink 模型和生成的代码项目

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线