Просмотрев видео работы этого двигателя, захотелось эту статью скопировать себе в архивчик. Какие обороты! Сам то я не разбираюсь в программировании, но кому-то и пригодится. Таких оборотов не выдаст ни один двигатель, разве что от формулы-1.
Не зря трехфазные бесколлекторные двигатели нашли широкое применение в авиамоделизме.
Стандартный двигатель выглядит примерно так:
Двигатели из CD-ROM/DVD-ROM приводов выглядят так:
В интернете есть даже статьи по переделке бесколлекторного двигателя от CD-ROM для дальнейшего его применения в авиамоделизме.
В переделку обычно входят:
— перемотка другим проводом(тоньше или толще диаметром),
— изменение схемы намотки (звезда или треугольник),
— замена обычных магнитов на неодимовые.
После чего трехфазный двигатель приобретает дополнительные обороты и мощность.
Я в эксперименте использовал обычный бесколлекторный двигатель от HDD привода, вид такой:
Предварительно конечно лучше закрепить его на чем-то, я использовал корпус от того самого HDD привода.
Сам двигатель, который я использовал имеет четыре вывода, что говорит о том, что схема намотки у него в виде звезды с отводом от центра, то есть что-то примерно такое:
Схема управления простая, и состоит из не большого числа элементов. В виде управляющего устройства использован микроконтроллер ATmega8. Схема устройства показана на рисунке:
схема включения трехфазного бексоллекторного двигателя:
В схеме использованы драйверы полевых транзисторов IR4427 и сами полевые транзисторы IRFZ44.
Управляющая программа была написана не мною, автор Дмитрий(Maktep) за что ему отдельное спасибо.
Как исключение программа написана на Си для CV-AVR.
Программа транслирована под компилятор WIN GCC.
Частота кварца 8МГц, для устройств с связью по UART рекомендую использовать внешний кварц, так как при тактировании от внутреннего генератора могут появляться ошибки в виду его нестабильной работы при изменении температуры окружающей среды.
-
#include <avr/io.h>
-
#include <avr/interrupt.h>
-
#include <stdio.h>
-
void USART_Init( unsigned int ubrr);
-
void USART_Transmit( unsigned char data );
-
char status,data;
-
char state;
-
unsigned int lvl=65530/4;
-
// USART Receiver interrupt service routine
-
ISR(USART_RXC_vect)
-
{
-
status=UCSRA;
-
data=UDR;
-
if (lvl<3000)
-
{ if (data==‘+’)
-
lvl—;
-
else
-
if (data==‘-‘)
-
lvl++;}
-
else
-
{if (data==‘+’)
-
lvl-=lvl/500;
-
else
-
if(data==‘-‘)
-
//if (lvl,/)
-
lvl+=lvl/500;
-
}
-
}
-
// Timer1 output compare A interrupt service routine
-
ISR(TIMER1_COMPA_vect)
-
{
-
switch (state)
-
{
-
case 0: PORTC=1; break;
-
case 1: PORTC=3; break;
-
case 2: PORTC=2; break;
-
case 3: PORTC=6; break;
-
case 4: PORTC=4; break;
-
case 5: PORTC=5; break;
-
}
-
if (state<5)
-
state++;
-
else
-
state=0;
-
}
-
void USART_Init( unsigned int ubrr)
-
{
-
/* Set baud rate */
-
UBRRH = (unsigned char)(ubrr>>8);
-
UBRRL = (unsigned char)ubrr;
-
/* Enable receiver and transmitter */
-
UCSRB=(1<<RXEN)|(1<<TXEN);
-
UCSRB |= (1<< RXCIE);
-
/* Set frame format: 8data, 2stop bit */
-
UCSRC=0x86;//
-
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
-
}
-
void USART_Transmit( unsigned char data ) //
-
{
-
while ( !(UCSRA & (1<<UDRE)) ); //
-
UDR = data; //
-
}
-
int main(void)
-
{
-
PORTC=0x00;
-
DDRC=0x07;
-
// Timer/Counter 1 initialization
-
// Clock source: System Clock
-
// Clock value: 8000,000 kHz
-
// Mode: CTC top=OCR1A
-
// OC1A output: Discon.
-
// OC1B output: Discon.
-
// Noise Canceler: Off
-
// Input Capture on Falling Edge
-
// Timer1 Overflow Interrupt: Off
-
// Input Capture Interrupt: Off
-
// Compare A Match Interrupt: On
-
// Compare B Match Interrupt: Off
-
TCCR1A=0x00;
-
TCCR1B=0x09;
-
TCNT1H=0x00;
-
TCNT1L=0x00;
-
ICR1H=0x00;
-
ICR1L=0x00;
-
OCR1AH=0xFF;
-
OCR1AL=0xFF;
-
OCR1BH=0x00;
-
OCR1BL=0x00;
-
// Timer(s)/Counter(s) Interrupt(s) initialization
-
TIMSK=0x10;
-
USART_Init (8);//28800 4MHz
-
USART_Transmit(‘O’);
-
USART_Transmit(‘k’);
-
USART_Transmit(‘!’);
-
USART_Transmit(0x0d);
-
USART_Transmit(0x0a);
-
// Global enable interrupts
-
sei();
-
while (1)
-
{
-
OCR1A=lvl;
-
};
-
}
Алгоритм работы построен так, что при нажатии на клавиатуре кнопки «+» передается по UART в микроконтроллер, который увеличивает скорость коммутации обмоток. И при нажатии на кнопку «-» все выполняется наоборот, то есть обороты двигателя уменьшаются. Для работы устройства дополнительно понадобится UART-RS232 конвертер.
Эксперимент показал что при данной программе и данной схеме включения можно разогнать двигатель до приличных оборотов, точное число не известно, думаю в пределах 30 000 оборотов в минуту. Но к сожалению сила двигателя недостаточная для раскручивания пластикового пропеллера, верней с пропеллером двигатель набирает обороты, но при нагрузке происходит сбой и остановка двигателя.
Для избежания данного недостатка применяются датчики Холла, устройства контролирующие положение ротора бесколлекторного двигателя. Это сделано для того, чтобы импульс на обмотку двигателя подавать именно в тот момент когда ротор проходит конец обмотки, то есть для смещения момента силы ближе к концу прохождения сектора обмотки. Это даст прирост мощности двигателя и он не будет глохнуть при нагрузках.
В видеоролике показано как я закрепил два кусочка пластика вырезанных из телефонной карточки в виде лепестка и прикрученных к ротору двигателя.
В планах попробовать применить ШИМ для коммутации обмоток. Рассчитываю на повышение мощности, улучшение характеристик разгона двигателя (в частности скорости разгона), повышение КПД.