Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Управление BLDC на Atmega8

Вс май 05, 2013 21:32:17

Доброго времени суток
Пишу в связке CodeVisionAVR + Proteus 7 программу для вентильного двигателя (он же BLDC). С датчиками Холла, с прерываниями, с даташитом avr492.
В качестве контроллера выбрал Atmega8.
Суть проблемы:Никак не получается приручить switch (да и порты, судя по всему). Если раскомментировать присваивание PORTD=PINC (и закомментировать switch), то привод вращается. Не так, как хотелось бы, но вращается.
А через свитч - не получается. Привод стоит. Хотелось бы выяснить, в чем проблема и что я сделал не так.
Код:
Спойлер
Код:
#include <mega8.h>
#define UH        PORTD.0
#define UL        PORTD.1
#define VL        PORTD.2
#define WL        PORTD.3
#define VH        PORTD.4
#define WH        PORTD.5
#define START     PINB.2
#define STOP      PINB.0
#define REVERS    PINB.1
#define HALL1     PINC.0
#define HALL2     PINC.1
#define HALL3     PINC.2

//unsigned char tmp=0;
//  char flag=1; 
 
void port_init()
{
//PORTD=0x01;
DDRD=0b11111111;
DDRC=0;
PORTC=0xFF;
DDRB=0;
PORTB=0xFF;
}

void timer_init()
{   
TCCR2=0x01;
TIMSK=0x40;
TCNT2=0x30;
}

void pwm_init()
{   OCR2=0x00;
 // TCCR2=(1<<COM21)|(1<<WGM20)|(1<<WGM21)|(1<<CS20);
};

interrupt [TIM2_OVF] void overflow_timer2 (void)
{
char tmp;
tmp = PINC;
//PORTD = PINC;

switch (tmp)
{
case 0b00000101: PORTD=0b00000101; break;   
case 0b00000001: PORTD=0b00001001; break;
case 0b00000011: PORTD=0b00011000; break;
case 0b00000010: PORTD=0b00010010; break;
case 0b00000110: PORTD=0b00100010; break;
case 0b00000100: PORTD=0b00100001; break;
}

 #asm("sei")
}   


void main()
{

port_init();
timer_init();
pwm_init();
#asm("sei")
while (1)
{};
}


Сам проект+схема в протеусе:
Вложения
BLDC.zip
(66.78 KiB) Скачиваний: 455

Re: Управление BLDC на Atmega8

Вс май 05, 2013 22:59:09

1. Попробуйте объявить tmp как volatile.

2. Что приходит на PINC? Не может ли быть так, что там стоят и какие-то верхние биты, портящие сравнение? Попробуйте добавить в switch конструкцию default и посмотрите, срабатывает ли (н-р повесьте светодиод). Если срабатывает - непорядок со значением PINC.

Перед сравнением целесообразно очищать верхние биты - tmp=PINC & 0x07.

Re: Управление BLDC на Atmega8

Пн май 06, 2013 16:36:50

Да, вы оказались абсолютно правы - после добавления очистки верхних битов все заработало как надо. :))
Мне осталось только добавить управление с кнопок - и готовый проект я выложу здесь (а ну как кому понадобится, как понадобилось мне?)

Re: Управление BLDC на Atmega8

Пн май 06, 2013 20:43:25

вы оказались абсолютно правы


Yeah, я еще раз прокачал скилл телепатии. :)))

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

готовый проект я выложу здесь


Лучше запилите статью.

Re: Управление BLDC на Atmega8

Вт май 14, 2013 17:26:01

Ха, теперь еще вопрос со сменой направления вращения ротора.

Порядок переключения обмоток для вращения по часовой есть и в аппноуте, и даже на форуме лежит.
http://www.gaw.ru/im/doc/micros/avr/avr443/avr443_pic2_2.gif
А вот порядок вращения против часовой? Нашел только такой, http://electrosales.com/hurst/hurst_brushless_intro.html,
но тут меня смущает, что изменяется порядок датчиков Холла и что он не работает (как ни печально).
Правильно ли я понимаю, что для смены направления вращения нужно поменять направление тока во всех обмотках? Или это делается по-другому?

Re: Управление BLDC на Atmega8

Вс мар 22, 2015 22:06:06

достаточно передефайнить две фазы. или читать вашу табличку состояний задом-наперед. ничего такого.

Re: Управление BLDC на Atmega8

Вт окт 31, 2017 07:46:57

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

Здравствуйте! А можно посмотреть на готовый проект?

Re: Управление BLDC на Atmega8

Вт окт 31, 2017 17:54:47

смотрите
Ответить