jinglixixi 发表于 2025-8-12 15:14

【STM32U385RG 测评】+ 多数据项采集与波形绘制

本帖最后由 jinglixixi 于 2025-8-12 15:30 编辑

#申请原创#


在厂家提供的例程中,有一个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 数据采集端口

实现多数据项采集与波形绘制的主程序为:int main(void)
{
uint16_t i=1,k,sj,sp=0;      
uint32_t tmp_index;      
for (tmp_index = 0; tmp_index < ADC_CONVERTED_DATA_BUFFER_SIZE; tmp_index++)
{
    uhADCxConvertedData = 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, LL_ADC_RESOLUTION_12B);
          uhADCxConvertedData_VoltageGPIO_mVolt      = __LL_ADC_CALC_DATA_TO_VOLTAGE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData, LL_ADC_RESOLUTION_12B);
          uhADCxConvertedData_VrefInt_mVolt            = __LL_ADC_CALC_DATA_TO_VOLTAGE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData, LL_ADC_RESOLUTION_12B);
          hADCxConvertedData_Temperature_DegreeCelsius = __LL_ADC_CALC_TEMPERATURE(uhADCxConvertedData_VrefAnalog_mVolt, uhADCxConvertedData, 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);
          k=uhADCxConvertedData_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(i<30)
          {
                  k=k/3;
                  if(k>75) sj=75;
                  else sj=k;                              
                  LCD_DrawLine(2+4*(i-1),96-sp, 2+4*i,96-sj, GREEN);
                  sp=sj;      
                  i=i+1;                              
          }
          else
          {
                  LCD_Fill(1,21,127,97,BLACK);
                  i=1;                              
          }                        
          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 干燥状态的检测效果


页: [1]
查看完整版本: 【STM32U385RG 测评】+ 多数据项采集与波形绘制