Запускаем трехфазный двигатель от HDD (контроллер бесколлекторного двигателя)

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

Ответ: столько оборотов в минуту из известных мне двигателей дает только движок от формулы 1 :-)
Не зря трехфазные бесколлекторные двигатели нашли широкое применение в авиамоделизме.
Стандартный бесколлекторный двигатель выглядит примерно так:
бесколлекторный двигатель
Двигатели из CD-ROM/DVD-ROM приводов выглядят так:
бесколлекторный двигатель из CD-ROM
В интернете есть даже статьи по переделке бесколлекторного двигателя от CD-ROM для дальнейшего его применения в авиамоделизме.
В переделку обычно входят:
- перемотка другим проводом(тоньше или толще диаметром),
- изменение схемы намотки (звезда или треугольник),
- замена обычных магнитов на ниодимовые.
После чего трехфазный двигатель приобретает дополнительные обороты и мощность.

Я в эксперименте использовал обычный бесколлекторный двигатель от HDD привода, виглядит он так:
двигатель от HDD
Предварительно конечно лучше закрепить его на чем-то, я использовал корпус от того самого HDD привода.

Сам двигатель, который я использовал имеет четыре вывода, что говорит о том, что схема намотки у него в виде звезды с отводом от центра, то есть что-то примерно такое:
схема обмоток бексоллекторного двигателя

Схема управления простая, и состоит из не большого числа элементов. В виде управляющего устройства использован микроконтроллер ATmega8. Схема устройства показана на рисунке:
схема включения трехфазного бексоллекторного двигателя

В схеме использованы драйверы полевых транзисторов IR4427 и сами полевые транзисторы IRFZ44.
Управляющая программа была написана не мною, автор Дмитрий(Maktep) за что ему отдельное спасибо.
Как исключение программа написана на Си для CV-AVR.
ПРограмма транслирована под компилятор WIN GCC.
Частота кварца 8МГц, для устройств с связью по UART рекомендую использовать внешний кварц, так как при тактировании от внутреннего генератора могут появляться ошибки в виду его нестабильной работы при изменении температуры окружающей среды.

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <stdio.h>
  4.  
  5. void USART_Init( unsigned int ubrr);
  6. void USART_Transmit( unsigned char data );
  7.  
  8. char status,data;
  9. char state;
  10. unsigned int lvl=65530/4;
  11.  
  12. // USART Receiver interrupt service routine
  13. ISR(USART_RXC_vect)
  14. {
  15. status=UCSRA;
  16. data=UDR;
  17. if (lvl<3000)
  18. { if (data=='+')
  19. lvl--;
  20. else
  21. if (data=='-')
  22. lvl++;}
  23. else
  24. {if (data=='+')
  25. lvl-=lvl/500;
  26. else
  27. if(data=='-')
  28. //if (lvl,/)
  29. lvl+=lvl/500;
  30. }
  31. }
  32.  
  33. // Timer1 output compare A interrupt service routine
  34. ISR(TIMER1_COMPA_vect)
  35. {
  36. switch (state)
  37. {
  38. case 0: PORTC=1; break;
  39. case 1: PORTC=3; break;
  40. case 2: PORTC=2; break;
  41. case 3: PORTC=6; break;
  42. case 4: PORTC=4; break;
  43. case 5: PORTC=5; break;
  44. }
  45.  
  46. if (state<5)
  47. state++;
  48. else
  49. state=0;
  50. }
  51.  
  52.  
  53. void USART_Init( unsigned int ubrr)
  54. {
  55. /* Set baud rate */
  56. UBRRH = (unsigned char)(ubrr>>8);
  57. UBRRL = (unsigned char)ubrr;
  58. /* Enable receiver and transmitter */
  59. UCSRB=(1<<RXEN)|(1<<TXEN);
  60. UCSRB |= (1<< RXCIE);
  61.  
  62. /* Set frame format: 8data, 2stop bit */
  63. UCSRC=0x86;//
  64. UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
  65. }
  66.  
  67. void USART_Transmit( unsigned char data ) //
  68. {
  69. while ( !(UCSRA & (1<<UDRE)) ); //
  70. UDR = data; //
  71. }
  72.  
  73.  
  74. int main(void)
  75. {
  76. PORTC=0x00;
  77. DDRC=0x07;
  78.  
  79. // Timer/Counter 1 initialization
  80. // Clock source: System Clock
  81. // Clock value: 8000,000 kHz
  82. // Mode: CTC top=OCR1A
  83. // OC1A output: Discon.
  84. // OC1B output: Discon.
  85. // Noise Canceler: Off
  86. // Input Capture on Falling Edge
  87. // Timer1 Overflow Interrupt: Off
  88. // Input Capture Interrupt: Off
  89. // Compare A Match Interrupt: On
  90. // Compare B Match Interrupt: Off
  91. TCCR1A=0x00;
  92. TCCR1B=0x09;
  93. TCNT1H=0x00;
  94. TCNT1L=0x00;
  95. ICR1H=0x00;
  96. ICR1L=0x00;
  97. OCR1AH=0xFF;
  98. OCR1AL=0xFF;
  99. OCR1BH=0x00;
  100. OCR1BL=0x00;
  101.  
  102. // Timer(s)/Counter(s) Interrupt(s) initialization
  103. TIMSK=0x10;
  104.  
  105. USART_Init (8);//28800 4MHz
  106. USART_Transmit('O');
  107. USART_Transmit('k');
  108. USART_Transmit('!');
  109.  
  110. USART_Transmit(0x0d);
  111. USART_Transmit(0x0a);
  112.  
  113. // Global enable interrupts
  114. sei();
  115.  
  116. while (1)
  117. {
  118. OCR1A=lvl;
  119. };
  120. }

Скачать проект Win AVR

Алгоритм работы построен так, что при нажатии на клавиатуре кнопки "+" передается по UART в микроконтроллер, который увеличивает скорость коммутации обмоток. И при нажатии на кнопку "-" все выполняется наоборот, то есть обороты двигателя уменьшаются. Для работы устройства дополнительно понадобится UART-RS232 конвертер.

Эксперимент показал что при данной программе и данной схеме включения можно разогнать двигатель до приличных оборотов, точное число не известно, думаю в пределах 30 000 оборотов в минуту. Но к сожалению сила двигателя недостаточная для раскручивания пластикового пропеллера, верней с пропеллером двигатель набирает обороты, но при нагрузке происходит сбой и остановка двигателя.

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

Видео работы устройства:

В видеоролике показано как я закрепил два кусочка пластика вырезанных из телефонной карточки в виде лепестка и прикрученных к ротору двигателя.

В планах попробовать применить ШИМ для коммутации обмоток. Рассчитываю на повышение мощности, улучшение характеристик разгона двигателя (в частности скорости разгона), повышение КПД.

Вопрос к автору, а можно ли

Вопрос к автору, а можно ли сюда прикрутить программу от этого устройства: gaw.ru/html.cgi/txt/app/micros/avr/AVR444.htm
Правда тут используется ATmega48.

Нельзя, схема включения

Нельзя, схема включения совсем другая.

Помогите пожалуйста

Скажите пожалуйста, как можно связаться с этим человеком "автор Дмитрий(Maktep)" который написал программу. Очень нужно вот так можно связаться со мной Gothic444@mail.ru или так vk.com/id38070054 или так UIN: 607313200 буду вам очень признателен и благодарен))))

Например я её переписывал,

Например я её переписывал, могу чем-то помочь?
Я конвертировал её с синтаксиса CV AVR в Win AVR

А можете выложить эту

А можете выложить эту программу в оригинале, т.е. под CV AVR?

Код в CV AVR

Блин я уже наверное и не найду его в старом варианте, как выход попробуй просто этот код вставить и подправить код где синтаксис не подходит для CV AVR там я буквально пару строк поменял да и то в низ по паре символов всего.

Не могли бы вы мне помочь?

Дано:
CD привод, небольшие познания в радиоэлектронике, программировании микроконтроллеров на С (CVAVR).
Задача:
Управлять скоростью вращения CD привода (отсоединенного от компа) с помощью кнопок. А сама скорость выводится на ЖКИ. Буду очень признателен за любую помощь. Пока не хватает знаний, к сожалению, для того, чтобы осуществить задуманное.

Если возможно, свяжитесь со мной icq: 332332181 или skype: dragul0nok

Возможно ли переписать

Возможно ли переписать программу под самостоятельный запуск двигателя на максимальные обороты без участия компьютера и человека?

Конечно можно, можно под

Конечно можно, можно под старт от кнопки или что бы автоматом росли обороты до определенного момента.

А возможно вас попросить это

А возможно вас попросить это сделать и выложить этот вариант?
И как программа узнает, что этот (конкретный экземпляр двигателя) раскрутился до максимальных оборотов?

---

Плз скажите какое сопротивление обмотки вашего двигателя и какой мощности БП?

Я так и не скажу точно, БП у

Я так и не скажу точно, БП у меня был 1,2 Ампера выдавал ток максимум.
Мосфеты на радиаторе грелись хорошо :-)

Открыть дисковод

А как с помощью ассемблера открыть дисковод? Уже несколько месяцев роюсь в интернете, но никак не могу найти дескриптор дисковода и сигналы, которые им надо отсылать для открытия. Ассемлбер знаю немного, но знаний устройства дисковода не хватает. smiledforyou@gmail.com

Мощные бесколлекторники (в

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

По идее обмотки подключаются 3-мя полумостами полевиков, 3 АЦП по входам движка, а вот как этим добром управлять - большая головная боль.

Ага, в интернете много таких

Ага, в интернете много таких схем. Только проблема, сами схемы сложноватые и программы все с закрытым кодом. Все коммерческое.

Почему не использовали L293

Почему не использовали L293 вместо контроллеров полевиков и самих полевых транзисторов? Ведь лучше две микросхемы вместо четырёх

Драйвер - устройство

Драйвер - устройство повышающее ток для уменьшения потерь переключения полевого транзистора.
Потери при переключении это все мощность толчка при раскручивании двигателя, а мощность толчка это обороты, тяга и тд. тп. Микросхема L293 с её сумасшедшим нагревом просто не сможет отдать такую мощность в нагрузку как полевик. Верней сможет но ток надо будет дать 10Ампер)))

Микросхем не 4-ре, про IR4427 читаем внимательней в следующий раз.

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

"Эксперимент показал что при данной программе и данной схеме включения можно разогнать двигатель до приличных оборотов, точное число не известно, думаю в пределах 30 000 оборотов в минуту."

Обороты можно замерить обычным оптическим датчиком или тем же холлом, если хочется наворотов.

Подпрограмма изменения скорости использует какие то хитрые цифры, которые никак не прокомментированы.

Есть бесколлекторник от пятидюймового дисковода.
К нему, кстати, еще прилагается контроллер и там 3 датчика холла стоят.
Разобрать мне его не удалось, видимо за более чем 10 лет там произошла диффузия металлов и все болты приросли к корпусу, а ломать и сверлить не охота. На вид он почти на порядок больше обычных движков от оптических приводов.
Можно как то определить, до каких пределов его можно разогнать и какую нагрузку он потянет? Или только опытным путём?

Разобрать мне его не удалось

Я тоже лет 10 назад разбирал такой, мучился - мучился, все шлицы на болту сорвал, а оказалось он откручивается очень легко, но только в другую сторону. т.е по часовой стрелке.

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

есть еще вариант, просто нагреть винт к примеру паяльником и он открутится как в масле.

Что именно ты раскручивал?

Что именно ты раскручивал? Сам двигатель?

Какие именно цифры

Какие именно цифры смущают?

По поводу дисковода 5,25 дюйма хочу сказать что разбирал такой. В моем стояла микросхема Mitsubishi большая такая выводов на 40. Нашел так же датчики Холла, они были под металлическим диском, который тебе не удалось открутить. Обмоток там 9 было, запустить не пробовал, зато запускал почти такой же но от дисковода 3,5 дюйма. Скорости большой не получилось, так как масса шпинделя который пришлось раскручивать оказалось слишком большой. Так сыграло то, что сам двигатель не имеет как такового корпуса, только сердечник, который крепится к плате через металлические шайбы и диск который раскручивается и приводит в в движение магнитный диск в дискете.

например

например 65530, 4, 3000, 500

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

А где логика работы и

А где логика работы и диаграммы для запуска двигателя?

Не все сразу, про сам

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

А с такой схемой, двигатель

А с такой схемой, двигатель входит в синхронность? А то читал, что нужно использовать либо датчик холла, либо снимать эдс, с соседних обмоток.

Я так понял вопрос если

Я так понял вопрос если перефразировать должен звучать так: "Датчики Холла для чего, и почему их нет в данной схеме?"

Датчики Холла ставят для отслеживания момента, когда необходимо подать коммутирующий сигнал для получения максимума приложенной силы, по сути для того, чтобы при разгоне двигателя да и при штатной работе он не остановился из-за повышения нагрузки. Например устройство по данной схеме если разогнать хорошо потом взять сам корпус и покрутить в разные стороны относительно горизонта, то двигатель просто остановится. Так же датчики Холла помогут разогнать двигатель до большего числа оборотов чем без них. Как видно в конце видео происходит срыв генерации и остановка двигателя, если бы были датчики думаю что можно было бы еще на пару тысяч оборотов больше получить.

Что-то все на Си да на Си...

Что-то все на Си да на Си... я тут на Асм перевёл сию прошивку. Должен сказать ,
что выигрыш в половине кода, уже не 470 байт, а 240 ))))

Код программы на .asm


Warning: Duplicate entry '188862' for key 'PRIMARY' query: INSERT INTO accesslog (title, path, url, hostname, uid, sid, timer, timestamp) values('', 'node/220', '', '54.196.24.103', 0, 'be06b4745682035a4ac33b0122137643', 34, 1398065238) in U:\home\78.27.248.7\www\includes\database.mysqli.inc on line 128