Последние комментарии

Управление бесколлекторным двигателем постоянного тока

Управление бесколлекторным двигателем постоянного токаКак известно в коллекторных двигателях постоянного тока коммутация обмоток в нужный момент времени осуществляется с помощью коллекторного узла(якоря). В беcколлекторных двигателях коммутацией управляет электроника. Для определения момента коммутации контроллер может использовать или датчики положения(Датчики Холла) или обратную ЭДС, генерируемую неподключенными обмотками. Датчики положения наиболее часто используются в низкооборотистых (таговых)двигателях, где пусковой момент существенно варьируется или где требуется его высокое значение, а также где двигатель используется для позиционирования. Управление бесколлекторными двигателями без датчиков используется в тех случаях, когда пусковой момент существенно не изменяется и когда отсутствует необходимость в управлении позиционированием, как, например, в вентиляторах.

На каждой ступени коммутации, обмотка одной фазы подключается к положительному напряжению питания, другая - к отрицательному, а третья - остается неподключенной. Обратная ЭДС неподключенной фазы в результате пересекает ноль при пересечении среднего значения положительного и отрицательного напряжений. Пересечение ноля возникает всегда в центре между двумя коммутациями. На постоянной скорости или медленно изменяющейся скорости период времени от одной коммутации до пересечения нуля и время от пересечения нуля до следующей коммутации равны. Это используется в качестве основы в данной реализации устройства управления без использования датчиков.

Для определения сигналов обратной ЭДС будем использовать метод виртуальной средней точки, для этого меряем напряжение на свободной фазе и сравниваем его со средней точкой. При использовании АЦП требуется некоторое время для преобразования, что снижает производительность, поэтому логичнее использовать аналоговые компараторы, нам ведь не нужно знать точное значение АЦП этого сигнала. Компаратор может генерировать прерывание в момент перехода напряжения через среднюю точку, а также выдавать логический сигнал своего состояния, что нам и будет нужно.

Три ШИМ-канала, OC1A, OC2 и OC1B, управляют верхними ключами(P-канальные MOSFET) мостовой схемы. Это дает возможность управления электрическим током с помощью аппаратных возможностей генерации ШИМ-сигналов при минимальном использовании программных ресурсов. В этом случае управление скоростью выполняется за счет изменения скважности ШИМ-сигнала.

Нижние ключи управляются логическими сигналами, и в нужный момент N-канальные MOSFET подключают обмотку к минусу питания или к линии обратной ЭДС. Ниже представлены таблицы состояний сигналов подаваемых на верхние и нижние ключи, с направлением вращения по часовой и против часовой стрелки.

Биты конфигурации микроконтроллера

   

Код программы с подробными комментариями:

// Подключение бесколлекторного двигателя к AVR(без датчиков)
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>

// Фаза U(Верхнее плечо)
#define UH_ON	TCCR1A |= (1 << COM1A1);
#define UH_OFF	TCCR1A &= ~(1 << COM1A1);

// Фаза U(Нижнее плечо)
#define UL_ON	PORTB |= (1 << PB5);
#define UL_OFF	PORTB &= ~(1 << PB5);

// Фаза V(Верхнее плечо)
#define VH_ON	TCCR2 |= (1 << COM21);
#define VH_OFF	TCCR2 &= ~(1 << COM21);

// Фаза V(Нижнее плечо)
#define VL_ON	PORTB |= (1 << PB0);
#define VL_OFF	PORTB &= ~(1 << PB0);

// Фаза W(Верхнее плечо)
#define WH_ON	TCCR1A |= (1 << COM1B1);
#define WH_OFF	TCCR1A &= ~(1 << COM1B1);

// Фаза W(Нижнее плечо)
#define WL_ON	PORTB |= (1 << PB4);
#define WL_OFF	PORTB &= ~(1 << PB4);

#define PHASE_ALL_OFF	UH_OFF;UL_OFF;VH_OFF;VL_OFF;WH_OFF;WL_OFF;

#define SENSE_U		ADMUX = 0; // Вход обратной ЭДС фазы U 
#define SENSE_V		ADMUX = 1; // Вход обратной ЭДС фазы V
#define SENSE_W		ADMUX = 2; // Вход обратной ЭДС фазы W

#define SENSE_UVW	(ACSR&(1 << ACO)) // Выход компаратора

#define START_PWM   10 // Минимальный ШИМ при запуске
#define WORK_PWM   100 // Рабочий уровень ШИМ

unsigned char start_stop = 0;
volatile unsigned char motor_pwm = WORK_PWM;
volatile unsigned char commutation_step = 0;
volatile unsigned char rotor_run = 0; // Счетчик импульсов обратной ЭДС

// Крутим по часовой стрелке
void commutation(unsigned char startup)
{
	switch (commutation_step)
	{
		case (0):
			if(!SENSE_UVW || startup) 
			{
				UH_ON; // На фазе U - ШИМ
				WH_OFF; // Фаза W отключена
				SENSE_W; // Активируем вход фазы W
				commutation_step = 1; // Следующий шаг
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;

		case (1):
			if(SENSE_UVW || startup)
			{
				VL_OFF; // На фазе V - лог. 0
				WL_ON;  // На Фазе W - лог. 1
				SENSE_V; // Активируем вход фазы V
				commutation_step = 2;
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;

		case (2):
			if(!SENSE_UVW || startup)
			{
				UH_OFF; // Фаза U отключена
				VH_ON;  // На фазе V - ШИМ
				SENSE_U; // Активируем вход фазы U
				commutation_step = 3;
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;
	
		case (3):
			if(SENSE_UVW || startup)
			{
				UL_ON;  // На фазе U - лог. 1
				WL_OFF; // На Фаза W - лог. 0
				SENSE_W; // Активируем вход фазы W
				commutation_step = 4;
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;

		case (4):
			if(!SENSE_UVW || startup)
			{
				VH_OFF;  // Фаза V отключена
				WH_ON;   // На фазе W - ШИМ
				SENSE_V; // Активируем вход фазы V
				commutation_step = 5;
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;

		case (5):
			if(SENSE_UVW || startup)
			{
				UL_OFF; // На фазе U - лог. 0
				VL_ON;  // На Фазе V - лог. 1
				SENSE_U; // Активируем вход фазы U
				commutation_step = 0;
				TCNT0 = 0; // Обнуляем счетчик T0
			}
			break;
	}
}
// Обработчик прерывания по компаратору. Детектор обратной ЭДС
ISR(ANA_COMP_vect) 
{
rotor_run++; // инкрементируем импульсы
if(rotor_run > 200) rotor_run = 200;
if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную 
commutation(0);
}
// Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС
ISR(TIMER0_OVF_vect)
{	
commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС
rotor_run = 0;  // Сбрасываем счетчик импульсов
OCR1A = START_PWM; // ШИМ минимум
OCR1B = START_PWM;
OCR2 = START_PWM;
}
// Обработчик внешнего прерывания INT0. Энкодер
ISR(INT0_vect){
    _delay_us(100);
    if ((PIND & ( 1 << PD2)) == 0){
        _delay_us(100);
// Крутим против часовой стрелки
		if ((PIND & ( 1 << PD1)) == 0)
	    { 
		  if(motor_pwm != START_PWM) motor_pwm -= 5; // Уменьшаем ШИМ
		}
// Крутим по часовой стрелке
		else
    	{
		  if(motor_pwm != 255) motor_pwm += 5; // Увеличиваем ШИМ
		}
	}
    GIFR = (1 << INTF0); // Сбрасываем флаг внешнего прерывания
    return;
}

int main (void) 
{
// Порты ввода/вывода
DDRB  = 0xFF;
PORTB = 0x00;
DDRD &= ~(1 << PD6)|(1 << PD2)|(1 << PD1)|(1 << PD0);
PORTD |= (1 << PD2)|(1 << PD1)|(1 << PD0);	
PORTD &= ~(1 << PD6);

// T0 - для старта и работы двигателя без сигналов обратной ЭДС
TCCR0 |= (1 << CS02)|(1 << CS00); // Предделитель на 1024
TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению T0
// T1 и T2 ШИМ
TCCR1A |= (1 << COM1A1)|(1 << COM1B1)| // Clear OC1A/OC1B, set OC1A/OC1B at BOTTOM
          (1 << WGM10);  // Режим Fast PWM, 8-bit
TCCR1B |= (1 << CS10)|(1 << WGM12); // Без предделителя 
TCCR2 |= (1 << COM21)| // Clear OC2, set OC2 at BOTTOM
         (1 << WGM21)|(1 << WGM20)| // Режим Fast PWM
		 (1 << CS20); // Без предделителя

PHASE_ALL_OFF; // Выключаем все фазы 
	
// Аналаговый компаратор
ADCSRA &= ~(1 << ADEN); // Выключаем АЦП
SFIOR |= (1 << ACME); // Отрицательный вход компаратора подключаем к выходу мультиплексора АЦП
ACSR |= (1 << ACIE); // Разрешаем прерывания от компаратора

// Внешнее прерывание(Энкодер)
MCUCR |= (1 << ISC01); // Прерывание по заднему фронту INT0(по спаду импульса)
GIFR |= (1 << INTF0); // Очищаем флаг внешнего прерывания
GICR |= (1 << INT0); // Разрешаем внешние прерывания INT0
	    
sei(); // Глобально разрешаем прерывания

while(1)
{	
if((PIND&(1 << PD0)) == 0) // Старт/Стоп 
{
_delay_ms(20);
start_stop ^= 1; // Переключаем состояние
while((PIND&(1 << PD0)) == 0){}
}

if(start_stop)
{
ACSR |= (1 << ACIE); // Разрешаем прерывание от компаратора
TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению T0
GICR |= (1 << INT0); // Разрешаем внешние прерывания INT0  
 
  if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ
  {
  OCR1A = motor_pwm;
  OCR1B = motor_pwm;
  OCR2 = motor_pwm;
  }
}
else
{
PHASE_ALL_OFF; // Все фазы выключены
ACSR &= ~(1 << ACIE); // Запрещаем прерывание от компаратора
TIMSK &= ~(1 << TOIE0); // Запрещаем прерывание по переполнению T0
GICR &= ~(1 << INT0); // Запрещаем внешние прерывания INT0
}

}
}

 

Архив для статьи "Управление бесколлекторным двигателем постоянного тока" HOT
Проект AVRStudio4, макет печатной платы Diptrace
File Size 36.31 KB Download 1 455 Download

Метки: ATmega8, Бесколлекторный двигатель

Печать E-mail

Комментарии  

0 #21 AntonChip 03.02.2017 10:26
Цитирую Андрей2:
Спасибо что ответили,и еще если можно,дайте наводочку,где стоят такие транзисторы? спасибо!

Можно снять со старых материнских плат, транзисторы возможно будут в других корпусах
Сообщить модератору
0 #22 AntonChip 03.02.2017 10:26
Цитирую Владимир999:
Хочу собрать данный контролер.
С датчиками хола работает (Просто подключить по схеме)?
Направление вращения есть возможность менять?
СПАСИБО!

Нет
Сообщить модератору
0 #23 AntonChip 03.02.2017 10:27
Цитирую Владимир999:
ДА и есть возможность плавно стартовать или крутится на минимальных оборотах?

требуется доработка программы
Сообщить модератору
0 #24 Юрий 778 15.02.2017 15:25
Добрый день. А можно ли применить эту схему для трезфазного асинхронника или мотор колеса без датчика Холла?
Сообщить модератору
0 #25 AntonChip 16.02.2017 19:53
Цитирую Юрий 778:
Добрый день. А можно ли применить эту схему для трезфазного асинхронника или мотор колеса без датчика Холла?

Эта схема больше подойдет radioparty.ru/.../...
Сообщить модератору
0 #26 n.mikro 25.08.2017 11:37
(таговых)двигат елях? :o
Сообщить модератору

Избранное "Устройства на AVR"

Предлагаемое устройство собрано на микроконт­роллере. Оно имеет меньшие габариты и более простую конструкцию, что позволит установить его на моделях автомобилей или других электрофицированных игрушках.

Схема устройства показана на рисунке. Его основа — микроконтрол­лер AT90S1200. Линии порта В ...

Основой предлагаемого читателям устройства послужили исходные коды прошивки микроконтроллера набора NM3311 МАСТЕР КИТ. Видимо, после того как фирма ATMEL сняла с производства микропроцессор AT90S2313, руководство МАСТЕР-КИТ посчитало нецелесообразным хранить в коммерческой тайне исходные коды ...

В этой статье рассматривается схемотехническое решение, устройство и конструкция DDS генератора (генератор с прямым цифровым синтезом формы сигнала) на микроконтроллере ATmega16 фирмы Atmel. В приборе, кроме синтеза сигнала различной формы и частоты, реализуется возможность регулировки амплитуды и ...

Еще несколько лет назад прямые цифровые синтезаторы частоты (Direct Digital Synthesizers или DDS) были диковинкой с очень ограниченной областью применения. Их широкое использование сдерживалось сложностью реализации, а также недостаточно широким диапазоном рабочих частот.

Один инструмент, который отсутствовал в моей домашней лаборатории - это фунциональный генератор. Эти приборы, как правило дорогие, а возможности купить его у меня не было. Я подумал, что стоит попробовать самому собрать этот прибор. Я нашел довольно распространенный DDS чип(прямой цифровой синтез) ...

Основная идея проекта - исследовать силу гравитации. Игрушка сделана из половины мячя для пинг-понга. По окружности светится красная точка, которая всегда остается вверху. При вращении игрушки в любом направлении, как вы хотите - красная точка всегда будет подниматься снова. Видео показано ниже:

...

“SignALL” – GSM сигнализация (далее по тексту “устройство”), предназначена для охраны помещений, таких как квартиры, дачи, гаражи и т.д. в составе мобильного телефона Siemens. Отличительной особенностью данного уcтройства является то, что оно в отличие от других подобных схем, оно является ...

Увидев несколько устройств в сети, которые управляют светодиодами в зависимости от нагрузки на процессор, я решил создать свою собственную схему, так как другие выглядят не очень совершенно. Изначально планировал чтобы девайс общался с ПК по шине USB при помощи TTL последовательного ...

Контроллер работает со светодиодными лентами RGB, которые сейчас очень популярны и ими легко декоративно выделить потолки, лестницы, зеркала и полки в ванных комнатах, кухнях и т.д. Система управления разделена на две части: контроллер, основанный на микроконтроллере ATtinny2313 и питающий/силовой ...

Этот контроллер способен управлять отдельным RGB светодиодом или светодиодной лентой используя пульт дистанционного управления стандарта RC5. Устройство построено на базе распространенных компонентов: микроконтроллер Attiny2313 фирмы Atmel, инфракрасный приемник TSOP1736, стабилизатор LM7805, кварц ...

Ночник сделан из корпуса старого китайского светильника, быстросменяющиеся световые эффекты и быстрое перемигивание светодиодов было заменено на плавный перебор цветов радуги. Плата заменена на новую, и был использован RGB светодиод, управляет которым микроконтроллер Attiny2313. При ...

Термометр является HID-устройством (Human Interface Device). Термометр собран на популярном и относительно недорогом микроконтроллере ATtiny2313 (AT90S2313), непосредственно измерением температуры занимается интегральный термометр DS18B20 (или DS18S20).

С помощью описанного ниже простого прибора автолюбитель сможет за несколько минут проверить и отрегулировать начальную установку угла опережения зажигания на своем автомобиле, а также проверить работоспособность центробежного и вакуумного регуляторов.

Появление в продаже мощных светодиодов, ...

Автономные системы охраны получили достаточно широкое распространение в нашей стране из-за простоты и дешевизны. Классическая простейшая автономка представляет из себя вандалоустойчивый ящик с сиреной, скрытно устанавливаемый тумблер или кнопку для отключения сирены и дверной магнитоконтактный ...

Это мультиметр предназначен для измерения напряжения и тока в блоках питания. Шунт от 0,05 Ома до 2 Ом должен быть включен последовательно с нагрузкой. Может питаться от измеряемого напряжения основного блока питания в пределах 12-30 Вольт.

  • "Бегущий огонь" с автореверсом

    Предлагаемое ...

  • 8-ми канальная система инфракрасного дистанционного управления
    8-ми канальная система инфракрасного ...

    Основой ...

  • DDS генератор на ATmega16
    DDS генератор на ATmega16

    В этой статье ...

  • DDS генератор на Atmega48
    DDS генератор на Atmega48

    Еще несколько лет ...

  • DDS генератор сигналов на AT90USB162 и AD9833 управляемый по USB
    DDS генератор сигналов на AT90USB162 и AD9833 ...

    Один инструмент, ...

  • Gravitron
    Gravitron

    Основная идея ...

  • GSM сигнализация + Touch Memory на Attiny2313
    GSM сигнализация + Touch Memory на Attiny2313

    “SignALL” – GSM ...

  • RGB индикатор загрузки процессора компьютера на Attiny45
    RGB индикатор загрузки процессора компьютера на ...

    Увидев несколько ...

  • RGB контроллер на Attiny2313 с управлением на энкодере
    RGB контроллер на Attiny2313 с управлением на ...

    Контроллер работает ...

  • RGB контроллер с дистанционным управлением на Attiny2313
    RGB контроллер с дистанционным управлением на ...

    Этот контроллер ...

  • RGB ночник на Attiny2313
    RGB ночник на Attiny2313

    Ночник сделан из ...

  • USB-термометр на ATtiny2313
    USB-термометр на ATtiny2313

    Термометр является ...

  • Автомобильный стробоскоп
    Автомобильный стробоскоп

    С помощью ...

  • Автономная охранная система на базе Touch Memory
    Автономная охранная система на базе Touch Memory

    Автономные системы ...

  • АмперВольтметр на Atmega8
    АмперВольтметр на Atmega8

    Это мультиметр ...

Избранное "Устройства на MICROCHIP"

Таймер предназначен для отработки выдержки времени от 0 до 9999 секунд, с точностью 1 секунда. Во время отсчета показания индикатора уменьшаются и в любой момент можно посмотреть сколько еще секунд осталось до окончания заданного интервала.

С целью упрощения индикация и установка производится ...


Этот проект представляет собой 3-х канальную инфракрасную (ИК) дистанционную систему управления. Эта система работает на 12-bit  SIRC - сигналах, которые используются в пультах дистанционного управления фирмы Sony.


Часто при проверке цифровых сигналов или при отладке своих устройств необходим логический анализатор, тем более что все больше устройств разрабатывается на микроконтроллерах. Здесь рассматривается простое решение логического анализатора, который может использоваться для большинства цифровых ...


В этой статье представлена схема 4-х разрядного счетчика на PIC16F88 который имеет следующие характеристики:
- прямой и обратный счет
- сброс результата счета
- свободный счет или удержание при достижении заданного значения
- заданное количество разрядов
- сигнал на выходе контроллера при ...

Терморегулятор CH-1000 предназначены для управления системами регулирования температуры в пределах от - (минус) 50 до + 120 °С. Регулятор может использоваться как в системах отопления, так и в системах охлаждения с управлением компрессором. Регуляторы выпускаются в без корпусном исполнении ...

Описываемый ниже прибор позволяет в широких пределах измерять частоты электрических колебаний, а также ёмкость и индуктивность электронных компонентов с высокой точностью. Расширен предел измерения ёмкости до 10000мкФ.  Так же имеется встроенный генератор фиксированных частот до 1МГц.

Устройство предназначено для измерения малых сопротивлений, индуктивности, емкости и ЭПС конденсаторов. Функционально, схему можно разбить на 8 основных модулей:
- L/C генератор
- Блок источников стабильного тока (50mA/5mA/0.5mA)
- Блок, отвечающий за разряд испытуемого конденсатора
- Блок ...

Это проект полноцветного светодиодного индикатора уровня, который управляется по USB с компьютера на Windows 7 или Vista. Проект преследует несколько целей:

Во-первых, он показывает, как читать аудиоинформацию от машины на Windows и передавать эти данные через USB к устройству.
Во-вторых, он ...

Этот проект представляет собой RGB контроллер, который может быть настроен через соединение USB. Цвет подключенных светодиодов (общий анод) зависит от выбранного режима работы:

- Медленное изменение цвета (около 40 минут);
- Быстрое изменение цвета (около 2 минут);
- Изменение цвета по температуре ...

Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще можно увидеть светодиоды в оформлении и декоративном освещении.

В этой статье мы ...

Power Pic RGB с дистанционным инфракрасным управлением это устройство, которое генерирует цвета с использованием RGB светодиода и может управляться с помощью любого инфракрасного пульта дистанционного управления протокола Sony SIRC.

Эта третья версия проекта Power Pic RGB, цель которой управлять ...

Светодиодные RGB - светильники используются для создания декоративной подсветки. Источниками света в них служат 3 светодиода красного, зеленого и синего цвета. Смешение цветов создает неповторимую световую картину с тысячами оттенков. Светодиоды являются энергосберегающими источниками света, и их ...

В устройстве предусмотрен ручной и автоматический режим индикации. Когда переключатель SA1 разомкнут действует автоматический режим, при этом цвета меняются с достаточно большой задержкой. Если SA1 замкнут работает ручной режим, где поворотом ручки потенциометра R4 выбирается подходящий цвет ...

24 светодиода, расположенные по кругу создают несколько световых эффектов. Управляет всем микроконтроллер PIC16F628. Скорость перемигивания светодиодов можно изменить путем смены кварца на разные частоты. Схема устройства представлена ниже. Также можно посмотреть видео работы автомата.

Предлагаемое автоматическое зарядное устройство (ЗУ) предназначено для зарядки батареи аккумуляторов номиналь­ным напряжением 12 В и емкостью 1 ...10 А-ч, но при небольшой доработке его можно применить для зарядки аккумуляторных батарей с другими напряжением и емкостью.

В ЗУ применен ...

  • 0-9999 секундный таймер на PIC12F683
    0-9999 секундный таймер на PIC12F683

    Таймер ...

  • 3-х канальная система инфракрасного дистанционного управления на PIC12F629
    3-х канальная система инфракрасного ...

    Этот проект ...

  • 4-канальный логический анализатор на PIC микроконтроллере
    4-канальный логический анализатор на PIC ...

    Часто при ...

  • 4-х разрядный счетчик импульсов на PIC16F88
    4-х разрядный счетчик импульсов на PIC16F88

    В этой статье ...

  • CH-1000 - терморегулятор с датчиком температуры DS18B20
    CH-1000 - терморегулятор с датчиком температуры ...

    Терморегулятор ...

  • FLC– метр/генератор на PIC16F628
    FLC– метр/генератор на PIC16F628

    Описываемый ниже ...

  • LCF - метр PIC18F2520+Nokia 3310LCD
    LCF - метр PIC18F2520+Nokia 3310LCD

    Устройство ...

  • RGB индикатор уровня на PIC18F2550
    RGB индикатор уровня на PIC18F2550

    Это проект ...

  • RGB контроллер с USB интерфейсом на PIC18F2550
    RGB контроллер с USB интерфейсом на PIC18F2550

    Этот проект ...

  • RGB контроллер с дистанционным управлением на PIC12F683
    RGB контроллер с дистанционным управлением на ...

    Все активнее ...

  • RGB контроллер с ИК ДУ на PIC12F629/675/683
    RGB контроллер с ИК ДУ на PIC12F629/675/683

    Power Pic RGB с ...

  • RGB светильник на PIC12F629
    RGB светильник на PIC12F629

    Светодиодные RGB - ...

  • RGB светильник на PIC12F675
    RGB светильник на PIC12F675

    В устройстве ...

  • Автомат световых эффектов на PIC16F628
    Автомат световых эффектов на PIC16F628

    24 светодиода, ...

  • Автоматическое зарядное устройство для АКБ 1-10 А-ч
    Автоматическое зарядное устройство для АКБ 1-10 ...

    Предлагаемое ...

Авторизация