国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【零基礎玩轉(zhuǎn)BLDC系列】無刷直流電機無位置傳感器三段式啟動法詳細介紹及代碼分享

這篇具有很好參考價值的文章主要介紹了【零基礎玩轉(zhuǎn)BLDC系列】無刷直流電機無位置傳感器三段式啟動法詳細介紹及代碼分享。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

無刷直流電動機基本轉(zhuǎn)動原理等內(nèi)容請參考《基于霍爾傳感器的無刷直流電機控制原理》、《基于反電動勢過零檢測法的無刷直流電機控制原理》與《以GD32F30x為例定時器相關功能詳解》,BLDC基本原理及基礎知識本篇不再贅述。

直流無刷電機由于定子繞組的反電動勢與電機的轉(zhuǎn)速成正比,所以電機在靜止時反電動勢為零或低速時反電動勢很小,此時無法根據(jù)反電動勢信號確定轉(zhuǎn)子磁極的位置。因此,反電動勢法需要采用特殊啟動技術,從靜止開始加速,直至轉(zhuǎn)速足夠大。通過反電勢能檢測到過零時,再切換至直流無刷電機運行狀態(tài)。這個過程稱為“三段式”啟動,主要包括轉(zhuǎn)子預定位、加速和運行狀態(tài)切換三個階段。這樣既可以使電機轉(zhuǎn)向可控,又可以保證電機達到一定轉(zhuǎn)速后再進行切換,保證了啟動的可靠性。

下面對“三段式”啟動技術進行詳細的分析。

1、電機轉(zhuǎn)子預定位

若要保證直流無刷電機能夠正常啟動,首先要確定轉(zhuǎn)子在靜止時的位置。

在小型輕載條件下,對于具有梯形反電勢波形的直流無刷電機來說,一般采用磁制動轉(zhuǎn)子定位方式。系統(tǒng)啟動時,任意給定一組觸發(fā)脈沖,在氣隙中形成一個幅值恒定、方向不變的磁通。只要保證其幅值足夠大,那么這一磁通就能在一定時間內(nèi)將電機轉(zhuǎn)子強行定位在這個方向上。

在應用中,可以在任意一組繞組上通電一定時間,其中預定位的PWM占空比和預定位時間的長短設定值可由具體電機特性和負載決定,在實際應用中調(diào)試而得。通常為了保險起見,會定位兩次相鄰的位置,防止轉(zhuǎn)子剛好處于臨界位置。

在預定位成功后,轉(zhuǎn)子在啟動前可達到預定的位置,為電機啟動做好準備。

void motor_lacation_cfg_1()
{
    //W+   U-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);        
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_ENABLE);
    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);           
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_DISABLE);
}
void motor_lacation_cfg_2()
{
    //U+   V-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);     
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
    //    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);         
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_ENABLE);
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_DISABLE);
}
void motor_lacation_cfg_3()
{
    //W+  V-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);        
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_ENABLE);
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);         
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_DISABLE);
}
void motor_lacation_cfg_4()
{
    //V+ W-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);        
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);    
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);        
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_ENABLE);
}
void motor_lacation_cfg_5()
{
    //V+ U-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);        
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_ENABLE);
    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);          
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_DISABLE);
}
void motor_lacation_cfg_6()
{
    //  U+  W-
    /*  channel0 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_0, TIMER_OC_MODE_PWM0);            
    timer_channel_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCX_ENABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
    /*  channel1 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);             
    timer_channel_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);
    /*  channel2 configuration */
    timer_channel_output_mode_config(TIMER0, TIMER_CH_2, TIMER_OC_MODE_PWM0);                
    timer_channel_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCX_DISABLE);
    timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_ENABLE);
}
void motor_step_stop()
{   
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,  0);   
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_1,  0);
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_2,  0); 
}
void motor_locate()
{
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,  1500);   
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_1,  1500);
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_2,  1500); 
    if(CCW==0){
    motor_lacation_cfg_4();
    timer_enable(TIMER0);
    delay_1ms(60);
    motor_lacation_cfg_6();
    timer_enable(TIMER0);
    delay_1ms(60);
	}
    else{//逆時針
    motor_lacation_cfg_3();
    timer_enable(TIMER0);
    delay_1ms(60);
    motor_lacation_cfg_2();
    timer_enable(TIMER0);
    delay_1ms(60);
	}
	motor_step_stop();
    timer_disable(TIMER0);
}

2、電機的外同步加速

確定了電機轉(zhuǎn)子的初始位置后,由于此時定子繞組中的反電動勢仍為零,所以須人為改變電機的外施電壓和換相信號,使電機由靜止逐步加速運動。這一過程稱為外同步加速。對于不同的外施電壓調(diào)整方法和換相信號調(diào)整方法,外同步加速可劃分為三類:

①換相信號頻率不變,逐步增大外施電壓使電機加速,稱為恒頻升壓法。

②保持外施電壓不變,逐漸增高換相信號的頻率,使電機逐步加速,稱為恒壓升頻法。

③在逐步增大外施電壓的同時,增高換相的頻率,稱為升頻升壓法。

各個方法都有其優(yōu)點和缺點。如升頻升壓法是人為地給電機施加一個由低頻到高頻不斷加速的他控同步切換信號,而且電壓也在不斷地增加。通過調(diào)整電機換相頻率,即可調(diào)整電機啟動的速度。調(diào)整方法比較簡單。但是這個過程較難實現(xiàn)。切換信號的頻率的選擇要根據(jù)電機的極對數(shù)和其他參數(shù)來確定。太低,電機無法加速;太高,電機轉(zhuǎn)速達不到,會有噪聲甚至無法啟動,算法比較困難。

無論哪種方法,該過程都是在未檢測到反電動勢信號時進行。因此對于控制系統(tǒng)來說此段電機控制是盲區(qū)。參數(shù)在調(diào)試好的時候,可以快速切換至正常運行狀態(tài);而參數(shù)不理想時,電流可能不穩(wěn)甚至電機會抖動。因此,在應用中,應根據(jù)電機及負載特性設定合理的升速曲線,并在盡可能短的時間內(nèi)完成切換。

void openloop_step_change(uint32_t pwm_duty,uint32_t counter)
{
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,  pwm_duty);
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_1,  pwm_duty);
    timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_2,  pwm_duty);
    if(CCW==0){//順時針
    motor_lacation_cfg_2();
    delay_1us(counter);
    motor_lacation_cfg_3();
    delay_1us(counter);
    motor_lacation_cfg_1();
    delay_1us(counter);
    motor_lacation_cfg_5();
    delay_1us(counter);
    motor_lacation_cfg_4();
    delay_1us(counter);
    motor_lacation_cfg_6();
    delay_1us(counter);}
    else{//逆時針
    motor_lacation_cfg_6();
    delay_1us(counter);
    motor_lacation_cfg_4();
    delay_1us(counter);
    motor_lacation_cfg_5();
    delay_1us(counter);
    motor_lacation_cfg_1();
    delay_1us(counter);
    motor_lacation_cfg_3();
    delay_1us(counter);
    motor_lacation_cfg_2();
    delay_1us(counter);}

}
void motor_openloop()
{
  int i=0;
  timer_enable(TIMER0);
  for(i=0;i<192;i++)
  {
	openloop_step_change(1600,60000-300*i);
  }
  for(i=0;i<800;i++)
  {
    openloop_step_change(1600,2700);
  }

}

3、電機運行狀態(tài)的轉(zhuǎn)換

當電機通過外同步加速到一定的轉(zhuǎn)速,反電勢信號可以準確檢測時,即可由外同步向自同步切換??梢酝ㄟ^試驗觀察反電勢信號能夠被準確檢測的轉(zhuǎn)速。在進行切換有兩種方法:一種是測速模塊可以測出電機的轉(zhuǎn)速,當達到這一轉(zhuǎn)速時即可進行切換;另一種,通過試驗檢測出達到預定切換轉(zhuǎn)速的時間,通過軟件定時器設置切換時間。

這一步是關鍵也是比較難實現(xiàn)的一步。有時軟件或者硬件設計的不合理都可能導致啟動失敗。通常是采用估算的方式來選擇切換速度。

void motor_sensorless_start()
{
    timer_channel_control_shadow_config(TIMER0,ENABLE);    //開始從外同步切入自同步模式,即使用過零點檢測法檢測位置
    timer_enable(TIMER2);
	while(speed_count>1300){}    //自同步模式切入后會有短暫的升速階段,通過判斷速度等待并確認自同步成功切入
    CloseLoop_Start=1;  //閉環(huán)標志位置位,后續(xù)進行閉環(huán)控制
}
int main(void)
{
    systick_config();
    bldc_gpio_config();   //  all  gpio
    PID_init( &Speed_Ctrl, PID_Speed, I_ref_Max, 0.0f);
    PID_init( &I_Ctrl, PID_I, PWM_Duty_Max, 0.0f);
    NVIC_CFG();
    dma_config();
    adc_config();
    TimerIn_config();
    TimerOut_config();
    motor_locate();           //定位
	motor_openloop();         //外同步
    motor_sensorless_start(); //自同步-閉環(huán)
    while (1){
    }
}

通過上面的分析可知,無位置傳感器直流無刷電機控制系統(tǒng)的難點就是加速及切換階段。當電機順利啟動后,就可以對電機進行調(diào)速操作。其中,無位置傳感器直流無刷電機和有位置傳感器直流無刷電機調(diào)速原理一致。但,由于無感三段式啟動過程,轉(zhuǎn)子位置檢測無效。因此,對電機進行的速度PID閉環(huán)控制,須在電機啟動順利完成后進行。文章來源地址http://www.zghlxwxcb.cn/news/detail-403248.html

到了這里,關于【零基礎玩轉(zhuǎn)BLDC系列】無刷直流電機無位置傳感器三段式啟動法詳細介紹及代碼分享的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • STM32實現(xiàn)FOC直流無刷BLDC電機-外圍電路

    STM32實現(xiàn)FOC直流無刷BLDC電機-外圍電路

    永磁同步電機和無刷直流電機(BLCD)具有更高效、運行更安靜、扭矩波動小、響應速度快、更可靠等優(yōu)點,正用于越來越多的應用,替代直流有刷電機。盡管結構不同,但所有三相永磁電機(BLDC、PMSM或PMAC)都是由脈沖寬度調(diào)制(PWM)的三相橋(三個半橋)驅(qū)動,以便采用頻

    2024年01月16日
    瀏覽(39)
  • 【STM32】BLDC驅(qū)動&控制開發(fā)筆記 | 08_無刷直流電機BLDC參數(shù)辨識_極對數(shù),相電阻,相電感,交軸直軸電感,反電動勢常數(shù),磁鏈常數(shù)

    【STM32】BLDC驅(qū)動&控制開發(fā)筆記 | 08_無刷直流電機BLDC參數(shù)辨識_極對數(shù),相電阻,相電感,交軸直軸電感,反電動勢常數(shù),磁鏈常數(shù)

    本文主要想為后續(xù)電機控制的仿真和實驗多測試出一些電氣參數(shù)(以參數(shù)辨識的離線辨識為主)。目前包括:極對數(shù);相電阻;相電感;交軸直軸電感;反電動勢常數(shù);磁鏈常數(shù) 的測量內(nèi)容。 因為筆者水平有限,本文以資源整理為主,有的部分我也主要是看別人的博客學習

    2024年02月06日
    瀏覽(21)
  • 【正點原子】STM32電機應用控制學習筆記——2.直流無刷電機基礎知識

    【正點原子】STM32電機應用控制學習筆記——2.直流無刷電機基礎知識

    沒有電刷,無換向器的電機,也稱為無換向器電機。 主要是定子和轉(zhuǎn)子,而直流有刷電機多的是換向器和電刷。 而直流有刷的定子是N和S的永磁體,而無刷是三個線圈饒阻。 直流有刷是定子是饒阻,無刷的定子是N和S的永磁體。兩者的轉(zhuǎn)子和定子恰好是相反的。也是他們最大

    2024年02月03日
    瀏覽(44)
  • 直流無刷電機

    直流無刷電機

    2024年02月15日
    瀏覽(21)
  • 無刷直流電機最強科普(收藏版)

    無刷直流電機最強科普(收藏版)

    無刷直流電機(BLDC:Brushless Direct Current Motor),也被稱為電子換向電機(ECM或EC電機)或同步直流電機,是一種使用直流電(DC)電源的同步電機。無刷直流電機實質(zhì)上為采用直流電源輸入,并用逆變器變?yōu)槿嘟涣麟娫?,帶位置反饋的永磁同步電機。 電機有各式各樣的種類

    2024年01月16日
    瀏覽(17)
  • 直流無刷電機【一】從零開始上手

    直流無刷電機【一】從零開始上手

    這學期正好學完了兩學期的電機學,加上個人一直對四軸無人機的無刷電機與電調(diào)感興趣,同時也比較喜歡幾個月前看見的foc控制的電機旋鈕那個開源項目,于是自己做了一套無刷電機驅(qū)動板(算是真正的從0開始),淘寶買了個十幾塊的不知名云臺無刷電機就開始瞎折騰了。

    2024年02月02日
    瀏覽(21)
  • 直流無刷電機驅(qū)動的PWM頻率

    針對ESCON伺服驅(qū)動器: https://support.maxongroup.com/hc/en-us/articles/360020442720-ESCON-PWM-input-frequency-PWM-output-frequency- Impact of the PWM input frequency? Please be aware that the PWM input frequency in use also determines how fast updated set values can be identified and processed because one period has to measured before the PWM duty cy

    2023年04月08日
    瀏覽(21)
  • 【電機應用控制】——直流無刷電機&驅(qū)動原理&有感閉環(huán)控制&無感閉環(huán)控制

    【電機應用控制】——直流無刷電機&驅(qū)動原理&有感閉環(huán)控制&無感閉環(huán)控制

    ? 目錄 前言 一、概述 二、驅(qū)動原理 ?編輯 三、(有感)速度閉環(huán)控制 四、無感控制(無位置傳感器) 四、(無感)速度閉環(huán)控制 總結 聲明:學習筆記來自正點原子B站教程,僅供學習交流!! 簡介: ????????直流無刷電機(BLDC)是指無電刷和換向器的電機,又稱無

    2024年02月16日
    瀏覽(24)
  • 無刷直流電機32位MCU解決方案

    電機是指依據(jù)電磁感應定律實現(xiàn)電能轉(zhuǎn)換或傳遞的一種電磁裝置。它的主要作用是產(chǎn)生驅(qū)動轉(zhuǎn)矩,作為用電器或各種機械的動力源。發(fā)電機在電路中用字母G表示。它的主要作用是利用電能轉(zhuǎn)化為機械能。 無刷直流電動機的工作原理:無刷直流電機是永磁式同步電機的一種,

    2024年02月12日
    瀏覽(25)
  • 直流無刷電機及Matlab/Simulink驅(qū)動仿真

    直流無刷電機及Matlab/Simulink驅(qū)動仿真

    系列文章將更新直流無刷電機的工作原理、仿真控制以及應用STM32開發(fā)板與驅(qū)動板完成對直流無刷電機的實際控制。 直流無刷電機(Brushless Direct Current Motor,BLDC)沒有了直流有刷電機的電刷及換向器等結構,線圈繞組不參與旋轉(zhuǎn)而是作為定子,永磁體作為轉(zhuǎn)子,通過控制線圈

    2024年02月05日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包