roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 18:37

Часовой пояс: UTC + 4 часа


Правила форума


В данном разделе каждый может иметь не более одной темы. Тема должна начинаться с логина (ника) робофорума.



Начать новую тему Ответить на тему  [ Сообщений: 1580 ]  На страницу Пред.  1 ... 20, 21, 22, 23, 24, 25, 26 ... 106  След.
Автор Сообщение
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 21 авг 2012, 03:17 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
В общем, покопался и пришёл к следующему выводу - чисто аппартно не получится, им бы пришлось встроить отдельный блок управления, который бы занимался только управлением, а добавить сюда ещё несколько вариантов ШИМ и вообще контроллер не нужен будет :),для этого есть готовые микросхемы.
но он и так очень легко управляется, в том примере что ты дал как то усложнено на мой взгляд.

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 21 авг 2012, 03:33 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Как проще?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 00:29 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
мне больше нравится когда всё, что можно не вычислять постоянно, лежит в массиве, и тупо читаешь из него.
в данном случае всё
всё содержимое BLDCMotorPrepareCommutation
можно свести к (это для chibios)
static uint32_t bldc_state[19]={
тут перечень настроек CCER,CCMR1,CCMR2 для всех шести состояний
}

...
BLDCMotorPrepareCommutation(){
PWMD1.tim->CCER = bldc_state[h_pos];
PWMD1.tim->CCMR1 = bldc_state[h_pos+6];
PWMD1.tim->CCMR2 = bldc_state[h_pos+12];
}
Я сейчас с разными типами pwm разбираюсь, оказывается есть такой pwm при котором направление вращения закодированно внём самом, что приколько работает и для bldc.

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
linvinus писал(а):
Я сейчас с разными типами pwm разбираюсь, оказывается есть такой pwm при котором направление вращения закодированно внём самом, что приколько работает и для bldc.

Блин, ну рассказывай же! Все из тебя тянуть приходится, а приходишь ты раз в три дня!

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 02:00 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Тут есть цикл статей про pwm - "So, Which PWM Technique is Best"
http://e2e.ti.com/group/motor/b/blog/default.aspx

а я сделал по этой схеме
http://e2e.ti.com/group/motor/b/blog/ar ... art-5.aspx
начало про неё тут
http://e2e.ti.com/group/motor/b/blog/ar ... art-4.aspx

честно говоря пока непонятно почему с bldc работает в обе стороны (в моей текущей реализации), пока заметил что в одном из направлений момент слабее чем в другом

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 02:20 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
А свою-то схему нарисуй? А то непонятно как ты сумел экстраполировать логику брушед на брушлесс.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 03:54 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
dccharacter писал(а):
как ты сумел экстраполировать логику брушед на брушлесс.

Вау, не отец, но мужчина :crazy:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 04:18 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Так в каждый момент времени инвертор можно рассматривать как H-мост, только со временем меняются плечи.
локига простая, у нас есть комплементарные пары, и таймер в режиме счёта вверх-вниз.
одна проблема инвертировать нижний сигнал, т.е. если у левого плеча pwd 80%, то у правого должно быть 20%
и это двигается во времени в зависимости от состояния датчиков hall.
Собственно весь код, без инициализации.
extcb_hall вызывается по внешнему прерыванию на порту B
использую TIM1

Код:
/*
    you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
*/
#define HA (TIM_CCER_CC1E)
#define HB (TIM_CCER_CC2E)
#define HC (TIM_CCER_CC3E)
#define LA (TIM_CCER_CC1NE)
#define LB (TIM_CCER_CC2NE)
#define LC (TIM_CCER_CC3NE)

#define PDP1_CCW (HB|LB|LA|HA)
#define PDP2_CCW (HC|LC|LA|HA)
#define PDP3_CCW (HC|LC|LB|HB)
#define PDP4_CCW (HA|LA|LB|HB)
#define PDP5_CCW (HA|LA|LC|HC)
#define PDP6_CCW (HB|LB|LC|HC)

#define CH_A 0x0
#define CH_B 0x1
#define CH_C 0x2

#define PDP1_INVERT_CH (CH_B<<2|CH_A)
#define PDP2_INVERT_CH (CH_C<<2|CH_A)
#define PDP3_INVERT_CH (CH_C<<2|CH_B)
#define PDP4_INVERT_CH (CH_A<<2|CH_B)
#define PDP5_INVERT_CH (CH_A<<2|CH_C)
#define PDP6_INVERT_CH (CH_B<<2|CH_C)

static uint32_t bldc_state[13]={
   0,
   PDP2_CCW,
   PDP4_CCW,
   PDP3_CCW,
   PDP6_CCW,
   PDP1_CCW,
   PDP5_CCW,

   PDP2_INVERT_CH,
   PDP4_INVERT_CH,
   PDP3_INVERT_CH,
   PDP6_INVERT_CH,
   PDP1_INVERT_CH,
   PDP5_INVERT_CH,
}

int bldc_speed;


void extcb_hall(){
   h_pos = (palReadPort(GPIOB) & (7<<12))>>12;
   if(h_pos==0 ||h_pos>6)
      return;

  PWMD1.tim->CCER = bldc_state[h_pos];

  *(&PWMD1.tim->CCR1 + ((bldc_state[h_pos+6]&0x3) * 2)) = PWMD1.tim->ARR - bldc_speed;
  (*(&PWMD1.tim->CCR1 + (((bldc_state[h_pos+6]&0xC)>>2) * 2)))=bldc_speed;
}



Добавлено спустя 5 минут 55 секунд:
если bldc_speed < PWMD1.tim->ARR/2 то вращение в одну сторону , иначе в другую

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 05:28 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
По-моему вот тут ошибка:
#define PDP1_CCW (HB|LB|LA|HA)
#define PDP2_CCW (HC|LC|LA|HA)
#define PDP3_CCW (HC|LC|LB|HB)
#define PDP4_CCW (HA|LA|LB|HB)
#define PDP5_CCW (HA|LA|LC|HC)
#define PDP6_CCW (HB|LB|LC|HC)

В каждый момент времени у тебя должны только два мосфета быть открыты. А ты четыре открываешь. Кажется.

#define PDP1_CCW (HA|LB)
#define PDP2_CCW (HA|LC)
#define PDP3_CCW (HB|LC)
#define PDP4_CCW (HB|LA)
#define PDP5_CCW (HC|LA)
#define PDP6_CCW (HC|LB)

Добавлено спустя 10 минут 12 секунд:
Кстати, в СТМ32 каналы можно _теоретически_ инвертировать сменой режима PWM1<->PWM2. Пишу "теоретически", потому что сейчас ловлю с этим адские глюки!
Или просто полярность поменять. Короче математика эта лишняя вся.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 14:28 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Ошибки нет, в комплементарном режиме открыт только один транзистор в плече. Ещё настроен dead-time на 98ns
PWM1 это режим выравнивания по краю
PWM2 это режим выравнивания по центру, его я и использую.
для того чтобы работало выравнивание по центру нужно чтобы счётчик читал вверх вниз, за это отвечают биты TIM_CR1_CMS_1 | TIM_CR1_CMS_0 в регистре CR1
PWMD1.tim->CR1 = (TIM_CR1_ARPE | TIM_CR1_URS | TIM_CR1_CMS_1 | TIM_CR1_CMS_0 | TIM_CR1_CEN)
посмотри документацию на регистры CR1, CCMR1, CCMR2 таймера TIM1/TIM8

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 14:40 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
linvinus писал(а):
настроен dead-time на 98ns
хотя бы 2000 хорошо.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
linvinus писал(а):
Ошибки нет, в комплементарном режиме открыт только один транзистор в плече. Ещё настроен dead-time на 98ns
PWM1 это режим выравнивания по краю
PWM2 это режим выравнивания по центру, его я и использую.
для того чтобы работало выравнивание по центру нужно чтобы счётчик читал вверх вниз, за это отвечают биты TIM_CR1_CMS_1 | TIM_CR1_CMS_0 в регистре CR1
PWMD1.tim->CR1 = (TIM_CR1_ARPE | TIM_CR1_URS | TIM_CR1_CMS_1 | TIM_CR1_CMS_0 | TIM_CR1_CEN)
посмотри документацию на регистры CR1, CCMR1, CCMR2 таймера TIM1/TIM8

PWM2 - это не режим выравнивания по центру.
Режим выравнивания устанавливается в тайм-бейс регистрах. Есть ап-каунтинг, даун-каунтинг и центрированный.
А ПВМ1 и ПВМ2 - это один и тот же ПВМ, но для ПВМ1 активный уровень, когда TIM_CNT<TIM_CCR, а в ПВМ2 активный уровень когда TIM_CCR < TIM_CNT < TIM_ARR

Объясни, пожалуйста, что такое комплиментарный режим? Я вот по такой схеме делал: http://www.posterus.sk/?p=2589 (рис 5, коммутационные циклы для U-V-W)

Информация к размышлению:
TIM1 control register 1 (TIMx_CR1) (Reference manual RM0041, стр 248)
Bits 6:5 CMS[1:0]: Center-aligned mode selection
00: Edge-aligned mode. The counter counts up or down depending on the direction bit
(DIR).
01: Center-aligned mode 1. The counter counts up and down alternatively. Output compare
interrupt flags of channels configured in output (CCxS=00 in TIMx_CCMRx register) are set
only when the counter is counting down.
10: Center-aligned mode 2. The counter counts up and down alternatively. Output compare
interrupt flags of channels configured in output (CCxS=00 in TIMx_CCMRx register) are set
only when the counter is counting up.
11: Center-aligned mode 3. The counter counts up and down alternatively. Output compare
interrupt flags of channels configured in output (CCxS=00 in TIMx_CCMRx register) are set
both when the counter is counting up or down.
Note: It is not allowed to switch from edge-

TIM1 capture/compare mode register 1 (TIMx_CCMR1) (Reference manual RM0041, стр 258)
Bits 6:4 OC1M: Output Compare 1 mode
These bits define the behavior of the output reference signal OC1REF from which OC1 and
OC1N are derived. OC1REF is active high whereas OC1 and OC1N active level depends on
CC1P and CC1NP bits.
000: Frozen - The comparison between the output compare register TIMx_CCR1 and the
counter TIMx_CNT has no effect on the outputs.(this mode is used to generate a timing
base).
001: Set channel 1 to active level on match. OC1REF signal is forced high when the counter
TIMx_CNT matches the capture/compare register 1 (TIMx_CCR1).
010: Set channel 1 to inactive level on match. OC1REF signal is forced low when the
counter TIMx_CNT matches the capture/compare register 1 (TIMx_CCR1).
011: Toggle - OC1REF toggles when TIMx_CNT=TIMx_CCR1.
100: Force inactive level - OC1REF is forced low.
101: Force active level - OC1REF is forced high.
110: PWM mode 1 - In upcounting, channel 1 is active as long as TIMx_CNT<TIMx_CCR1
else inactive. In downcounting, channel 1 is inactive (OC1REF=‘0’) as long as
TIMx_CNT>TIMx_CCR1 else active (OC1REF=’1’).
111: PWM mode 2 - In upcounting, channel 1 is inactive as long as TIMx_CNT<TIMx_CCR1
else active. In downcounting, channel 1 is active as long as TIMx_CNT>TIMx_CCR1 else
inactive.
Note: 1: These bits

Добавлено спустя 27 минут 37 секунд:
А, вот нашел про комплиментори: http://cache.freescale.com/files/product/doc/AN1916.pdf

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 22 авг 2012, 16:43 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Спасибо что ткнул носом! Смотрел сто раз и не видел. :(
если это то что я думаю то программа должна слегка упроститься.

про комплементарный режим написано в RF
14.3.11 Advanced-control timers (TIM1&TIM8) Complementary outputs and dead-time insertion

моя схема PWM в каждый момент времени один в один соответствует этому http://e2e.ti.com/group/motor/m/files/650512.aspx
эта анимация из статьи http://e2e.ti.com/group/motor/b/blog/ar ... art-5.aspx

Цитата:
хотя бы 2000 хорошо.

я пока не оптимизировал и не просчитывал но 2us это многовато =) у меня транзисторы через драйвер ir4428 управляются
а пока я на 200mA кручу, так что даже К.З. не страшно.

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 23 авг 2012, 00:11 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2011, 12:37
Сообщения: 1672
Откуда: Москва
прог. языки: С
Да PWM2 это то что я как раз искал когда писал шим, но он только инвертирует сигнал но не сдвигает по фазе, ещё нужно сдвинуть по фазе на 180 градусов, я прибил зайцев одним изменением значения CCR1,CCR2,CCR3

Добавлено спустя 23 минуты 42 секунды:
Вот как оно выглядит.
d0,d1 == HA, LA и т.д.
Изображение

_________________
R3 forum87/topic15337.html
R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dccharacter - Излить посильно
СообщениеДобавлено: 23 авг 2012, 00:17 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Сдвинуть по фазе можно как раз центрированным каунтингом - получится то же, что у тебя на картинке, только без свистоплясок с CCR1
Но все это фигня. Вот когда дело дойдет то Torque control, вот тогда будет интересно :-)

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1580 ]  На страницу Пред.  1 ... 20, 21, 22, 23, 24, 25, 26 ... 106  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO