Главная » Статьи » Уроки по программированию stm32fxxx » Уроки по программированию stm32f4xx

Урок 7: ЦАП
Цифро-аналоговое преобразование позволяет превратить цифровой сигнал в соответствующий ему аналоговый сигнал. Микроконтроллер stm32f4xx имеет в своём распоряжении 2 одноканальных 12-тибитных ЦАП.

Программирование ЦАП


Как обычно, сначала включается тактирование ЦАП порта, затем заполняются структуры ЦАП и порта. Эти структуры используются при вызове инициализирующих функций. В конце включается ЦАП. На этом настройка на самом простом уровне заканчивается.
Начнём. Прежде всего, настройка вывод. Тут всё просто. По схеме находим на какой вывод выведен ЦАП и настраиваем его как альтернативная функция.

GPIO_InitTypeDef GPIO_Init_DAC;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

GPIO_Init_DAC.GPIO_Pin = GPIO_Pin_4;
GPIO_Init_DAC.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init_DAC.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init_DAC.GPIO_OType = GPIO_OType_PP;
GPIO_Init_DAC.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_Init_DAC);

Теперь заполним ЦАП:

DAC_InitTypeDef DAC_InitDAC;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
DAC_InitDAC.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
DAC_InitDAC.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_InitDAC.DAC_Trigger = DAC_Trigger_None;
DAC_InitDAC.DAC_WaveGeneration = DAC_WaveGeneration_None;

DAC_Init(DAC_Channel_1, &DAC_InitDAC);

DAC_Cmd(DAC_Channel_1, ENABLE);

Разберём подробнее настройки.
Trigger – отвечает за автоматическое включение ЦАП. Можно настроить, что заданная величина будет устанавливаться по какому-то событию. В нашем случае данная опция отключено.
WaveGeneration – Генератор сигнала. Опять же не нужен. Отключается.
LFSRUnmask_TriangleAmplitude – отвечает за параметры генерируемого сигнала. Т.к. генерация сигнала не используется, то и эта опция тоже.
OutputBuffer – включает и выключает выходной буфер. Рекомендуется включить.
Чтобы установить нужное значение в ЦАП, надо использовать функцию:

DAC_SetChannel1Data(DAC_Channel_1, sin1[i]);

Первым параметром задаётся номер канала, он же номер ЦАП. Вторым параметром задаётся 16-тибитное значение, записываемое в этот ЦАП (из которых рабочими являются младшие 12 бит).

Ну и пример использования ЦАП с генерацией синуса:.

const uint16_t sin1[32] = {
2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};
uint8_t i=0;

while(1)
{
DAC_SetChannel1Data(DAC_Channel_1, sin1[i]);
if (i< 32){i++;}else{i=0;}
delay_ms(1000);
}

Категория: Уроки по программированию stm32f4xx | Добавил: Korvin (20.11.2013)
Просмотров: 6266 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]