Современная электроника №2/2019
ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 38 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2019 Сначала необходимо объявить новые переменные, которые будут исполь- зоваться в программе, как показано в листинге 1. Затем вводятся строки про- граммы, выполняемые один раз при включении устройства (см. листинг 2). Они позволяют вывести строку назва- ния проекта через порт UART1, вклю- чить два светодиода и запустить кана- лыШИМ. В листинге 3 приведены строки, которые выполняются в бесконеч- ном цикле. Эта часть программы позволяет осуществить преобразо- вание входных сигналов с помощью АЦП, сохранить полученные данные в буфере, загрузить их в каналы ШИМ и передать через последовательный порт USART1 при нажатии пользова- тельской кнопки. Помимо этого, про- изводится регулярное переключение зелёного светодиода, позволяющее визуально контролировать рабо- ту преобразователя. В бесконечном цикле также формируется задерж- ка в 100 мс для удобства наблюдения за процессом преобразования. Эту задержку можно изменять в широком диапазоне в зависимости от условий задачи или вовсе исключить. Написанную программу необходи- мо оттранслировать с помощью сре- ды разработки Keil и загрузить в отла- дочную плату. Сразу после загрузки программа начнёт работать и пре- образовывать аналоговые сигналы, поступающие по четырём входным каналам АЦП, в четыре выходных Листинг 1 /* USER CODE BEGIN 1 */ uint32_t i; // Переменная циклов uint32_t ai[4]; // Буфер данных АЦП uint8_t str[80]={'4','x','A','I','- ','>','4','x','P','W','M',' ','v','1','.','0','\ n','\r',0}; // Буфер строки вывода /* USER CODE END 1 */ Листинг 3 /* USER CODE BEGIN 3 */ HAL_ADCEx_InjectedStart(&hadc1); // Пуск инжекторных каналов АЦП HAL_ADCEx_InjectedPollForConversion(&hadc1, 100); // Ожидание преоб- разования АЦП HAL_ADCEx_InjectedStop(&hadc1); // Останов инжекторных каналов АЦП // Чтение данных АЦП в буфер ai[0]=ADC1->JDR1; // Канал 1 ai[1]=ADC1->JDR2; // Канал 2 ai[2]=ADC1->JDR3; // Канал 3 ai[3]=ADC1->JDR4; // Канал 4 // Управление скважностью каналов ШИМ TIM2->CCR1= ai[0]; // ШИМ1 TIM2->CCR2=ai[1]; // ШИМ2 TIM2->CCR3=ai[2]; // ШИМ3 TIM2->CCR4=ai[3]; // ШИМ4 HAL_Delay(100); // Задержка в мс HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); // Переключение зелёного све- тодиода if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)) // Если нажата кнопка пользо- вателя { // Передать данные АЦП через порт USART1 sprintf(str,"AI1=%d AI2=%d AI3=%d AI4=%d%c%c",ai[0],ai[1],ai[2],ai[3],'\n','\r'); i=0; while(str[i]!=0) {HAL_UART_Transmit(&huart1, &str[i], 1, 1); i++;} } } /* USER CODE END 3 */ Листинг 2 /* USER CODE BEGIN 2 */ // Вывести строку названия проекта через порт UART1 i=0; while(str[i]!=0) {HAL_UART_Transmit(&huart1, &str[i], 1, 1); i++;} HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET); // Включить синий светодиод HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET); // Включить зелёный светодиод // Пуск ШИМ каналов HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // Пуск ШИМ1 таймера 2 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // Пуск ШИМ2 таймера 2 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); // Пуск ШИМ3 таймера 2 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); // Пуск ШИМ4 таймера 2 /* USER CODE END 2 */ Рис. 5. Окно TIM2 генератора кода STM32CubeMX канала ШИМ. Индикатором нормаль- ной работы будет служить мигающий зелёный светодиод. Кроме того, мож- но визуально контролировать резуль- тат преобразования по всем каналам с помощью терминальной програм- мы при подключении персонального компьютера к отладочной плате через порт USART1 и нажатии пользователь- ской кнопки. При необходимости можно изме- нить временны ′ е параметры циф- ровых сигналов ШИМ с помощью перестройки блока синхронизации в генераторе кода STM32CubeMX с последующим формированием ново- го кода программы. При повторном формировании файлов проекта вве- дённые в программу строки кода сохранятся, поскольку они располо- жены в защищённых участках между строками /* USER CODE BEGIN …*/ и /* USER CODE END …*/ . Если потребуется преобразовывать аналоговые сигналы с другим диапа- зоном напряжений, это легко сделать, изменив значения входных резистив- ных делителей сигналов. Таким образом, широко распро- странённую отладочную плату STM32VLDISCOVERY можно превра- тить в 4-канальный преобразова- тель сигналов управления для систем автоматики. Л ИТЕРАТУРА 1. www.st.com 2. http://www.st.com/en/evaluation-tools/ stm32vldiscovery.html 3. www.keil.com
RkJQdWJsaXNoZXIy MTQ4NjUy