Главная » Статьи » Уроки по программированию 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); } | |
Просмотров: 6266 | |
Всего комментариев: 0 | |