無刷直流電機(jī)(BLDC)的無傳感器控制技術(shù)是現(xiàn)代電機(jī)控制領(lǐng)域的重要技術(shù)方向,通過檢測反電動勢過零點(diǎn)來確定轉(zhuǎn)子位置,實(shí)現(xiàn)無位置傳感器的精確控制。本文將基于HPMicro SDK中的bldc_over_zero示例,詳細(xì)介紹BLDC電機(jī)的無傳感器過零控制技術(shù),包括控制原理、軟件架構(gòu)和實(shí)際應(yīng)用。
1. BLDC無傳感器控制基礎(chǔ)理論
1.1 反電動勢產(chǎn)生機(jī)理與數(shù)學(xué)模型
當(dāng)BLDC電機(jī)轉(zhuǎn)動時(shí),轉(zhuǎn)子永磁體在定子繞組中運(yùn)動,根據(jù)法拉第電磁感應(yīng)定律產(chǎn)生反電動勢。這一現(xiàn)象的物理本質(zhì)是磁通量的時(shí)間變化率:

其中:
- ?m為磁鏈幅值,取決于永磁體強(qiáng)度和繞組匝數(shù)
- ω為轉(zhuǎn)子電角速度
- θ為轉(zhuǎn)子電角度位置
三相反電動勢表達(dá)式:
對于理想的三相BLDC電機(jī),三相反電動勢具有120°相位差:

其中
為反電動勢幅值。
反電動勢常數(shù)的物理意義:
反電動勢常數(shù) Ke與電機(jī)的物理結(jié)構(gòu)密切相關(guān):

其中:
N為每相串聯(lián)導(dǎo)體數(shù)
- Br為永磁體剩磁密度
- l為導(dǎo)體有效長度
- r 為電機(jī)半徑
1.2 過零檢測的物理原理與數(shù)學(xué)推導(dǎo)
懸浮相電壓的構(gòu)成:
在三相BLDC電機(jī)的六步換相控制中,任意時(shí)刻都有一相處于懸浮狀態(tài)(未導(dǎo)通)。該相的端電壓由反電動勢和中性點(diǎn)電壓共同決定:

中性點(diǎn)電壓的計(jì)算:
理論上,三相中性點(diǎn)電壓為:

但在實(shí)際系統(tǒng)中,無法直接測量中性點(diǎn)電壓。HPM MCL庫采用"虛擬中性點(diǎn)"方法,通過導(dǎo)通兩相的電壓均值來估算:

過零點(diǎn)的數(shù)學(xué)條件:
當(dāng)懸浮相反電動勢過零時(shí):

即:

30度延遲的理論依據(jù):
過零點(diǎn)對應(yīng)轉(zhuǎn)子磁極軸線與定子繞組軸線垂直的瞬間,此時(shí)轉(zhuǎn)子位于兩個(gè)換相點(diǎn)的中間位置。為獲得最大轉(zhuǎn)矩,需要在過零點(diǎn)后延遲30°電角度再進(jìn)行換相:

對應(yīng)的時(shí)間延遲為:

其中
為上一次換相間隔時(shí)間。
1.3 六步換相序列的理論基礎(chǔ)
換相序列的磁場原理:
六步換相控制的本質(zhì)是在定子中產(chǎn)生旋轉(zhuǎn)磁場,與轉(zhuǎn)子永磁體相互作用產(chǎn)生轉(zhuǎn)矩。每個(gè)換相步驟對應(yīng)60°電角度的磁場位置:

換相序列與過零檢測的對應(yīng)關(guān)系:

磁通鏈與轉(zhuǎn)矩分析:
在每個(gè)換相區(qū)間內(nèi),轉(zhuǎn)矩可表示為:

其中:
- P 為極對數(shù)
- ?pm 為永磁磁鏈
- Ia為相電流幅值
- θe為轉(zhuǎn)子電角度
- θi 為電流矢量角度
為獲得最大轉(zhuǎn)矩,需要保持θe?θi=90°,這正是 30° 延遲換相的理論依據(jù)。
2. 軟件架構(gòu)分析
2.1 系統(tǒng)架構(gòu)概述

2.2 核心數(shù)據(jù)結(jié)構(gòu)
系統(tǒng)使用hpm_mcl_over_zero_cfg_t結(jié)構(gòu)體封裝過零控制相關(guān)數(shù)據(jù):
typedefstructhpm_mcl_over_zero_cfg{ int32_tadc_u; // U相ADC采樣值 int32_tadc_v; // V相ADC采樣值 int32_tadc_w; // W相ADC采樣值 uint32_tnumber_consecutive_zeros;// 連續(xù)過零次數(shù) uint32_tdelay_degree_30; // 30度延遲值 uint32_tinterval_tick; // 換相間隔時(shí)間 hpm_mcl_dir_tmotor_dir; // 電機(jī)方向 hpm_mcl_over_zero_interval_tnext_interval;// 下一換相區(qū)間 uint8_tpole_num; // 極對數(shù) floatloop_time_in_sec; // 控制周期 hpm_mcl_over_zero_fsm_tfsm; // 狀態(tài)機(jī)}hpm_mcl_over_zero_cfg_t;
2.3 關(guān)鍵參數(shù)配置
電機(jī)物理參數(shù):
sensorless_cfg.pole_num= MOTOR0_POLE_PAIR; // 極對數(shù):2sensorless_cfg.loop_time_in_sec=0.0001; // 控制周期:100μssensorless_cfg.motor_dir= motor_dir; // 電機(jī)方向
pi_para.kp= PI_P_VAL; // 比例系數(shù):124pi_para.ki= PI_I_VAL; // 積分系數(shù):0.15pi_para.integral_max= PI_PWM_OUT_MAX; // 積分限幅pi_para.output_max= PI_PWM_OUT_MAX; // 輸出限幅
速度濾波參數(shù):
speed_para.filter_coef=0.0304; // 濾波系數(shù)(100Hz)speed_para.kp=0.2814; // 速度環(huán)比例系數(shù)speed_para.ki=0.0145; // 速度環(huán)積分系數(shù)
3. 外設(shè)初始化詳解
3.1 ADC外設(shè)初始化
ADC用于采集三相電壓信號,實(shí)現(xiàn)反電動勢檢測:
voidadc_init(void){ adc_config_tcfg; adc_channel_config_tch_cfg; // ADC基本配置 cfg.module= BOARD_BLDC_ADC_MODULE; #ifBOARD_BLDC_ADC_MODULE == ADCX_MODULE_ADC12 cfg.config.adc12.res = adc12_res_12_bits; // 12位分辨率 cfg.config.adc12.conv_mode = adc12_conv_mode_preemption;// 搶占模式 cfg.config.adc12.adc_clk_div =2; // 時(shí)鐘分頻 #else cfg.config.adc16.res = adc16_res_16_bits; // 16位分辨率 cfg.config.adc16.conv_mode = adc16_conv_mode_preemption;// 搶占模式 cfg.config.adc16.adc_clk_div = adc16_clock_divider_4; // 時(shí)鐘分頻 #endif // 初始化三相ADC hpm_adc_init(&cfg);}
ADC觸發(fā)配置:
voidinit_trigger_cfg(uint8_ttrig_ch,boolinten){ adc_pmt_config_tpmt_cfg; pmt_cfg.config.adc12.trig_ch = trig_ch; // 觸發(fā)通道 pmt_cfg.config.adc12.trig_len = BOARD_BLDC_ADC_PHASE_PREEMPT_TRIG_LEN; pmt_cfg.config.adc12.adc_ch[0] = BOARD_BLDC_ADC_PHASE_CH_U;// U相通道 pmt_cfg.config.adc12.adc_ch[1] = BOARD_BLDC_ADC_PHASE_CH_V;// V相通道 pmt_cfg.config.adc12.adc_ch[2] = BOARD_BLDC_ADC_PHASE_CH_W;// W相通道 hpm_adc_set_preempt_config(&pmt_cfg);}
3.2 PWM外設(shè)初始化
PWM負(fù)責(zé)產(chǎn)生六步換相所需的驅(qū)動信號:
PWM模塊初始化:
voidpwm_init(void){ pwm_cmp_config_tcmp_config[3] = {0}; pwm_config_tpwm_config = {0}; // 停止PWM計(jì)數(shù)器 pwm_stop_counter(MOTOR0_BLDCPWM); // 設(shè)置PWM重載值 pwm_set_reload(MOTOR0_BLDCPWM,0, PWM_RELOAD); pwm_set_start_count(MOTOR0_BLDCPWM,0,0); // 配置比較器 cmp_config[0].mode = pwm_cmp_mode_output_compare; cmp_config[0].cmp = PWM_RELOAD >>1; // 50%占空比 cmp_config[0].update_trigger = pwm_shadow_register_update_on_shlk; // PWM輸出配置 pwm_config.enable_output =true; pwm_config.dead_zone_in_half_cycle =0; // 無死區(qū)時(shí)間 pwm_config.invert_output =false; // 配置所有PWM通道 pwm_setup_waveform(MOTOR0_BLDCPWM, BOARD_BLDC_UH_PWM_OUTPIN, &pwm_config, cmp_index, cmp_config,2); // ... 其他五個(gè)通道配置}
關(guān)鍵配置參數(shù)說明:
- PWM頻率:PWM_FREQUENCY = 20000(20kHz)
- 重載值:PWM_RELOAD = (motor_clock_hz/PWM_FREQUENCY) - 1
- 強(qiáng)制輸出模式:初始狀態(tài)下所有PWM輸出強(qiáng)制為0
3.3 定時(shí)器初始化
定時(shí)器用于控制算法的周期執(zhí)行:
voidtimer_init(void){ gptmr_channel_config_t config; // 時(shí)鐘配置 clock_add_to_group(BOARD_BLDC_TMR_CLOCK,0); gptmr_channel_get_default_config(BOARD_BLDC_TMR_1MS, &config); // 定時(shí)器參數(shù)配置 config.reload=SENSORLESS_TMR_RELOAD+1; // 重載值 config.cmp[0] =SENSORLESS_TMR_RELOAD; // 比較值 // 使能中斷 gptmr_enable_irq(BOARD_BLDC_TMR_1MS,GPTMR_CH_CMP_IRQ_MASK(BOARD_BLDC_TMR_CH,BOARD_BLDC_TMR_CMP)); gptmr_channel_config(BOARD_BLDC_TMR_1MS,BOARD_BLDC_TMR_CH, &config,true); intc_m_enable_irq_with_priority(BOARD_BLDC_TMR_IRQ,1);}
定時(shí)器參數(shù)計(jì)算:

4. 軟件結(jié)構(gòu)框架
4.1 狀態(tài)機(jī)設(shè)計(jì)
系統(tǒng)采用狀態(tài)機(jī)管理過零控制流程:

狀態(tài)定義:
typedefenum{ hpm_mcl_over_zero_fsm_init =0, // 初始化狀態(tài) hpm_mcl_over_zero_fsm_location =1, // 定位狀態(tài) hpm_mcl_over_zero_fsm_running =2 // 運(yùn)行狀態(tài)}hpm_mcl_over_zero_fsm_t;
4.2 初始化流程
步驟1:硬件初始化
board_init(); // 板級初始化motor_clock_hz =clock_get_frequency(BOARD_BLDC_QEI_CLOCK_SOURCE);init_pwm_pins(MOTOR0_BLDCPWM); // PWM引腳初始化init_motor_over_zero_sensorless_adc_pins();// ADC引腳初始化
步驟2:外設(shè)初始化
pwm_init(); // PWM初始化adc_init(); // ADC初始化timer_init(); // 定時(shí)器初始化
步驟3:控制參數(shù)初始化
init_over_zero_para(&sensorless_cfg); // 過零控制參數(shù)初始化
4.3 運(yùn)行時(shí)框架
// 主循環(huán):速度變化控制while(1) { motor_run =true; if(isadd) { user_setspeed++; // 加速 }else{ user_setspeed--; // 減速 } board_delay_ms(100);}// 定時(shí)器中斷:控制算法執(zhí)行voidisr_gptmr(void){ step_delay =hpm_mcl_over_zero_step_get(&sensorless_cfg); // 獲取換相步驟 if(motor_run ==true) { speed_para.speed=hpm_mcl_over_zero_cal_speed(&sensorless_cfg);// 計(jì)算速度 current_speed =hpm_mcl_over_zero_speed_filter(&speed_para); // 速度濾波 pi_para.target= user_setspeed; // 設(shè)置目標(biāo)速度 pi_para.cur= current_speed; // 當(dāng)前速度 hpm_mcl_over_zero_pi_contrl(&pi_para); // PI控制 block_pwm_out =pival_to_pwmoutput(pi_para.outval); // 轉(zhuǎn)換為PWM輸出 bldc_block_motor0_duty_set(block_pwm_out); // 設(shè)置PWM占空比 hpm_mcl_over_zero_pwm_ctrl(BLDC_MOTOR0_INDEX, step_delay); // PWM控制輸出 }}
5. HPM MCL過零檢測算法深度分析
5.1 HPM MCL過零檢測的核心實(shí)現(xiàn)
虛擬中性點(diǎn)計(jì)算方法:
HPM MCL庫采用創(chuàng)新的虛擬中性點(diǎn)方法,簡化了過零檢測的復(fù)雜度:
// 核心檢測函數(shù)中的關(guān)鍵代碼int8_thpm_mcl_over_zero_step_get(hpm_mcl_over_zero_cfg_t*cfg){ int32_tadc_over_zero_u, adc_over_zero_v, adc_over_zero_w; // 計(jì)算三相虛擬中性點(diǎn)電壓 adc_over_zero_u = (cfg->adc_w + cfg->adc_v) >>1; // U相過零檢測用 adc_over_zero_v = (cfg->adc_w + cfg->adc_u) >>1; // V相過零檢測用 adc_over_zero_w = (cfg->adc_u + cfg->adc_v) >>1; // W相過零檢測用}
檢測原理解析:
- 當(dāng)檢測U相過零時(shí),U相懸浮,用V相和W相電壓的均值作為中性點(diǎn)
- 比較:
的符號變化 - 過零條件:該值從正變負(fù)或從負(fù)變正
5.2 三狀態(tài)機(jī)的深度實(shí)現(xiàn)分析
5.2.1 初始化狀態(tài)(hpm_mcl_over_zero_fsm_init)
casehpm_mcl_over_zero_fsm_init: cfg->last_interval = hpm_mcl_interval_init; cfg->delay_degree_30 =0; cfg->number_consecutive_zeros_w =0; cfg->adc_zero_ph =0; // 過零檢測階段標(biāo)志 cfg->last_interval_tick =0; cfg->number_consecutive_zeros =0; cfg->interval_tick =0; cfg->speed_tick =0; cfg->interval = hpm_mcl_interval_init; cfg->fsm = hpm_mcl_over_zero_fsm_location; // 轉(zhuǎn)入定位狀態(tài) break;
初始化的關(guān)鍵參數(shù):
- adc_zero_ph:過零檢測階段標(biāo)志,用于多階段驗(yàn)證
- number_consecutive_zeros:連續(xù)過零檢測計(jì)數(shù)器
- delay_degree_30:30度延遲計(jì)數(shù)器
5.2.2 定位狀態(tài)(hpm_mcl_over_zero_fsm_location)
定位階段采用三階段驗(yàn)證機(jī)制,確保初始轉(zhuǎn)子位置檢測的可靠性:
case hpm_mcl_over_zero_fsm_location: adc_over_zero_w = (cfg->adc_u + cfg->adc_v) >>1; // 計(jì)算W相虛擬中性點(diǎn) if(cfg->adc_zero_ph ==0) { // 第一階段:等待W相反電動勢從負(fù)變正 if(adc_over_zero_w - cfg->adc_w >0) { cfg->number_consecutive_zeros_w++; if(cfg->number_consecutive_zeros_w > HPM_OVER_ZERO_INIT_FILTER_TIMES) { cfg->adc_zero_ph =1; // 進(jìn)入第二階段 cfg->number_consecutive_zeros_w =0; } }else{ cfg->number_consecutive_zeros_w =0; return-1; // 繼續(xù)等待 } }elseif(cfg->adc_zero_ph ==1) { // 第二階段:再次檢測過零,確保穩(wěn)定 if(adc_over_zero_w - cfg->adc_w >0) { cfg->number_consecutive_zeros_w++; if(cfg->number_consecutive_zeros_w > HPM_OVER_ZERO_INIT_FILTER_TIMES) { cfg->adc_zero_ph =2; // 進(jìn)入第三階段 } }else{ cfg->number_consecutive_zeros_w =0; return-1; } }elseif(cfg->adc_zero_ph ==2) { // 第三階段:定位完成,設(shè)置初始換相區(qū)間 cfg->last_interval = hpm_mcl_interval_w_down; cfg->interval = cfg->last_interval; cfg->next_interval = hpm_mcl_interval_w_down; // 根據(jù)電機(jī)方向設(shè)置下一個(gè)換相區(qū)間 if(cfg->motor_dir == hpm_motor_dir_forward) { cfg->next_interval = (cfg->interval %6) +1; }else{ cfg->next_interval -=1; if(cfg->next_interval ==0) { cfg->next_interval = hpm_mcl_interval_u_up; } } cfg->fsm = hpm_mcl_over_zero_fsm_running; // 轉(zhuǎn)入運(yùn)行狀態(tài) } break;
定位算法的關(guān)鍵特點(diǎn):
- 連續(xù)性驗(yàn)證:HPM_OVER_ZERO_INIT_FILTER_TIMES = 15,需連續(xù)15次檢測到相同結(jié)果
- 二次確認(rèn)機(jī)制:確保轉(zhuǎn)子位置檢測的準(zhǔn)確性
- 方向適應(yīng):根據(jù)電機(jī)方向設(shè)置不同的換相序列
5.2.3 運(yùn)行狀態(tài)(hpm_mcl_over_zero_fsm_running)
運(yùn)行狀態(tài)是核心算法,實(shí)現(xiàn)六步換相的過零檢測:
casehpm_mcl_over_zero_fsm_running: cfg->interval_tick++; // 換相間隔計(jì)時(shí) cfg->delay_degree_30++; // 30度延遲計(jì)時(shí) // 計(jì)算三相虛擬中性點(diǎn) adc_over_zero_u = (cfg->adc_w + cfg->adc_v) >>1; adc_over_zero_v = (cfg->adc_w + cfg->adc_u) >>1; adc_over_zero_w = (cfg->adc_u + cfg->adc_v) >>1; // 根據(jù)當(dāng)前區(qū)間和電機(jī)方向進(jìn)行過零檢測 switch(HPM_OVER_ZERO_INDEX_GET(cfg->next_interval, cfg->motor_dir)) { caseHPM_OVER_ZERO_INDEX_GET(hpm_mcl_interval_w_down, hpm_motor_dir_forward): if (adc_over_zero_w - cfg->adc_w >0) { // W相從負(fù)過零到正 cfg->number_consecutive_zeros++; }else{ cfg->number_consecutive_zeros =0; } break; caseHPM_OVER_ZERO_INDEX_GET(hpm_mcl_interval_w_up, hpm_motor_dir_forward): if (adc_over_zero_w - cfg->adc_w 0) { ?// W相從正過零到負(fù)? ? ? ? ? ? ? ? cfg->number_consecutive_zeros++; }else{ cfg->number_consecutive_zeros =0; } break; // ... 其他五個(gè)區(qū)間的檢測邏輯 } // 過零檢測成功處理 if(cfg->number_consecutive_zeros >= HPM_OVER_ZERO_FILTER_TIMES) { cfg->number_consecutive_zeros =0; cfg->last_interval_tick = cfg->interval_tick; // 保存上次換相間隔 cfg->interval_tick =0; // 重置計(jì)數(shù)器 cfg->delay_degree_30 = HPM_OVER_ZERO_FILTER_TIMES; // 設(shè)置30度延遲 // 計(jì)算下一個(gè)換相區(qū)間 if(cfg->motor_dir == hpm_motor_dir_forward) { cfg->next_interval = (cfg->interval %6) +1; }else{ cfg->next_interval -=1; if(cfg->next_interval ==0) { cfg->next_interval = hpm_mcl_interval_u_up; } } } // 30度延遲判斷和換相執(zhí)行 if(cfg->delay_degree_30 > (cfg->last_interval_tick >>1)) { cfg->speed_tick = cfg->last_interval_tick; // 保存速度計(jì)算用數(shù)據(jù) cfg->interval = cfg->next_interval; // 執(zhí)行換相 } break;
運(yùn)行狀態(tài)的關(guān)鍵算法:
1. 雙重計(jì)時(shí)器機(jī)制:
- interval_tick:換相間隔計(jì)時(shí)器
- delay_degree_30:30度延遲計(jì)時(shí)器
2. 過零檢測的數(shù)學(xué)條件:
ParseError: KaTeX parse error: Expected & or \\ or \cr or \end at end of input: …erval\_tick}{2}
5.3 HPM MCL的高精度速度計(jì)算算法
理論基礎(chǔ)與數(shù)學(xué)推導(dǎo):
基于換相間隔時(shí)間計(jì)算電機(jī)轉(zhuǎn)速的數(shù)學(xué)模型:
轉(zhuǎn)換為每分鐘轉(zhuǎn)數(shù)(rpm):
轉(zhuǎn)換為每秒轉(zhuǎn)數(shù)(rps):
HPM MCL庫的實(shí)際實(shí)現(xiàn):
floathpm_mcl_over_zero_cal_speed(hpm_mcl_over_zero_cfg_t*cfg){ // 原始實(shí)現(xiàn):基于換相間隔計(jì)算轉(zhuǎn)速 return((float)((60.0f/ cfg->pole_num) /360.0f))/(cfg->loop_time_in_sec * (cfg->speed_tick +1));}
算法分析與優(yōu)化:
單位統(tǒng)一化:

其中:
- :將每分鐘轉(zhuǎn)數(shù)轉(zhuǎn)換為每秒轉(zhuǎn)數(shù)
- :采樣周期(秒)
- :換相間隔的采樣次數(shù)
精度優(yōu)化技巧:
- 使用speed_tick + 1避免除零錯(cuò)誤
- 通過last_interval_tick保存上次有效測量值
- 采用浮點(diǎn)運(yùn)算提高計(jì)算精度
速度計(jì)算的時(shí)序分析:
這種設(shè)計(jì)確保了速度計(jì)算的實(shí)時(shí)性和準(zhǔn)確性。
5.4 HPM MCL的高級PI控制算法
雙環(huán)PI控制系統(tǒng)架構(gòu):
HPM MCL實(shí)現(xiàn)了雙層PI控制系統(tǒng):外環(huán)PI控制器 + 內(nèi)環(huán)PWM輸出控制。
外環(huán):速度PI控制器:
floathpm_mcl_over_zero_speed_filter(hpm_mcl_over_zero_spd_para_t*par){ floatportion_asp =0; floatportion_asi =0; // 低通濾波器預(yù)處理 par->err = par->speed - par->speedout; par->err_last = par->filter_coef * par->err + (1- par->filter_coef) * par->err_last; // PI控制計(jì)算 portion_asp = par->kp * par->err_last; // 比例項(xiàng) portion_asi = par->ki * par->err_last; // 積分項(xiàng) portion_asi += par->mem; // 積分累加 // 積分限幅 if(portion_asi > par->integral_max) { portion_asi = par->integral_max; }elseif(portion_asi < par->integral_min) { portion_asi = par->integral_min; } par->mem = portion_asi; // 組合PI輸出 portion_asi += portion_asp; // 輸出限幅 if(portion_asi > par->output_max) { portion_asi = par->output_max; }elseif(portion_asi < par->output_min) { portion_asi = par->output_min; } par->speedout = portion_asi; returnpar->speedout;}
內(nèi)環(huán):PWM占空比PI控制器:
floathpm_mcl_over_zero_pi_contrl(hpm_mcl_over_zero_pi_para_t*par){ floatresult =0; floatcurerr =0; floatportion_asp =0; floatportion_asi =0; curerr = par->target - par->cur; // 計(jì)算誤差 portion_asp = curerr * par->kp; // 比例項(xiàng) portion_asi = curerr * par->ki + par->mem; // 積分項(xiàng) // 積分限幅(防止積分飽和) if(portion_asi < par->integral_min) { portion_asi = par->integral_min; }elseif(portion_asi > par->integral_max) { portion_asi = par->integral_max; } par->mem = portion_asi; // PI輸出組合 result = portion_asi + portion_asp; // 輸出限幅(防止PWM超出范圍) if(result < par->output_min) { result = par->output_min; }elseif(result > par->output_max) { result = par->output_max; } par->outval = result; returnresult;}
PI控制器的高級特性分析:

控制參數(shù)的自適應(yīng)調(diào)優(yōu):
系統(tǒng)在實(shí)際應(yīng)用中采用了經(jīng)驗(yàn)參數(shù):
// 速度環(huán)PI參數(shù)speed_para.kp=0.2814; // 比例系數(shù)speed_para.ki=0.0145; // 積分系數(shù)speed_para.integral_max=1000; // 積分上限speed_para.integral_min= -1000; // 積分下限// PWM環(huán)PI參數(shù)pi_para.kp=PI_P_VAL; // 124pi_para.ki=PI_I_VAL; // 0.15pi_para.integral_max=PI_PWM_OUT_MAX; // PWM最大值pi_para.integral_min= -PI_PWM_OUT_MAX; // PWM最小值
這些參數(shù)通過大量實(shí)驗(yàn)優(yōu)化,可以在大多數(shù)BLDC電機(jī)上直接使用。
5.5 HPM MCL的多級濾波系統(tǒng)
濾波系統(tǒng)的分層設(shè)計(jì):
HPM MCL采用多級濾波架構(gòu),提高系統(tǒng)的抗干擾能力:
- 硬件濾波層:過零檢測的連續(xù)性驗(yàn)證
- 軟件濾波層:數(shù)字低通濾波器
- 控制濾波層:PI控制器的積分作用
連續(xù)性驗(yàn)證濾波器:
這是一種獨(dú)特的數(shù)字濾波方法,通過計(jì)數(shù)器實(shí)現(xiàn):
// 運(yùn)行狀態(tài)下的濾波參數(shù)#defineHPM_OVER_ZERO_FILTER_TIMES 5// 初始化狀態(tài)下的濾波參數(shù)#defineHPM_OVER_ZERO_INIT_FILTER_TIMES 15// 濾注邏輯:只有連續(xù)檢測到相同結(jié)果才認(rèn)為有效if(zero_crossing_detected) { cfg->number_consecutive_zeros++; if(cfg->number_consecutive_zeros >= HPM_OVER_ZERO_FILTER_TIMES) { // 過零檢測有效 trigger_commutation(); }}else{ cfg->number_consecutive_zeros =0; // 重置計(jì)數(shù)器}
傳遞函數(shù)分析:
連續(xù)性驗(yàn)證濾波器的傳遞函數(shù)可表示為:

其中NN為連續(xù)檢測次數(shù)。
數(shù)字低通濾波器:
在速度環(huán)中集成的IIR低通濾波器:

截止頻率計(jì)算:
滾動均值濾波器的截止頻率為:


這接近于設(shè)計(jì)目標(biāo)的100Hz。
濾波器的性能優(yōu)化:
- 相位延遲最小化采用一階IIR結(jié)構(gòu)減少相位延遲
- 計(jì)算復(fù)雜度優(yōu)化避免浮點(diǎn)乘法,使用位移操作
- 參數(shù)自適應(yīng)根據(jù)轉(zhuǎn)速動態(tài)調(diào)整濾波參數(shù)
濾波器的實(shí)際效果:
- 噪聲抑制有效抑制ADC采樣噪聲和電磁干擾
- 過零檢測穩(wěn)定性防止誤判斷導(dǎo)致的換相錯(cuò)誤
- 速度控制穩(wěn)定性平滑速度反饋信號,減少控制震蕩
5.6 HPM MCL六步換相序列的深度實(shí)現(xiàn)
換相序列與過零檢測的對應(yīng)關(guān)系:
HPM MCL庫的六步換相序列實(shí)現(xiàn)了精確的PWM控制邏輯:

HPM MCL的PWM控制函數(shù)實(shí)現(xiàn):
voidhpm_mcl_over_zero_pwm_ctrl(uint8_tmotorindex,uint8_tstep){ switch(step) { case2: // UH+WL:U相上橋?qū)ǎ琖相下橋?qū)ǎ琕相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UL); // U相下橋關(guān)閉 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VH); // V相上橋關(guān)閉 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VL); // V相下橋關(guān)閉 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WH); // W相上橋關(guān)閉 hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_UH); // U相上橋?qū)? hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_WL); // W相下橋?qū)? break; case1: // UH+VL:U相上橋?qū)ǎ琕相下橋?qū)ǎ琖相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_VL); break; case6: // VL+WH:V相下橋?qū)ǎ琖相上橋?qū)ǎ琔相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_VL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_WH); break; case5: // UL+WH:U相下橋?qū)ǎ琖相上橋?qū)ǎ琕相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_WH); break; case4: // UL+VH:U相下橋?qū)ǎ琕相上橋?qū)ǎ琖相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_VH); break; case3: // VH+WL:V相上橋?qū)ǎ琖相下橋?qū)ǎ琔相懸浮 hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WH); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_WL); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_VH); break; }}
PWM強(qiáng)制輸出的底層實(shí)現(xiàn):
voidhpm_mcl_bldc_pwm_enable(uint8_tmotor_index,uint8_tpin_name){ motor_index -=1; // 轉(zhuǎn)換為數(shù)組索引 #ifdefined(HPMSOC_HAS_HPMSDK_PWM) pwm_disable_pwm_sw_force_output(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif #ifdefined(HPMSOC_HAS_HPMSDK_PWMV2) pwmv2_disable_software_force(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif}voidhpm_mcl_bldc_pwm_disable(uint8_tmotor_index,uint8_tpin_name){ motor_index -=1; #ifdefined(HPMSOC_HAS_HPMSDK_PWM) pwm_enable_pwm_sw_force_output(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif #ifdefined(HPMSOC_HAS_HPMSDK_PWMV2) pwmv2_enable_software_force(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif}
引腳映射表的實(shí)現(xiàn):
constuint8_tpwm_uvw_conversion_tbl[4][6] = { { BOARD_BLDC_UH_PWM_OUTPIN, // U相上橋引腳 BOARD_BLDC_UL_PWM_OUTPIN, // U相下橋引腳 BOARD_BLDC_VH_PWM_OUTPIN, // V相上橋引腳 BOARD_BLDC_VL_PWM_OUTPIN, // V相下橋引腳 BOARD_BLDC_WH_PWM_OUTPIN, // W相上橋引腳 BOARD_BLDC_WL_PWM_OUTPIN // W相下橋引腳 }};
換相序列的數(shù)學(xué)模型:
每個(gè)換相步驟對應(yīng)的磁場矢量可表示為:

方向控制的實(shí)現(xiàn):
HPM MCL支持雙向運(yùn)行,通過改變換相序列實(shí)現(xiàn):
// 正向運(yùn)行:1→2→3→4→5→6→1...if(cfg->motor_dir == hpm_motor_dir_forward) { cfg->next_interval = (cfg->interval %6) +1;}// 反向運(yùn)行:6→5→4→3→2→1→6...else{ cfg->next_interval -=1; if(cfg->next_interval ==0) { cfg->next_interval = hpm_mcl_interval_u_up; // 6 }}
換相時(shí)序的精確控制:
HPM MCL實(shí)現(xiàn)了精確的換相時(shí)序控制:

這種設(shè)計(jì)確保了換相的實(shí)時(shí)性和準(zhǔn)確性,同時(shí)避免了換相過程中的競態(tài)條件。
5.7 完整的執(zhí)行流程分析
HPM MCL過零控制的完整執(zhí)行流程:

性能特點(diǎn)總結(jié):
- 實(shí)時(shí)性50μs控制周期,確保系統(tǒng)響應(yīng)速度
- 可靠性多級濾波和驗(yàn)證機(jī)制,提高系統(tǒng)穩(wěn)定性
- 適應(yīng)性支持不同電機(jī)參數(shù)和應(yīng)用場景
- 易用性提供完整的API接口和參數(shù)配置
6. 中斷服務(wù)程序
6.1 ADC中斷處理
voidisr_adc(void){ uint32_t status =hpm_adc_get_status_flags(&hpm_adc_u); if((status &BOARD_BLDC_ADC_PHASE_TRIG_FLAG) !=0) { hpm_adc_clear_status_flags(&hpm_adc_u,BOARD_BLDC_ADC_PHASE_TRIG_FLAG); // 獲取三相ADC采樣值 sensorless_cfg.adc_u= ((adc_buff[0][BOARD_BLDC_ADC_PHASE_TRG*4] &0xffff) >>4) &0xfff; sensorless_cfg.adc_v= ((adc_buff[0][BOARD_BLDC_ADC_PHASE_TRG*4+1] &0xffff) >>4) &0xfff; sensorless_cfg.adc_w= ((adc_buff[0][BOARD_BLDC_ADC_PHASE_TRG*4+2] &0xffff) >>4) &0xfff; }}
ADC中斷在每個(gè)PWM周期觸發(fā)一次,采集三相電壓信號用于過零檢測。
6.2 定時(shí)器中斷處理
voidisr_gptmr(void){ if(gptmr_check_status(BOARD_BLDC_TMR_1MS,GPTMR_CH_CMP_IRQ_MASK(BOARD_BLDC_TMR_CH,BOARD_BLDC_TMR_CMP))) { gptmr_clear_status(BOARD_BLDC_TMR_1MS,GPTMR_CH_CMP_IRQ_MASK(BOARD_BLDC_TMR_CH,BOARD_BLDC_TMR_CMP)); // 獲取換相步驟 step_delay =hpm_mcl_over_zero_step_get(&sensorless_cfg); if(motor_run ==true) { timer_times++; if(timer_times >=TIMER_TIMES_1MS) { timer_times =0; // 速度計(jì)算和控制 speed_para.speed=hpm_mcl_over_zero_cal_speed(&sensorless_cfg); current_speed =hpm_mcl_over_zero_speed_filter(&speed_para); // PI控制 pi_para.target= user_setspeed; pi_para.cur= current_speed; hpm_mcl_over_zero_pi_contrl(&pi_para); // PWM輸出 block_pwm_out =pival_to_pwmoutput(pi_para.outval); bldc_block_motor0_duty_set(block_pwm_out); } } // PWM控制輸出 if(motor_run ==true) { hpm_mcl_over_zero_pwm_ctrl(BLDC_MOTOR0_INDEX, step_delay); } }}
定時(shí)器中斷執(zhí)行核心控制算法,周期為100μs。
7. PWM驅(qū)動實(shí)現(xiàn)
7.1 六步換相控制
無傳感器控制采用六步換相方式,每60°電角度換相一次:
voidhpm_mcl_over_zero_pwm_ctrl(uint8_tmotorindex,uint8_tstep){ switch(step) { case1:// AH+BL: A相上橋?qū)ǎ珺相下橋?qū)? hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_UH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_UL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_VH); hpm_mcl_bldc_pwm_enable(motorindex, BLDC_PWM_PIN_VL); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WH); hpm_mcl_bldc_pwm_disable(motorindex, BLDC_PWM_PIN_WL); break; case2:// AH+CL: A相上橋?qū)ǎ珻相下橋?qū)? // ... 類似配置 break; // ... 其他步驟 }}
7.2 占空比控制
系統(tǒng)通過調(diào)整PWM占空比實(shí)現(xiàn)速度控制:
voidbldc_block_motor0_duty_set(uint32_tduty){ #ifdefined(HPMSOC_HAS_HPMSDK_PWM) pwm_update_raw_cmp_central_aligned(MOTOR0_BLDCPWM, BOARD_BLDCPWM_CMP_INDEX_0, BOARD_BLDCPWM_CMP_INDEX_1, (PWM_RELOAD - duty) >>1, (PWM_RELOAD + duty) >>1); pwm_issue_shadow_register_lock_event(MOTOR0_BLDCPWM); #endif #ifdefined(HPMSOC_HAS_HPMSDK_PWMV2) pwmv2_shadow_register_unlock(MOTOR0_BLDCPWM); pwmv2_set_shadow_val(MOTOR0_BLDCPWM, (BOARD_BLDCPWM_CMP_INDEX_0 +1), (PWM_RELOAD - duty) >>1,0,false); pwmv2_set_shadow_val(MOTOR0_BLDCPWM, (BOARD_BLDCPWM_CMP_INDEX_1 +1), (PWM_RELOAD + duty) >>1,0,false); pwmv2_shadow_register_lock(MOTOR0_BLDCPWM); #endif}
7.3 PWM強(qiáng)制輸出模式
當(dāng)需要關(guān)閉特定相的輸出時(shí),使用強(qiáng)制輸出模式:
voidhpm_mcl_bldc_pwm_disable(uint8_tmotor_index,uint8_tpin_name){ motor_index -=1; #ifdefined(HPMSOC_HAS_HPMSDK_PWM) pwm_enable_pwm_sw_force_output(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif #ifdefined(HPMSOC_HAS_HPMSDK_PWMV2) pwmv2_enable_software_force(motor_pwm_tbl[motor_index], pwm_uvw_conversion_tbl[motor_index][pin_name]); #endif}
8. 使用指南
8.1 硬件準(zhǔn)備
- MCU開發(fā)板支持HPMicro芯片的開發(fā)板
- BLDC電機(jī)三相無刷直流電機(jī)(推薦雷賽智能BLM57050-1000)
- 功率驅(qū)動三相逆變器模塊,支持相電壓檢測
- 電源24V直流電源
- ADC電路用于采集三相電壓信號
8.2 軟件配置
步驟1:參數(shù)配置
根據(jù)實(shí)際電機(jī)參數(shù)修改以下定義:
#defineMOTOR0_POLE_PAIR (2) // 電機(jī)極對數(shù)#definePWM_FREQUENCY (20000) // PWM頻率20kHz#definePI_P_VAL (124) // PI比例系數(shù)#definePI_I_VAL (0.15) // PI積分系數(shù)
步驟2:編譯下載
使用支持的IDE編譯工程并下載到目標(biāo)板。
步驟3:運(yùn)行測試
系統(tǒng)啟動后會自動進(jìn)行預(yù)定位,然后開始速度測試。
8.3 操作特點(diǎn)
- 預(yù)定位過程:系統(tǒng)啟動時(shí)會進(jìn)行強(qiáng)制換相預(yù)定位,持續(xù)約500ms
- 自動測試:電機(jī)在5-40轉(zhuǎn)/秒范圍內(nèi)自動變速運(yùn)行
- 無傳感器啟動:無需外部位置傳感器,完全基于反電動勢檢測
9. 調(diào)試與優(yōu)化
9.1 常見問題
問題1:電機(jī)無法啟動
- 檢查ADC采集電路是否正常
- 確認(rèn)三相電壓檢測信號連接正確
- 驗(yàn)證PWM輸出波形
問題2:速度不穩(wěn)定
- 調(diào)整PI控制器參數(shù)
- 修改速度濾波器系數(shù)
- 檢查過零檢測閾值
問題3:換相不平滑
- 優(yōu)化30度延遲計(jì)算
- 調(diào)整過零檢測靈敏度
- 檢查PWM驅(qū)動時(shí)序
9.2 參數(shù)調(diào)優(yōu)
PI參數(shù)調(diào)整:

濾波器參數(shù):

9.3 性能優(yōu)化
提高啟動成功率:
- 優(yōu)化預(yù)定位時(shí)間和強(qiáng)度
- 調(diào)整初始換相頻率
- 改善過零檢測算法
提高運(yùn)行穩(wěn)定性:
- 增加反電動勢濾波
- 優(yōu)化換相時(shí)機(jī)預(yù)測
- 實(shí)現(xiàn)自適應(yīng)控制參數(shù)
10. 移植指南
10.1 硬件移植步驟
步驟1:板級定義修改
// ADC相關(guān)定義#defineBOARD_BLDC_ADC_PHASE_U_BASE HPM_ADC0 // U相ADC#defineBOARD_BLDC_ADC_PHASE_V_BASE HPM_ADC1 // V相ADC#defineBOARD_BLDC_ADC_PHASE_W_BASE HPM_ADC2 // W相ADC#defineBOARD_BLDC_ADC_PHASE_CH_U (5U) // U相通道#defineBOARD_BLDC_ADC_PHASE_CH_V (6U) // V相通道#defineBOARD_BLDC_ADC_PHASE_CH_W (7U) // W相通道// PWM相關(guān)定義#defineMOTOR0_BLDCPWM HPM_PWM0 // PWM模塊#defineBOARD_BLDC_UH_PWM_OUTPIN (0U) // U相上橋臂#defineBOARD_BLDC_UL_PWM_OUTPIN (1U) // U相下橋臂// ... 其他引腳定義
步驟2:引腳配置
voidinit_motor_over_zero_sensorless_adc_pins(void){ // 配置ADC輸入引腳 // 設(shè)置引腳復(fù)用功能為ADC // 配置引腳特性(如輸入阻抗等)}
10.2 電機(jī)參數(shù)適配
基本參數(shù)修改:
voidinit_over_zero_para(hpm_mcl_over_zero_cfg_t *cfg){ cfg->pole_num =MOTOR0_POLE_PAIR; // 根據(jù)電機(jī)極對數(shù)修改 cfg->loop_time_in_sec =0.0001; // 控制周期,根據(jù)定時(shí)器頻率 // 速度濾波參數(shù)(根據(jù)電機(jī)特性調(diào)整) speed_para.filter_coef=0.0304; // 濾波系數(shù) speed_para.kp=0.2814; // 速度環(huán)P參數(shù) speed_para.ki=0.0145; // 速度環(huán)I參數(shù) // PI控制器參數(shù)(根據(jù)負(fù)載特性調(diào)整) pi_para.kp=PI_P_VAL; // 比例系數(shù) pi_para.ki=PI_I_VAL; // 積分系數(shù)}
10.3 ADC電路適配
電壓檢測電路要求:
- ADC輸入電壓范圍:0-3.3V
- 相電壓檢測電路:需要電壓分壓和偏置
- 噪聲抑制:添加RC濾波電路
典型檢測電路:

11. 安全注意事項(xiàng)
電氣安全
- 確保功率電路與控制電路隔離
- 實(shí)現(xiàn)過流、過壓保護(hù)
- 正確接地,避免地環(huán)路
啟動安全
- 無傳感器啟動時(shí)電機(jī)可能產(chǎn)生抖動
- 預(yù)定位過程中避免外部干擾
- 設(shè)置合理的啟動電流限制
運(yùn)行安全
- 監(jiān)控ADC采集信號質(zhì)量
- 實(shí)現(xiàn)失步檢測和保護(hù)
- 設(shè)置最大運(yùn)行速度限制
12. 性能對比
12.1 與有傳感器控制對比

12.2 適用場景
適合無傳感器控制的應(yīng)用:
- 成本敏感的應(yīng)用
- 惡劣環(huán)境(傳感器易損壞)
- 高速運(yùn)行為主的應(yīng)用
- 空間受限的應(yīng)用
不適合的應(yīng)用:
- 需要精確位置控制
- 頻繁啟停的應(yīng)用
- 超低速運(yùn)行要求
- 極高可靠性要求
13. 總結(jié)
BLDC無傳感器過零控制技術(shù)通過檢測反電動勢過零點(diǎn)實(shí)現(xiàn)轉(zhuǎn)子位置估計(jì),具有成本低、結(jié)構(gòu)簡單的優(yōu)勢。HPMicro SDK提供的bldc_over_zero示例展示了完整的實(shí)現(xiàn)方案,包括:
- 過零檢測算法:基于ADC采集的相電壓信號
- 換相控制邏輯:六步換相with 30度延遲
- 速度閉環(huán)控制:PI控制器實(shí)現(xiàn)精確調(diào)速
- 濾波和穩(wěn)定性:多級濾波保證系統(tǒng)穩(wěn)定
主要技術(shù)特點(diǎn):
- 無需外部位置傳感器,降低系統(tǒng)成本
- 采用梯形波控制,實(shí)現(xiàn)簡單可靠
- 支持雙向運(yùn)行和寬速度范圍控制
- 提供完整的移植和調(diào)試指南
在實(shí)際應(yīng)用中,開發(fā)者需要根據(jù)具體的電機(jī)參數(shù)和應(yīng)用需求,對控制參數(shù)進(jìn)行優(yōu)化調(diào)整,以獲得最佳的控制性能。通過本文提供的詳細(xì)分析和指導(dǎo),可以快速掌握無傳感器過零控制技術(shù),并成功應(yīng)用到實(shí)際項(xiàng)目中。
-
BLDC
+關(guān)注
關(guān)注
220文章
937瀏覽量
100512 -
無傳感器
+關(guān)注
關(guān)注
0文章
66瀏覽量
13734 -
HPM
+關(guān)注
關(guān)注
2文章
54瀏覽量
8286
發(fā)布評論請先 登錄
開發(fā)知識庫測試添加知識庫
采用56F801X的3相無刷直流電機(jī)無傳感器控制參考設(shè)計(jì)
將無傳感器BLDC電機(jī)控制引入低成本應(yīng)用
無傳感器控制基礎(chǔ)知識和要點(diǎn)
關(guān)于BLDC電機(jī)控制的所有信息:無傳感器無刷直流電機(jī)控制器
基于PSoC4的無傳感器BLDC控制
基于知識庫的智能策略翻譯技術(shù)
無傳感器的BLDC電機(jī)控制
領(lǐng)域知識庫的研究與設(shè)計(jì)
本體知識庫的模塊與保守?cái)U(kuò)充
單片機(jī)C868實(shí)現(xiàn)無傳感器BLDC電機(jī)控制
BLDC電機(jī)的無傳感器梯形控制
HPM知識庫 | BLDC 無傳感器過零控制技術(shù)指南
評論