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

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

Приклад використання:

dac

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

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

Приклад використання:

//--------------------------------------------------------------
// Файл     : main.c
// Дата     : 24.03.2013
// Версія   : 1.0
// Автор     : UB
// EMail    : mc-4u(@)t-online.de
// Веб      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Модуль   : CMSIS_BOOT, M4_CMSIS_CORE
// Функція  : Демонстрація бібліотеки DAC-DMA
// Примітка : Ці два файли повинні бути на 8MHz
//              "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 б 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 і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.

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

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

Top