STM32H743 DAC Anstiegs-/Abfallzeit-Experimente

Oszilloskop-Spur, die STM32H743 DAC-Anstiegs- und Abfallzeit von ungefähr 1 Mikrosekunde mit aktiviertem Ausgangspuffer zeigt

Diese Oszilloskop-Spur wurde erhalten, indem zuerst der STM32H743ZI (Nucleo) DAC auf 0x00 gesetzt wurde, dann auf den Maximalwert (4096) ohne Zwischenschritte.

Der Ausgangspuffer war aktiviert.

Wie auf der Spur zu sehen ist, beträgt die Anstiegs-/Abfallzeit ungefähr 1us. Für dieses Beispiel sind keine Informationen über die Taktrate usw. verfügbar (Arduino auf PlatformIO wurde mit Standardeinstellungen verwendet). Es scheint jedoch nicht, dass die Anstiegs-/Abfallzeit durch die Update-Rate verursacht wird. Das Setzen der GPIO-Geschwindigkeit auf Maximum ändert den Wert nicht.

Dies passt gut zur datenblatt-basierten Einstellzeit von 1.7us(typ).

Beim Deaktivieren des Ausgangspuffers sieht das Ergebnis so aus:

Oszilloskop-Spur, die STM32H743 DAC-Anstiegs- und Abfallzeit mit deaktiviertem Ausgangspuffer zeigt, mit langsamerem Übergang

Wenn andererseits derselbe Pin als GPIO verwendet wird - mit genau demselben Messaufbau (direkte Verbindung zum BNC mit 1M Messimpedanz) - ist die Anstiegs-/Abfallzeit fast null.

Codebeispiel

stm32h743_dac_init.cpp
// Function to initialize the DAC
void MX_DAC_Init(void)
{
    DAC_ChannelConfTypeDef sConfig = {0};

    // Initialize DAC
    hdac.Instance = DAC1;
    if (HAL_DAC_Init(&hdac) != HAL_OK)
    {
        // Initialization Error
        __BKPT();
    }

    // Configure DAC channel
    sConfig.DAC_Trigger = DAC_TRIGGER_NONE;  // No trigger, free-running mode
    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

    if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
    {
        // Channel configuration Error
        __BKPT();
    }

    // Enable DAC Channel and start the conversion
    if (HAL_DAC_Start(&hdac, DAC_CHANNEL_1) != HAL_OK)
    {
        // Starting Error
        __BKPT();
    }
}

Der DAC-Wert wurde gesetzt mit

stm32h743_dac_set_value.cpp
if (HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 4095) != HAL_OK) {
    // Setting DAC value Error
    __BKPT();
}

Check out similar posts by category: C/C++, STM32