Обучение STM32. Управляем асинхронным двигателем с помощью микроконтроллера STM32 и преобразователя частоты

В этом уроке по микроконтроллеру STM32 вы научитесь:

  • подключать преобразователь частоты к микроконтроллеру
  • конфигурировать порты в CubeMX
  • управлять асинхронным двигателем

 

Преобразователь частоты

Рис.1. Преобразователь частоты TOSHIBA VF-nC3 Преобразователи частоты используются в огромном перечне областей человеческой деятельности. Они служат для управления электрическими двигателями переменного тока, как асинхронными, так и синхронными. Целью данного урока будет реверсивное управление асинхронным двигателем с помощью микроконтроллера с использованием преобразователя частоты фирмы TOSHIBA. Их серия VF-nC3 является недорогой и вполне функциональной для нашего случая (полная информация по ним есть у единственного официала по России СПИК СЗМА). Конечно, он не сравнится с новой серией TOSHIBA VF-AS3, в которой имеется встроенный календарь для запуска и остановки по сложному расписанию, web-сервер для управления двигателем со смартфона (крутой станок с ЧПУ можно организовать, однако) и возможность подключения абсолютного энкодера для точного позиционирования вала без применения ПЛК! Но сейчас рассмотрим более простые задачи.

 

Настройка частотного преобразователя

Рис.2. Схема включения разной логики Перейдем к настройке преобразователя частоты (ПЧ) — воспользуемся мануалом за номером E6581606 (русский) / E6581595 (английский). Во первых определим логику работы: положительную SOURCE (оперируем плюсом) или отрицательную SINK (оперируем минусом). Для нашего случая включим положительную логику (параметр F127=100), т.е. будем подавать на входы преобразователя +24В для включения той или иной функции. Входы ПЧ в этом случае будут подтянуты к нулю внутри преобразователя. Взять +24В можно с клеммы P24 того же преобразователя частоты.

 

Рис.3. Не инвертирующая схема включения датчика через оптрон Мы также рассмотрим использование настраиваемого выхода OUT-NO для подачи сигналов с ПЧ на микроконтроллер. Для этого нужно соединить клемму P24 и клемму OUT, согласно мануалу. В этом случае можно наблюдать +24В на клемме NO в случае наступления заданного нами события, например достижения заданной частоты (что означает достижение нужного разгона двигателя). В итоге появляется такая схема управления: Входы F и R используются для включения двигателя в прямом и обратном направлении, выход NO для контроля разгона двигателя до установленной частоты. Все эти входы и выход подключим через оптроны для гарантированной развязки по напряжениям.

Итак введем в ПЧ следующие параметры (согласно мануала E6581595)

СП0d = 0   [Выбор режима управления = дискретные входы]
FH = 50    [Максимальная частота = 50 Гц]
UL = 50    [Верхний предел частоты = 50 Гц]
LL = 0     [Нижний предел частоты = 0 Гц]
F127 = 100 [Логика = SOURCE - положительная]
F130 = 40  [Настройка дискретного выхода NO на высокий уровень +24В при достижении частоты UL, в нашем случае 50 Гц]
F605 = 2   [Защита от обрыва фазы]
F607 = 10  [Выключение через 10 сек при перегрузке 150%]

Загадка преобразователей частоты TOSHIBA заключается в том, что при установленных параметрах FH и UL при выходе из настройки все-таки надо покрутить колесико до установления значения 50 Гц — максимальной частоты требуемого нам разгона. Только после этого ПЧ нормально запускается.

 

Настройка портов в CubeMX

Рис.4. Настройка входов и выходов микроконтроллера STM32 в CubeMX Перейдем теперь в CubeMX, где выбираем тип нашего микроконтроллера STM32F103C8T6. Перейдем на вкладку Pinout и настроим порты PA1 и PA2 на выход, а PA3 на вход. Это практически все настройки и есть. Сгенерируем код и откроем получившийся файл main.c.

В автоматически полученном коде проверим конфигурацию периферии: 2 выхода и 1 вход. В них записаны нули.

/*main.c*/

/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);

  /*Configure GPIO pins : PA1 PA2 */
  GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pin : PA3 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

 

В цикле while(1) { } функции main будем последовательно включать двигатель в прямом направлении, ждать достижения разгона и после этого выключать двигатель в обратном направлении. Преобразователь частоты автоматически плавно понизит частоту до 0 и вновь будет разгоняться уже в другом направлении. Эта процедуда будет повторяться бесконечно.

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

		//Запускаем двигатель в прямом направлении
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);	//Подаем сигнал на PA1 - клемму F преобразователя частоты
		
		while ( HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) != GPIO_PIN_SET ); //ждем сигнала максимального разгона двигателя
		
		//Запускаем двигатель в обратном направлении
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);	//Подаем сигнал на PA2 - клемму R преобразователя частоты

		while ( HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) != GPIO_PIN_SET ); //ждем сигнала максимального разгона двигателя
		
  }
  /* USER CODE END 3 */

}

 

Приятно управлять мощными двигателями с помощью столь мизерного микроконтроллера!

Поделиться ссылкой на статью

CADLife - лучший инженерный опыт, бесплатные уроки и обучение Solidworks, Creo, Pro/Engineer, STM32

Комментарии к статье