
но он и так очень легко управляется, в том примере что ты дал как то усложнено на мой взгляд.
linvinus писал(а):Я сейчас с разными типами pwm разбираюсь, оказывается есть такой pwm при котором направление вращения закодированно внём самом, что приколько работает и для bldc.
dccharacter писал(а):как ты сумел экстраполировать логику брушед на брушлесс.
/*
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;
}
хотя бы 2000 хорошо.linvinus писал(а): настроен dead-time на 98ns
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
хотя бы 2000 хорошо.
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 0