Страница 4 из 5

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вс апр 14, 2013 12:44:43
sa-ta
Krot писал(а):
Это финальная версия, или где-то кто-то доработал?
ну это, то , что есть.

я выкладывал п. платки реально работающих контроллеров.
появилось еще мнение, что имеет смысл уменьшить частоту внутреннего генератора меги до 4МГц.

первоисточником инфы для меня была линка - http://cncmasterkit.ru/viewtopic.php?f=8&t=785

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вс апр 14, 2013 14:16:23
Krot
Просто хочу заказать человеку на форуме плату, с возможностью заказывать остальным.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вс апр 14, 2013 17:38:28
sa-ta
Krot писал(а):Просто хочу заказать человеку на форуме плату, с возможностью заказывать остальным.
я конечно понимаю, что лень родилась раньше вас...но, все же http://www.radiokot.ru/forum/viewtopic. ... 3#p1626143

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Пн апр 15, 2013 12:52:26
Krot
Вот я дурень, незаметил вторую страничку спринт лаута, спасибо что носом ткнули.
Всегда на мелочах горю :oops: .

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Пн мар 02, 2015 21:43:17
yron
Всем привет, я вот пытаюсь переделать вот этот исходник
Спойлер

Код: Выделить всё

#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/twi.h>

//Motoradresse
#define MOTOR_ADR 0x70

//PHASE1 (U)
#define UH_DDR   DDRB |= (1<<3);
#define UH_ON   TCCR2A |= (1<<COM2A1);
#define UH_OFF   TCCR2A &= ~(1<<COM2A1);

//PHASE1 (U)
#define UL_DDR   DDRB |= (1<<1);
#define UL_ON   PORTB |= (1<<1);
#define UL_OFF   PORTB &= ~(1<<1);


//PHASE2 (V)
#define VH_DDR   DDRD |= (1<<5);
#define VH_ON   TCCR0A |= (1<<COM0B1);
#define VH_OFF   TCCR0A &= ~(1<<COM0B1);

//PHASE2 (V)
#define VL_DDR   DDRB |= (1<<2);
#define VL_ON   PORTB |= (1<<2);
#define VL_OFF   PORTB &= ~(1<<2);


//PHASE3 (W)
#define WH_DDR   DDRD |= (1<<3);
#define WH_ON   TCCR2A |= (1<<COM2B1);
#define WH_OFF   TCCR2A &= ~(1<<COM2B1);

//PHASE3 (W)
#define WL_DDR   DDRC |= (1<<3);
#define WL_ON   PORTC |= (1<<3);
#define WL_OFF   PORTC &= ~(1<<3);


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

#define SENSE_U      ADMUX = 0;
#define SENSE_V      ADMUX = 1;
#define SENSE_W      ADMUX = 2;

#define SENSE_H      (ACSR&(1<<ACO))

#define START_PWM   5

volatile unsigned long i2c_timeout = 0;
volatile unsigned char rx_pwm = 0;
volatile unsigned char rotor_state = 0;
volatile unsigned char rotor_run = 0;

//############################################################################
void next_commutate_state (unsigned char startup)
//############################################################################
{
   switch (rotor_state)
   {
      case (0):
         if(!SENSE_H || startup)
         {
            WH_OFF;
            UH_ON;
            SENSE_W;
            rotor_state = 1;
            TCNT1 = 1;
         }
         break;

      case (1):
         if(SENSE_H || startup)
         {
            VL_OFF;
            WL_ON;
            SENSE_V;
            rotor_state = 2;
            TCNT1 = 1;
         }
         break;

      case (2):
         if(!SENSE_H || startup)
         {
            UH_OFF;
            VH_ON;
            SENSE_U;
            rotor_state = 3;
            TCNT1 = 1;
         }
         break;
   
      case (3):
         if(SENSE_H || startup)
         {
            WL_OFF;
            UL_ON;
            SENSE_W;
            rotor_state = 4;
            TCNT1 = 1;
         }
         break;

      case (4):
         if(!SENSE_H || startup)
         {
            VH_OFF;
            WH_ON;
            SENSE_V;
            rotor_state = 5;
            TCNT1 = 1;
         }
         break;

      case (5):
         if(SENSE_H || startup)
         {
            UL_OFF;
            VL_ON;
            SENSE_U;
            rotor_state = 0;
            TCNT1 = 1;
         }
         break;
   }
}

//############################################################################
//back EMF zero crossing detection
ISR (ANALOG_COMP_vect) 
//############################################################################
{
   if(rotor_run == 200) next_commutate_state (0);
   
   rotor_run++;
   if(rotor_run > 200)
   {
      rotor_run = 200;
   }
}

//############################################################################
ISR (TIMER1_OVF_vect)
//############################################################################
{   
   next_commutate_state (1);
   rotor_run = 0;
   OCR2A = START_PWM;
   OCR2B = START_PWM;
   OCR0B = START_PWM;
}

//############################################################################
ISR (TWI_vect)
//############################################################################
{   
   switch (TWSR & 0xF8) //TW_STATUS 
   {  
      //Adresse empfangen
      case TW_SR_SLA_ACK:  
         TWCR |= (1<<TWINT);
         return;
         
      //Daten empfangen
      case TW_SR_DATA_ACK:
         rx_pwm = TWDR;
         TWCR |= (1<<TWINT);
         i2c_timeout = 0;
         return;

      //Bus-Fehler zurьcksetzen 
      case TW_NO_INFO:
         TWCR |=(1<<TWSTO) | (1<<TWINT); 

      //Bus-Fehler zurьcksetzen   
      case TW_BUS_ERROR:
         TWCR |=(1<<TWSTO) | (1<<TWINT); 
   }
   //Reset TW
   TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
}

//############################################################################
//Hauptprogramm
int main (void) 
//############################################################################
{
   //Watchdog on
   WDTCSR = (1<<WDCE) | (1<<WDE);
   
   //Motordriver output
   UH_DDR;
   VH_DDR;
   WH_DDR;
   UL_DDR;
   VL_DDR;
   WL_DDR;
      
   //PWM for UH, VH and WH (>32KHz)
   TCCR0A |= (1<<COM0B1|1<<WGM01|1<<WGM00);
   TCCR0B |= (1<<CS00);
   
   TCCR2A |= (1<<COM2A1|1<<COM2B1|1<<WGM21|1<<WGM20);
   TCCR2B |= (1<<CS20);
   
   //TIMER1 for start commutation or Back EMF lost
   TCCR1B |= (1<<CS11);
   TIMSK1 |= (1<<TOIE1);

   PHASE_ALL_OFF;
   
   //Comperator init for back EMF
   ADCSRB   |= (1<<ACME);
   DIDR1   |= (1<<AIN0D);
   ACSR   |= (1<<ACIE);
      
   //I2C Init
   TWAR = MOTOR_ADR & 0xFE;
    TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE);
   
   //Interrupts enabel
   sei();
   

   while(1)
   {   
      asm("wdr");
      if(rx_pwm > START_PWM)
      {
         ACSR |= (1<<ACIE);
         TIMSK1 |= (1<<TOIE1);
         
         if(rotor_run == 200)
         {
            OCR2A = rx_pwm;
            OCR2B = rx_pwm;
            OCR0B = rx_pwm;
         }
         i2c_timeout++;
         
         if(i2c_timeout>100000)
         {
            rx_pwm = 0;
         }
      }
      else
      {
         PHASE_ALL_OFF;
         ACSR&=~(1<<ACIE);
         TIMSK1 &= ~(1<<TOIE1);
      }
   }
}
под управление оборотами переменником. Кому интересно давайте решим эту проблему , думаю многим это пригодится. Я понял что можно в ISR (ANALOG_COMP_vect) инициализировать АЦП , и нужно где то включить преобразование что бы не мешало работе двигателя и не создавало задержек, кто в программировании силен помогите.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Пн мар 30, 2015 13:57:58
Ankov82
Я прилепил к этому коду энкодер и пользую.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вт апр 28, 2015 21:24:06
Gray64
Монстр вполне работоспособен. Но фьюзы надо ставить на внутренний 4мГц. Тут вот небольшое видео, с самодельным движком. Просто спортивный интерес был.
https://www.youtube.com/watch?v=9a94Ojw_8v4

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вт апр 28, 2015 23:15:16
m.ix
промоснстра есть схема?
И как там регулировка скорости происходит.

Как одвигун вообще из тисков не вылетел :)))

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср апр 29, 2015 06:41:46
Gray64
Схема... Сейчас попробую вставить.
http://img.radiokot.ru/files/6021/medium/mzhdd462k.JPG]Изображение
Да вот тут всё http://www.jetcontrol.de/Bastelstube/Monster.html в игле. Там проц какой-то левый, на самом деле стоит мега 8.
Управление идёт импульсами 50 Гц, длительность меняется в пределах 1-2 мс. Можно собрать сервотестер(в начале темы есть, да и в сети валом) на 555 таймере. Пока обороты не выставлены на минимум схема не включится. Безопасность. Убираем на минимум, мотор пиликает мелодию, всё, можно "газовать" :) .
Забыл: узел формирующий 12 из 5 вольт для IR2101 я не ставил, запитаны прямо от 12 вольт. Это при питании от БП. От аккума, при просадке до 8 вольт 90% что погорит силовая часть.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср апр 29, 2015 06:56:42
m.ix
Gray64 писал(а): Убираем на минимум, мотор пиликает мелодию
Я к сожалению этого не услышу.
Сними видео с этим пиликанием.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср апр 29, 2015 12:51:06
Gray64
Не знаю насколько удачно, одной рукой снимать, другой провода соединять. Вот:
https://youtu.be/-uYIUJ8SPdY
А почему "не услышу"?

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср апр 29, 2015 12:57:26
m.ix
Спойлерслух посажен
акклиматизация армейская сказалась.
сначала в германию потом в сибирь потом домой.
год за годом всё хуже и хуже.
в германии один день помню вообще не слышал
в сибири ухи гнили
Вот по этому то и бедово слышу.

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

Я по рынку не могу ходить без музыки в ушах, хреново когда тишина долбит в ушах.
Апалтеть ну и напиликал :)))

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср июн 03, 2015 01:45:21
eduardo
Здравствуйте. Народ,подскажите,кто знает как правильно организовать алгоритм работы безколлекторного движка от видика. Я тут набросал схемку с программкой(написана по простонародному без всяких ШИМ и обратных связей). Вообще возможна ли работа этого моторчика без датчиков Холла?В схеме использовал светодиоды--это для наглядного изучения прохождения импульсов при замедленной работе программы. В схеме есть ещё переменный резюк(регулировка скорости),но он пока не задействован.С этой прогой движок при включении гудит и при придании валу крутящего момента как-бы входит в резонанс и вращается только медленно очень.Реверс выполняется.Импульсы состряпаны как при динамической индикации семисегментного индикатора. Спасибо...

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср июн 03, 2015 01:55:54
eduardo
Фотки движка.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср июн 03, 2015 17:59:16
sa-ta
Ankov82 писал(а):Я прилепил к этому коду энкодер и пользую.
а есть готовая прошивка, модифицированная схема включения ?

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Ср июн 03, 2015 19:10:07
leonisio
Присоединюсь к вопросу по наличию прошивки с энкодером :)

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вс июн 07, 2015 20:52:55
eduardo
Чтож,походу никто ничего не знает,не подскажет,писем не напишет и вряд-ли позвонит???? Жаль... А я так надеялся.... :cry:

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вт июн 09, 2015 12:30:44
m.ix
Попробуй у них на форуме спросить.
Изображение

Изображение

А то моя фамилия не правильная там стала позавчера за три года.
Именно там я про этот BLDC спрашивал.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вт июн 09, 2015 21:46:29
eduardo
Спасибо за совет.Сегодня сделал регулировку скорости на переменном резисторе,но... Запускается только на самых низких оборотах и при этом надо всё равно пальцем толкать.С увеличением частоты скорость увеличивается примерно до 300-400 об/мин,а дальше срывается.Видимо без Холла никак.Да и движок сам похоже низкооборотистый--24 полюса,по 8 на каждую обмотку.

Re: BLMC Bldc Запуск трёхфазных без колекторных двигателей и

Добавлено: Вт июн 09, 2015 23:34:26
korob
eduardo писал(а):Видимо без Холла никак.
Ну почему же так категорично? BLDC в HDD вполне успешно работают без датчиков холла, используя противо-ЭДС с обмоток. Заводите сигнал с концов обмоток через делители-ограничители на входы АЦП, и отслеживайте противо-ЭДС на каждой из обмоток в момент когда обмотка не задействована.