Мегаобучалка Главная | О нас | Обратная связь


Лабораторная работа № 3: Генерация сигнала ШИМ( PWM )



2020-02-04 370 Обсуждений (0)
Лабораторная работа № 3: Генерация сигнала ШИМ( PWM ) 0.00 из 5.00 0 оценок




 

Цель работы:Генерировать ШИМ с помощью отладочной платы;генерировать сигнал в микроконтроллере с параметрами пользователя и управлять внешними устройствами сигналами с микроконтроллера.

 

Оборудование и программное обеспечение:платаSTM32F4 Discovery,среда разработки CubeMX и Keil.

 

Теоретический материал

В таймерах имеется режим генерации ШИМ сигналов. Период сигнала задается регистром перезагрузки таймера. Заполнение импульсов задается регистром сравнения канала. Таймер может производить 4 ШИМ сигнала и синхронизировано соответственно генерировать 16 ШИМ сигналов.

синхронизированно, позволяя генерирова

Существует два режима для таймера: с выравниванием по фронту или центру

Для получения ШИМ сигнала необходимо при конфигурации микроконтроллера в CubeMX задать эту настройку порта. К выводу МК подключаем альтернативную функцию GPIO_PinAFConfig, затем подключить функцию GPIO_Mode_AF и соответственно подключить библиотеку include "init.h".

Проведем конфигурацию микроконтроллера в

 

 

Пример кода

В программе сигнал ШИМ меняет яркость светодиода.

 

 

 

MX_GPIO_Init();

MX_TIM4_Init();

/* USER CODE BEGIN 2 */

                                                          HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);

 

   HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);

 

   HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);

 

   HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);

/* USER CODE END 2 */

 

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* USER CODE END WHILE */

 

/* USER CODE BEGIN 3 */

                           for(i=0;i<=524288;i++)

 

           {

 

                   if(i<65536)   TIM4->CCR1=i;

 

                   else if ((i>65535)&&(i<131072)) TIM4->CCR1=131071-i;

 

                   else if((i>131071)&&(i<196608))   TIM4->CCR2=i-131072;

 

                   else if ((i>196607)&&(i<262164)) TIM4->CCR2=262164-i;

 

                   else if((i>262163)&&(i<327680))   TIM4->CCR3=i-262164;

 

                   else if ((i>327679)&&(i<393216)) TIM4->CCR3=393216-i;

 

                   else if((i>393216)&&(i<458752))   TIM4->CCR4=i-393216;

 

                   else TIM4->CCR4=524288-i;

 

                   for(d=0;d<300;d++)

 

                   {

 

                                       

 

                   }

 

           }

}

/* USER CODE END 3 */

}

TIM_ClockConfigTypeDef sClockSourceConfig = {0};

TIM_MasterConfigTypeDef sMasterConfig = {0};

TIM_OC_InitTypeDef sConfigOC = {0};

 

/* USER CODE BEGIN TIM4_Init 1 */

 

/* USER CODE END TIM4_Init 1 */

htim4.Instance = TIM4;

htim4.Init.Prescaler = 0;

htim4.Init.CounterMode = TIM_COUNTERMODE_UP;

htim4.Init.Period = 65535;

htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

if (HAL_TIM_Base_Init(&htim4) != HAL_OK)

{

Error_Handler();

}

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)

{

Error_Handler();

}

if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)

{

Error_Handler();

}

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)

{

Error_Handler();

}

sConfigOC.OCMode = TIM_OCMODE_PWM1;

sConfigOC.Pulse = 0;

sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

{

Error_Handler();

}

if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)

{

Error_Handler();

}

if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)

{

Error_Handler();

}

if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)

{

Error_Handler();

}

/* USER CODE BEGIN TIM4_Init 2 */

 

/* USER CODE END TIM4_Init 2 */

HAL_TIM_MspPostInit(&htim4);

 

}

 

/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

 

/* GPIO Ports Clock Enable */

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();

 

}

Ход работы

 

Порядок работы

1. На основе примера написать свой код в среде разработки и скомпилировать его.

2. Ознакомиться с работой программы.

3. Создать новый проект в среде CubeMX и Keil.

4. Скомпилировать код на плату и проверить работу на отладочной плате Discavery.

 



2020-02-04 370 Обсуждений (0)
Лабораторная работа № 3: Генерация сигнала ШИМ( PWM ) 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа № 3: Генерация сигнала ШИМ( PWM )

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (370)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)