Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2754
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Цифро-аналоговое преобразование

402

92sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;

93sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

94HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig);

95}

Функция MX_DAC_Init() конфигурирует ЦАП таким образом, чтобы первый канал выполнял преобразование при активации линии TRGO таймера TIM6. Кроме того, DMA сконфигурирован соответствующим образом, он установлен в циклическом режиме, чтобы непрерывно передавать содержимое вектора инициализации в регистр данных ЦАП. Функция MX_TIM6_Init() устанавливает TIM6 так, чтобы он переполнялся с частотой, равной 10 кГц, переключая линию TRGO, которая внутренне подключена к ЦАП. Наконец, строки [29:32] генерируют вектор инициализации в соответствии с уравнением [3]. Затем его содержимое используется для подачи на ЦАП, который запускается в режиме DMA после включения TIM6.

Рисунок 3: Выходной синусоидальный сигнал, генерируемый периферийным устройством ЦАП

Подключив щуп осциллографа к выводу PA4 нашей платы Nucleo, можно увидеть выходной синусоидальный сигнал, генерируемый ЦАП (см. рисунок 3).

Если нам интересно знать, когда преобразование ЦАП в режиме DMA было завершено, мы можем реализовать функцию обратного вызова:

void HAL_DACEx_ConvCpltCallbackChX(DAC_HandleTypeDef* hdac);

которая автоматически вызывается процедурой HAL_DMA_IRQHandler(), вызываемой из ISR канала DMA, связанного с периферийным устройством ЦАП. Крайний X в имени функции должен быть заменен на 1 или 2 в зависимости от используемого канала.

13.2.3. Генерация треугольного сигнала

В некоторых аудио приложениях полезно генерировать треугольные сигналы. Хотя совершенно возможно генерировать треугольный сигнал с использованием метода DMA, показанным ранее, ЦАП STM32 позволяют аппаратно генерировать сигналы треугольной формы.

Цифро-аналоговое преобразование

403

Рисунок 4: Треугольный сигнал, генерируемый с помощью ЦАП

На рисунке 4 показаны три параметра, которые определяют форму треугольного сигнала. Давайте проанализируем их.

Амплитуда: это значение в диапазоне от 0 до 0xFFF, и оно определяет максимальную высоту сигнала. Она напрямую связана со значением смещения, как мы увидим далее. Амплитуда не может быть произвольным значением, она является частью списка фиксированных значений. Обратитесь к исходному коду HAL для получения полного перечня допустимых значений.

Смещение: это минимальное выходное значение, представляющее собой самую низкую точку сигнала. Сумма смещения и амплитуды не может превышать максимальное значение 0xFFF. Это означает, что максимальная амплитуда сигнала будет определяться разностью амплитуда – смещение.

Частота: частота сигнала, которая определяется частотой обновления таймера, подключенного к ЦАП. Частота обновления таймера определяется по уравнению [4] ниже. Это означает, что, если мы хотим сгенерировать треугольный сигнал частотой 50 Гц с амплитудой, равной 2047, предделитель таймера, работающего на 48 МГц, должен быть сконфигурирован на 234.

f

= 2 амплитуда f

UEV

сигнала

[4]

Для генерации треугольного сигнала мы используем функцию

HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude);

которая принимает используемый канал ЦАП и желаемую амплитуду. Вместо этого смещение сигнала конфигурируется с помощью процедуры HAL_DAC_SetValue(). Полная процедура генерации треугольного сигнала следующая:

Сконфигурировать канал ЦАП, используемый для генерации сигнала

Сконфигурировать таймер, связанный с ЦАП, и сконфигурировать его предделитель в соответствии с уравнением [4].

Запустить ЦАП с помощью функции HAL_DAC_Start().

Сконфигурировать требуемое значение смещения с помощью процедуры

HAL_DAC_SetValue().

Запустить генерацию треугольного сигнала, вызвав функцию

HAL_DACEx_TriangleWaveGenerate().

Цифро-аналоговое преобразование

404

13.2.4. Генерация шумового сигнала

ЦАП STM32 также могут генерировать шумовой сигнал (см. рисунок 5), используя генератор псевдослучайных чисел. Это полезно в некоторых областях применения, таких как аудио приложения и радиочастотные системы. Более того, он также может быть использован для повышения точности периферийных устройств АЦП1.

Для генерации псевдошума с переменной амплитудой в ЦАП доступен регистр сдвига с линейной обратной связью LFSR (англ. linear feedback shift register). Данный регистр предварительно загружен значением 0xAAA, которое может быть частично или полностью замаскировано. Это значение затем добавляется в содержимое регистра данных ЦАП без переполнения, и это значение затем используется в качестве выходного значения.

Рисунок 5: Шумовой сигнал, генерируемый ЦАП

Для генерации шумового сигнала мы можем использовать процедуру HAL

HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac,

uint32_t Channel, uint32_t Amplitude);

которая принимает канал, используемый для генерации сигнала, и значение амплитуды, которое добавляется к содержимому регистра LFSR для генерации псевдослучайного сигнала. Как и для генерации треугольного сигнала, для запуска преобразования можно использовать таймер: это означает, что частота сигнала определяется частотой переполнения таймера.

1 ST предоставляет посвященный этой теме AN2668 (http://www.st.com/content/ccc/resource/technical/document/application_note/c5/24/7d/f6/98/7f/4c/f3/CD001771 13.pdf/files/CD00177113.pdf/jcr:content/translations/en.CD00177113.pdf).