СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №2/2015

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 25 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2015 ● задать источник запуска каждо- го из каналов установкой разрядов TSEL1[2:0] и TSEL2[2:0]; ● сконфигурировать оба канала установкой разрядов WAVEx[1:0] в 10 и задать значение максималь- ной амплитуды сигнала разрядами MAMPx[3:0]; ● загрузить данные в нужный регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD). Н ЕЗАВИСИМЫЙ ЗАПУСК С ГЕНЕРИРОВАНИЕМ РАЗЛИЧНЫХ ТРЕУГОЛЬНЫХ ИМПУЛЬСОВ Настройка этого режима будет про- изведена, если выполнить следующие действия: ● включить оба канала установкой раз- рядов TEN1 и TEN2; ● задать источник запуска каждо- го из каналов установкой разрядов TSEL1[2:0] и TSEL2[2:0]; ● сконфигурировать оба канала уста- новкой разрядов WAVEx[1:0] в 10 и задать различное значение макси- мальной амплитуды сигнала разряда- ми MAMP1[3:0] и MAMP2[3:0]; ● загрузить данные в нужный регистр DHR (DAC_DHR12RD, DAC_DHR12LD или DAC_DHR8RD). О ДНОВРЕМЕННЫЙ ПРОГРАММНЫЙ ЗАПУСК Для настройки этого режима пре- образования необходимо загрузить данные в нужный регистр DHR (DAC_ DHR12RD, DAC_DHR12LD или DAC_ DHR8RD). При такой конфигурации, спустя один такт APB1, данные из реги- стров DHR1 и DHR2 будут перезаписа- ны в DAC_DOR1 и DAC_DOR2 соответ- ственно. П РИМЕРЫ ПРОГРАММ Рассмотрим программы, которые позволяют генерировать сигнал одной из трёх форм: синус, треугольник и шум. Для генерации синуса использо- ван табличный метод. То есть для гене- рации синуса значения не вычисляют- ся, а извлекаются из подготовленного заранее массива и выводятся в ЦАП каждый раз, когда возникает преры- вание от таймера. Вариант этой про- граммы приведён в листинге 1. После запуска этой программы на выводе PA4 будет сформирован ана- логовый сигнал с формой синуса. При этом на сигнале будут наблюдать- ся «ступеньки». Чтобы сделать сигнал более гладким, потребуется в несколько Листинг 2 #include «stm32f10x.h» #include «stm32f10x_rcc.h» #include «stm32f10x_gpio.h» int main(void) { // Включить порт А RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // Включить ЦАП RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); // Включить таймер 6 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE); // Настроить вывод для ЦАП GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // Настроить частоту таймера TIM6->PSC = 0; TIM6->ARR = 500; TIM6->CR2=TIM_CR2_MMS_1; // Таймер назначить источником событий для ЦАП TIM6->CR1 |= TIM_CR1_CEN; // Начать отсчёт // Включить DAC1 DAC->CR |= DAC_CR_TEN1; // Преобразование по возникновению события DAC->CR &= ~DAC_CR_TSEL1; // от таймера 6 DAC->CR |= DAC_CR_WAVE1_0; // Генерация шума // DAC->CR |= DAC_CR_WAVE1_1; // Генерация сигнала треугольной формы DAC->CR |= DAC_CR_MAMP1; // Максимальная амплитуда DAC->CR |= DAC_CR_EN1; // Включить ЦАП1 // Организовать бесконечный цикл while(1) {} } раз увеличить массив с предваритель- но вычисленными значениями синуса. Это позволит уменьшить разницу меж- ду соседними цифровыми значениями для формируемого сигнала. Для генерации любой другой фор- мы сигнала нужно просто заменить в массиве данных имеющиеся значе- ния на значения для генерации нуж- ного сигнала. Рассмотрим программу для генера- ции сигнала шума. Здесь программа потребуется лишь для инициализации ЦАП и таймера, после чего формиро- вание сигнала будет происходить без участия программы, то есть аппаратно. Для этого следует включить внешний запуск преобразования, а источником его запуска назначить таймер, который будет досчитывать до записанного в его регистр значения, а затем обнуляться и генерировать событие, которое запу- стит новое преобразование. И так до бесконечности. В результате на соот- ветствующем выводе микроконтролле- ра будет сформирован непрерывный сигнал шума. Вариант такой програм- мы приведён в листинге 2. После запуска этой программы на экране осциллографа, подключённо- го к выводу PA4 микроконтроллера, появится характерный сигнал шума. Для генерации сигнала треугольника необходимо закомментировать в про- грамме строку: DAC->CR |= DAC_CR_WAVE1_0; // Генерация шума и удалить символы комментирования для строки: DAC->CR |= DAC_CR_WAVE1_1; // Ге- нерация сигнала треугольной формы. В режиме генерации шума или тре- угольника можно задавать смеще- ние сигнала относительно нуля. Это делается записью значения смещения в соответствующий каналу регистр DAC_DHRx. Подробнее ознакомиться с блоком ЦАП микроконтроллера STM32 можно на сайте www.st.com [2]. Л ИТЕРАТУРА 1. www.st.com . 2. www.st.com/web/en/resource/tech- nical/document/reference_manual/ CD00246267.pdf.

RkJQdWJsaXNoZXIy MTQ4NjUy