[STM32U3] 【STM32U385RG 测评】+ 多数据项采集与波形绘制
在厂家提供的例程中有一个ADC转换多个通道进行采集的示例它将ADC配置为单次转换模式由SW进行触发。在STM32设备上ADC默认组被配置为3个转换通道即1个外部输入通道和2个内部通道分别是内部电压VrefInt和温度传感器。DMA被配置为在RAM内存中以环形模式传输转换数据数据大小为三个元素的数组每个通道的转换数据数组地址。在每一秒是由ADC对扫描序列中的3个通道进行转换每次转换开始时启用不连续模式进行。 若禁用不连续模式则整个扫描序列将在一个转换开始时以突发方式转换。 每个序列的ADC转换数据由DMA传输到数组“uhADCxConvertedData”中存放。1. 数据采集与波形绘制为进行检测值得显示及波形绘制采用LCD屏作为显示器件其与开发板的连接关系为CLK ---PA6MOSI---PA7DC ---PC7CS ---PC9RST---PC6所使用的接口为CN5见图1所示。图1 显示屏所用接口A/D数据采集的端口为通道4引脚为PA1可从CN8 的 A1或CN8 中引用。图2 数据采集端口实现多数据项采集与波形绘制的主程序为复制intmain(void){uint16_ti1,k,sj,sp0;uint32_ttmp_index;for(tmp_index 0; tmp_index ADC_CONVERTED_DATA_BUFFER_SIZE; tmp_index){uhADCxConvertedData[tmp_index] VAR_CONVERTED_DATA_INIT_VALUE;}NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),15,0));SystemClock_Config();LCD_Init();init_lcd_st7735();Lcd_Clear(RED);LCD_ShowString(40,0,U385 ADC ,YELLOW ,RED,16,0);LCD_DrawLine(0,20,127,20,YELLOW);LCD_DrawLine(0,98,127,98,YELLOW);LCD_Fill(1,21,127,97,BLACK);LL_AHB1_GRP2_EnableClock(LL_AHB1_GRP2_PERIPH_PWR);LL_PWR_EnableVDDA();LL_PWR_EnableVDDIO2();MX_GPIO_Init();MX_ADC1_Init();MX_ICACHE_Init();ADC_Activate();while(1){if((LL_ADC_IsEnabled(ADC1) 1) (LL_ADC_IsDisableOngoing(ADC1) 0) (LL_ADC_REG_IsConversionOngoing(ADC1) 0) ){LL_ADC_REG_StartConversion(ADC1);}else{Error_Handler();}LED_On();LL_mDelay(LED_BLINK_SLOW);LED_Off();LL_mDelay(LED_BLINK_SLOW);if(ubDmaTransferStatus 1){uhADCxConvertedData_VrefAnalog_mVolt __LL_ADC_CALC_VREFANALOG_VOLTAGE(uhADCxConvertedData[1], LL_ADC_RESOLUTION_12B);uhADCxConvertedData_VoltageGPIO_mVolt __LL_ADC_CALC_DATA_TO_VOLTAGE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData[0], LL_ADC_RESOLUTION_12B);uhADCxConvertedData_VrefInt_mVolt __LL_ADC_CALC_DATA_TO_VOLTAGE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData[1], LL_ADC_RESOLUTION_12B);hADCxConvertedData_Temperature_DegreeCelsius __LL_ADC_CALC_TEMPERATURE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData[2], LL_ADC_RESOLUTION_12B);LCD_ShowString(10,100,U1 mV,YELLOW ,RED,16,0);LCD_ShowString(10,120,U2 mV,YELLOW ,RED,16,0);LCD_ShowString(10,140,T C,YELLOW ,RED,16,0);LCD_ShowIntNum(42,100,uhADCxConvertedData_VoltageGPIO_mVolt,4,WHITE,RED,16);kuhADCxConvertedData_VoltageGPIO_mVolt;LCD_ShowIntNum(42,120,uhADCxConvertedData_VrefInt_mVolt,4,WHITE,RED,16);LCD_ShowIntNum(42,140,hADCxConvertedData_Temperature_DegreeCelsius,3,WHITE,RED,16);if(i30){kk/3;if(k75) sj75;elsesjk;LCD_DrawLine(24*(i-1),96-sp,24*i,96-sj, GREEN);spsj;ii1;}else{LCD_Fill(1,21,127,97,BLACK);i1;}if(ubAdcGrpRegularSequenceConvStatus !1){Error_Handler();}ubAdcGrpRegularSequenceConvStatus 0;ubDmaTransferStatus 0;tmp_index 4*2;while(tmp_index !0){LED_Toggle();LL_mDelay(LED_BLINK_FAST);tmp_index--;}LL_mDelay(500);}}}经程序的编译和下载其测试的结果如图3所示。图3 采集结果图4 数据波形2. 传感器检测传感器有多种类型其大致可分为3种类型即数字式传感器、模拟式传感器及脉冲式传感器。对于数字式传感器它主要是通过I2C接口或SPI接口来传送指令及检测结果而对于模拟式传感器则是通过传感器或变送器将外部变化转化相应的模拟量以供采集而对于这些模拟信号量的采集则需要A/D数据采集功能的配合来完成。对于火焰、气体及土壤湿度传感器来讲则是以模拟式传感器的形式呈现。为此在配接这3种传感器的情况下可实现火焰、气体及土壤湿度的检测其具体的检测效果 分别见图5至图8所示。图5中的波形缺口即使火焰照射时的变化图6 是无火焰时呈现的效果。图7是气体传感器在上电后的缓慢变化情况图8是土壤湿度在干燥状态下的情况。图5 火焰检测图6 无火焰呈现的检测图7 气体检测效果图8 干燥状态的检测效果---------------------作者jinglixixi链接https://bbs.21ic.com/icview-3478242-1-1.html?_dsign266130be来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。