| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Управление BLDC на Atmega8 https://radiokot.ru/forum/viewtopic.php?f=61&t=89241 |
Страница 1 из 1 |
| Автор: | PabloVed [ Вс май 05, 2013 21:32:17 ] | ||
| Заголовок сообщения: | Управление BLDC на Atmega8 | ||
Доброго времени суток Пишу в связке 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) {}; } Сам проект+схема в протеусе:
|
|||
| Автор: | YS [ Вс май 05, 2013 22:59:09 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
1. Попробуйте объявить tmp как volatile. 2. Что приходит на PINC? Не может ли быть так, что там стоят и какие-то верхние биты, портящие сравнение? Попробуйте добавить в switch конструкцию default и посмотрите, срабатывает ли (н-р повесьте светодиод). Если срабатывает - непорядок со значением PINC. Перед сравнением целесообразно очищать верхние биты - tmp=PINC & 0x07. |
|
| Автор: | PabloVed [ Пн май 06, 2013 16:36:50 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
Да, вы оказались абсолютно правы - после добавления очистки верхних битов все заработало как надо. Мне осталось только добавить управление с кнопок - и готовый проект я выложу здесь (а ну как кому понадобится, как понадобилось мне?) |
|
| Автор: | YS [ Пн май 06, 2013 20:43:25 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
Цитата: вы оказались абсолютно правы Yeah, я еще раз прокачал скилл телепатии. На будущее - если из порта что-то читается, ни в коем случае нельзя оставлять часть его пинов висящими в воздухе и настроенными на вход - из них может читаться мусор. Надо либо настроить их на выход, либо подтянуть (можно внутренним подтягивающим резистором) к известному потенциалу и учесть это. Вообще, если ножка настроена на вход, нельзя оставлять ее в воздухе - будут наводиться помехи, т.к. сопротивление входа МК очень велико. А из-за возможных частых переключений (или перехода в линейный режим) она еще и повышенный ток потреблять будет. Цитата: готовый проект я выложу здесь Лучше запилите статью. |
|
| Автор: | PabloVed [ Вт май 14, 2013 17:26:01 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
Ха, теперь еще вопрос со сменой направления вращения ротора. Порядок переключения обмоток для вращения по часовой есть и в аппноуте, и даже на форуме лежит. http://www.gaw.ru/im/doc/micros/avr/avr443/avr443_pic2_2.gif А вот порядок вращения против часовой? Нашел только такой, http://electrosales.com/hurst/hurst_brushless_intro.html, но тут меня смущает, что изменяется порядок датчиков Холла и что он не работает (как ни печально). Правильно ли я понимаю, что для смены направления вращения нужно поменять направление тока во всех обмотках? Или это делается по-другому? |
|
| Автор: | clawham [ Вс мар 22, 2015 22:06:06 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
достаточно передефайнить две фазы. или читать вашу табличку состояний задом-наперед. ничего такого. |
|
| Автор: | IvanSG [ Вт окт 31, 2017 07:46:57 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
готовый проект я выложу здесь (а ну как кому понадобится, как понадобилось мне?) Здравствуйте! А можно посмотреть на готовый проект? |
|
| Автор: | Mishany [ Вт окт 31, 2017 17:54:47 ] |
| Заголовок сообщения: | Re: Управление BLDC на Atmega8 |
смотрите |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


