База знаний по трехмерному проектированию в Pro/Engineer, Creo, Solidworks, электронике на STM32
Обучение STM32. Управляем асинхронным двигателем с помощью микроконтроллера STM32 и преобразователя частоты
В этом уроке по микроконтроллеру STM32 вы научитесь:
- подключать преобразователь частоты к микроконтроллеру
- конфигурировать порты в CubeMX
- управлять асинхронным двигателем
Преобразователь частоты
Преобразователи частоты используются в огромном перечне областей человеческой деятельности. Они служат для управления электрическими двигателями переменного тока, как асинхронными, так и синхронными. Целью данного урока будет реверсивное управление асинхронным двигателем с помощью микроконтроллера с использованием преобразователя частоты фирмы TOSHIBA. Их серия VF-nC3 является недорогой и вполне функциональной для нашего случая (полная информация по ним есть у единственного официала по России СПИК СЗМА). Конечно, он не сравнится с новой серией TOSHIBA VF-AS3, в которой имеется встроенный календарь для запуска и остановки по сложному расписанию, web-сервер для управления двигателем со смартфона (крутой станок с ЧПУ можно организовать, однако) и возможность подключения абсолютного энкодера для точного позиционирования вала без применения ПЛК! Но сейчас рассмотрим более простые задачи.
Настройка частотного преобразователя
Перейдем к настройке преобразователя частоты (ПЧ) — воспользуемся мануалом за номером E6581606 (русский) / E6581595 (английский). Во первых определим логику работы: положительную SOURCE (оперируем плюсом) или отрицательную SINK (оперируем минусом). Для нашего случая включим положительную логику (параметр F127=100), т.е. будем подавать на входы преобразователя +24В для включения той или иной функции. Входы ПЧ в этом случае будут подтянуты к нулю внутри преобразователя. Взять +24В можно с клеммы P24 того же преобразователя частоты.
Мы также рассмотрим использование настраиваемого выхода 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 — это можно сделать, например, таким способом: покрутить колесико до установления значения 50 Гц — максимальной частоты требуемого нам разгона. Только после этого ПЧ нормально запускается.
Настройка портов в 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 */
}
Приятно управлять мощными двигателями с помощью столь мизерного микроконтроллера!
Теги
Поделиться ссылкой на статью
Engio.ru - лучший инженерный опыт, бесплатные уроки и обучение Solidworks, Creo, Pro/Engineer, STM32