Страница 1 из 1
STM32FDISCOVERY + ЦАП
Добавлено: Сб июн 29, 2013 13:53:14
bishop-strip
Здравствуйте!
Приобрел плату STM32F4DISCOVERY, на ней есть ножка PA4, которая может выполнять функции ЦАПа (DAC2).
как мне вывести из нее требуемое напряжение:
Спойлер
void DAC_Configuration(void)
{
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* Включаем ЦАП */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
/* Настраиваем ногу ЦАПа */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
DAC_InitTypeDef DAC_InitStructure;
DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_2, ENABLE);
//DAC->CR |= DAC_CR_EN2;
}
u16 setDAC(u16 value)
{
DAC_SetChannel1Data(DAC_Align_12b_R, value);
}
Это мой код, но он требуемого результата не дает.
Как мне получить требуемое напряжение?
Заранее спасибо!
Re: STM32FDISCOVERY + ЦАП
Добавлено: Вс июн 30, 2013 13:28:36
balmer
GPIOA GPIO_Pin_4 - это ADC12_IN4.
А у тебя в коде DAC_Channel_2, а надо DAC_Channel_4.
Так -же возможно, что частота очень большая.
Надо RCC_ADCCLKConfig(RCC_PCLK2_Div4);//48/4 = 12 MHz - это если на 48 MHz у тебя чип работает.
Re: STM32FDISCOVERY + ЦАП
Добавлено: Вс июн 30, 2013 22:29:56
bishop-strip
Спасибо за ответ!
Я решил задачу, во первых проблема была в том, что порт PA4 это ЦАП1, а не ЦАП2:)
Во вторых, выкладываю рабочий код(у меня он точно работает) для ЦАПа на ножке PA4 на плате STM32F4DISCOVERY:
Спойлер
void DAC_Configuration(void)
{
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
/* Включаем ЦАП */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
/* Настраиваем ногу ЦАПа */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
DAC->CR &= ~DAC_CR_EN1; // выкл. ЦАП 1
DAC->CR &= ~DAC_CR_BOFF1; // вкл. буффер
DAC->DHR12L1 = 0x10; // загрузка данных в ЦАП1
DAC->DHR12R1 = 0x10; // загрузка данных в ЦАП1
DAC->CR |= DAC_CR_TSEL1_0; //Режим программный
DAC->CR |= DAC_CR_TSEL1_1; //
DAC->CR |= DAC_CR_TSEL1_2; //
DAC->CR &= ~DAC_CR_TEN1; //В регистре DOR будет информация о выдаваемом напряжении
DAC->CR |= DAC_CR_EN1; // вкл. ЦАП 1*/
}
u16 setDAC(u16 value)
{
DAC->DHR12R1 = value; // загрузка данных в ЦАП1
}
Re: STM32FDISCOVERY + ЦАП
Добавлено: Вт авг 27, 2013 11:11:26
evilbob
Подскажите, а разве РА4 надо настраивать на вход? Мне казалось, что мы считываем напряжение после ЦАП, то есть нога должна работать как выход? И еще один вопрос, для чего две строчки используются:
DAC->DHR12L1 = 0x10; // загрузка данных в ЦАП1
DAC->DHR12R1 = 0x10; // загрузка данных в ЦАП1
первая заносит данные в регистр хранения данных с левым выравниванием, а вторая - с правым выравниванием данных, собственно вопрос - зачем две если можно использовать одну, DAC->DHR12R1? Или я что-то путаю, поправте пожалуйста
Re: STM32FDISCOVERY + ЦАП
Добавлено: Вт авг 27, 2013 14:21:47
balmer
evilbob писал(а):Подскажите, а разве РА4 надо настраивать на вход?
Если вы про мой ответ, то посыпаю голову пеплом и каюсь в невнимательности. Умудрился перепутать ЦАП и АЦП. Естественно на выход надо то, что выдает сигнал.
Re: STM32FDISCOVERY + ЦАП
Добавлено: Вт авг 27, 2013 16:13:36
Neekeetos
balmer писал(а):evilbob писал(а):Подскажите, а разве РА4 надо настраивать на вход?
Если вы про мой ответ, то посыпаю голову пеплом и каюсь в невнимательности. Умудрился перепутать ЦАП и АЦП. Естественно на выход надо то, что выдает сигнал.
Выхода цапа надо настраивать в режим аналогового входа, изначально верно все настраивается с одним но -
Код: Выделить всё
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
А должно быть по идее
Код: Выделить всё
/* Включаем порт А */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
Повезло что порт по умолчанию как раз и настроен на вход, поэтому заработало