请问应用STM32如何设计一个可以采集传感器阵列的程序

2019-03-23 16:21发布

如题,项目中要对一个接触面的压力进行采集,应用传感器阵列,需要应用模拟开关对行进行切换和扫描,这样的程序该如何设计?自己的想法是ADC采集+DMA传输,DMA传输完一行的数据后在DMA中断里实现通道切换?不知这样可行不?还有一种就是TIM+ADC+DMA,应用TIM来触发ADC,控制ADC的采样率,

        ADC_RegularChannelConfig(ADC1, ADC_Channel_9,10, ADC_SampleTime_480Cycles);这句话是不是控制ADC的采样率,竟然已经有了,那为啥还有可以应用TIM定时器来控制其采样率?

       在TIM来控制ADC的采样率时,标注的两种触发方式有什么区别?
/* ADC1 regular channel 12 configuration ************************************/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//á¬DøÄ£ê½êÇê2Ã′¿   
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;//_TRGO定时器触发???
//        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;//与上者有什么区别?

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion =10;
  ADC_Init(ADC1, &ADC_InitStructure);
   
//     /* Enable ADC1 DMA */
//  ADC_DMACmd(ADC1, ENABLE);
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
EdwardsThompson
1楼-- · 2019-03-23 16:30
/ 如题,项目中要对一个接触面的压力进行采集,应用传感器阵列,需要应用模拟开关对行进行切换和扫描,这样的程序该如何设计?自己的想法是ADC采集+DMA传输,DMA传输完一行的数据后在DMA中断里实现通道切换?不知这样可行不?还有一种就是TIM+ADC+DMA,应用TIM来触发ADC,控制ADC的采样率,

        ADC_RegularChannelConfig(ADC1, ADC_Channel_9,10, ADC_SampleTime_480Cycles);这句话是不是控制ADC的采样率,竟然已经有了,那为啥还有可以应用TIM定时器来控制其采样率?

       在TIM来控制ADC的采样率时,标注的两种触发方式有什么区别?
/* ADC1 regular channel 12 configuration ************************************/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
//ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//á¬DøÄ£ê½êÇê2Ã′¿   
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;//_TRGO定时器触发???
//        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;//与上者有什么区别?

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion =10;
  ADC_Init(ADC1, &ADC_InitStructure);
   
//     /* Enable ADC1 DMA */
//  ADC_DMACmd(ADC1, ENABLE);
此帖出自小平头技术问答
wsdymg
2楼-- · 2019-03-23 17:36
/ 通常单片机的多通道AD都是复用的,如果单个通道一直占用了AD,资源就浪费了,每个通道采样率与读取频率都可以配置。例如,
CH1采样率配置为100Khz,CH2采样率配置为50Khz,TIM1的溢出中断作为触发源,然后配置溢出频率为10HZ,即每秒中单片机会读取10次CH1,CH2的数据。
ADC_SampleTime_480Cycles 这个与采样率有关,
ADC_ExternalTrigConv_T2_TRGO这个与你读取数据的频率有关。
中断源配置见图。
EdwardsThompson
3楼-- · 2019-03-23 20:21
 精彩回答 2  元偷偷看……

一周热门 更多>