STM32Cube. ЦАП. Использование DAC.

Мы рады приветствовать Вас на нашем сайте! И сегодня речь снова пойдет об использовании среды STM32CubeMx для генерации пользовательского кода. На очереди у нас модуль цифро-аналогового преобразователя, он же ЦАП, он же DAC 😉

Работа с модулем DAC

В общем, открываем STM32Cube и создаем новый проект. Я буду использовать для тестирования платку с микроконтроллером STM32F103VET6. Соответственно, его я и выбрал при создании проекта. Теперь давайте разберемся с периферией — пусть будет задействован модуль DAC и выход DAC_OUT2 (PA5). Так и настраиваем:

Работа с ЦАП

Сразу же видим, что нужный нам вывод PA5 Cube автоматически настроил на работу в нужном режиме:

Конфигурация ЦАП

В принципе, больше ничего пока менять не будем, генерируем проект и видим, что Cube создал для нас  функцию:

/* DAC init function */
void MX_DAC_Init(void)
{
 
  DAC_ChannelConfTypeDef sConfig;
 
    /**DAC Initialization 
    */
  hdac.Instance = DAC;
  HAL_DAC_Init(&hdac);
 
    /**DAC channel OUT2 config 
    */
  sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2);
 
}

В STM32 ЦАП 12-ти битный, поэтому мы можем преобразовать в аналоговый сигнал любое цифровое значение от 0 до 4095. Для того, чтобы это осуществить есть специальная функция. Давайте к примеру сгенерируем на выходе уровень напряжения равный 3.3В / 2 = 1.65 В. Соответствующее цифровое значение, которое необходимо преобразовать, равно 2048:

uint16_t currentDACData = 2048;
 
// Включаем ЦАП, нужный канал
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, currentDACData);

Как видите, все сводится к вызову специальной функции, да и только =). Параметры тут все понятные — структура, которая соответствует нашему модулю DAC, номер канала, выравнивание данных (по левому краю, либо по правому), ну и последний аргумент — сами данные.

Такая вот получилась совсем небольшая и краткая статья… Оставайтесь с нами, подписывайтесь на обновления и заходите на сайт!

Понравилась статья? Поделись с друзьями!

STM32Cube. ЦАП. Использование DAC.: 6 комментариев
  1. А не будет ли интереснее рассмотреть какую-нибудь Discovery с её усилителем и выводом звука на наушники, через уже разведенный разъем?

    • Тут несколько факторов )
      Такая статья уже была для F4Discovery,
      Там просто передаются данные по I2S на микросхему, непосредственно ЦАП даже не используется,
      Ну и плюс это дополнительное увеличение себестоимости устройства при разработке — использовать ЦАП и собрать усилительный каскад будет в любом случае дешевле.

  2. Знаете, ничего не работало, пока не нашёл в примере от STM тот факт, что нужно перед уставкой значения,нужно запустить сам DAC:
    HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
    А так, спасибо за уроки!

    • Добавлю в статью описание этого нюанса, спасибо ) У меня видимо версия Куба постарее, поэтому там работало так…

    • Добрый день!
      Да проблема тут в том, что до их написания руки так и не дошли, примеры я сделал, а потом времени не хватило свободного…
      Уберу из статьи этот вводящий в заблуждение абзац и со временем постараюсь статьи про звук все-таки довести до ума.
      Приношу свои извинения!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *