STM32F4. Урок 24 — Работа с ЦАП через DMA

Данная библиотека позволяет работать одним или двумя ЦАП микроконтроллера STM32F4 в режиме DMA. Вывод сигнала происходит циклически, поэтому все его значения должны быть записаны в массив.
В данный момент в библиотеке реализовано 4 типа сигналов (синусойда, пилообразный, треугольный и прямоугольный, а также установка логического нуля).
Дополнительная функция позволяет корректировать частоту сигнала. Частота устанавливается двумя параметрами: предделителем и периодом. Эти два значения вычисляются заранее
(частота зависит также от количества значений кривой выбранного сигнала).
Используемый таймер должен быть указан в H-файле через определение. В статье используется Timer7, но так же можно применить TIM2, TIM4, TIM5.

Пример использования:

ЦАП жестко привязан к выводам процессора:

DAC1 к PA4
DAC2 к PA5

Требования:

   Подключаемые модули CooCox-IDE: GPIO, DAC, TIM, DMA.
   Поддерживаемые библиотеки: отсутствуют.

Перечисления:

typedef enum {
SINGLE_DAC1_DMA = 0, // использовать лишь DAC1 на PA4
SINGLE_DAC2_DMA, // использовать лишь DAC2 на PA5
DUAL_DAC_DMA // использовать DAC1 (PA4) и DAC2 (PA5)
}DAC_DMA_MODE_t;

typedef enum {
DAC_WAVE_OFF = 0, // длительный низкий уровень
DAC_WAVE1_SINUS = 1, // форма сигнала 1 (синус)
DAC_WAVE2_SAEGEZAHN = 2, // форма сигнала 2 (пилообразный)
DAC_WAVE3_DREIECK = 3, // форма сигнала 3 (треугольный)
DAC_WAVE4_RECHTECK = 4 // форма сигнала 4 (прямоугольный)
}DAC_DMA_WAVE_NAME_t;

Функции:

void UB_DAC_DMA_Init(DAC_DMA_MODE_t mode); // инициализация настроек ЦАП
void UB_DAC_DMA_SetWaveform1(DAC_DMA_WAVE_NAME_t wave); // установка формы сигнала для DAC1
void UB_DAC_DMA_SetWaveform2(DAC_DMA_WAVE_NAME_t wave); // установка формы сигнала для DAC2
void UB_DAC_DMA_SetFrq1(uint16_t vorteiler, uint16_t periode); // регулировка частоты DAC1
void UB_DAC_DMA_SetFrq2(uint16_t vorteiler, uint16_t periode); // регулировка частоты DAC2

Пример использования:

//—————————————————————
// File : main.c
// Datum : 24.03.2013
// Version : 1.0
// Autor : UB
// EMail : mc-4u(@)t-online.de
// Web : www.mikrocontroller-4u.de
// CPU : STM32F4
// IDE : CooCox CoIDE 1.7.0
// Module : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der DAC-DMA Library
// Hinweis : Diese zwei Files muessen auf 8MHz stehen
// «cmsis_boot/stm32f4xx.h»
// «cmsis_boot/system_stm32f4xx.c»
//—————————————————————

#include «main.h»
#include «stm32_ub_dac_dma.h»

int main(void)
{
SystemInit(); // Инициализация настроек кварца

// инициализация ЦАП в режиме DMA (DAC-1 b DAC-2)
UB_DAC_DMA_Init(DUAL_DAC_DMA);

// выход синусоидального сигнала на DAC1 (PA4)
UB_DAC_DMA_SetWaveform1(DAC_WAVE1_SINUS);

// выход треугольного сигнала на DAC2 (PA5)
UB_DAC_DMA_SetWaveform2(DAC_WAVE3_DREIECK);

// Расчет частоты синусоидального сигнала в 1 Гц
// Синусоидальный сигнал имеет 32 значения
// f=84MHz/300/8750/32 = 1 Hz
UB_DAC_DMA_SetFrq1(299,8749);

// Расчет частоты треугольного сигнала в 10 Гц
// Пилообразный сигнал имеет 32 значения
// f=84MHz/30/8750/32 = 10 Hz
UB_DAC_DMA_SetFrq2(29,8749);

while(1)
{

}
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.