Sigma-delta Modulation

Introduction

ESP32 has a second-order sigma-delta modulation module. This driver configures the channels of the sigma-delta module.

Functionality Overview

There are eight independent sigma-delta modulation channels identified with sigmadelta_channel_t. Each channel is capable to output the binary, hardware generated signal with the sigma-delta modulation.

Selected channel should be set up by providing configuration parameters in sigmadelta_config_t and then applying this configuration with sigmadelta_config().

Another option is to call individual functions, that will configure all required parameters one by one:

The range of the ‘duty’ input parameter of sigmadelta_set_duty() is from -128 to 127 (eight bit signed integer). If zero value is set, then the output signal’s duty will be about 50%, see description of sigmadelta_set_duty().

Application Example

Sigma-delta Modulation example: peripherals/sigmadelta.

API Reference

Functions

esp_err_t sigmadelta_config(const sigmadelta_config_t *config)

Configure Sigma-delta channel.

Return

  • ESP_OK Success

  • ESP_ERR_INVALID_STATE sigmadelta driver already initialized

  • ESP_ERR_INVALID_ARG Parameter error

Parameters
  • config: Pointer of Sigma-delta channel configuration struct

esp_err_t sigmadelta_set_duty(sigmadelta_channel_t channel, int8_t duty)

Set Sigma-delta channel duty.

This function is used to set Sigma-delta channel duty, If you add a capacitor between the output pin and ground, the average output voltage will be Vdc = VDDIO / 256 * duty + VDDIO/2, where VDDIO is the power supply voltage.

Return

  • ESP_OK Success

  • ESP_ERR_INVALID_STATE sigmadelta driver has not been initialized

  • ESP_ERR_INVALID_ARG Parameter error

Parameters
  • channel: Sigma-delta channel number

  • duty: Sigma-delta duty of one channel, the value ranges from -128 to 127, recommended range is -90 ~ 90. The waveform is more like a random one in this range.

esp_err_t sigmadelta_set_prescale(sigmadelta_channel_t channel, uint8_t prescale)

Set Sigma-delta channel’s clock pre-scale value. The source clock is APP_CLK, 80MHz. The clock frequency of the sigma-delta channel is APP_CLK / pre_scale.

Return

  • ESP_OK Success

  • ESP_ERR_INVALID_STATE sigmadelta driver has not been initialized

  • ESP_ERR_INVALID_ARG Parameter error

Parameters
  • channel: Sigma-delta channel number

  • prescale: The divider of source clock, ranges from 0 to 255

esp_err_t sigmadelta_set_pin(sigmadelta_channel_t channel, gpio_num_t gpio_num)

Set Sigma-delta signal output pin.

Return

  • ESP_OK Success

  • ESP_ERR_INVALID_STATE sigmadelta driver has not been initialized

  • ESP_ERR_INVALID_ARG Parameter error

Parameters
  • channel: Sigma-delta channel number

  • gpio_num: GPIO number of output pin.