1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
STM32無刷電機(jī)EMF過零檢測(cè)程序源碼模板(注釋很詳細(xì))求大神完善
[打印本頁]
作者:
kometlp
時(shí)間:
2018-5-9 15:32
標(biāo)題:
STM32無刷電機(jī)EMF過零檢測(cè)程序源碼模板(注釋很詳細(xì))求大神完善
最近在研究BLDC電機(jī)的控制,四處搜集資料,附件中是基于EMF過零檢測(cè)控制BLDC的程序,目前只有用到的結(jié)構(gòu)體變量定義部分,可以提供些程序框架思路。
帶有詳細(xì)注釋的單片機(jī)源程序框架如下:
if((uwMspVirtualTimer - uwMspVirtualTimerKeep)>msp->uwCmtPRD_OpenPulse)
{
pwm1.CmtnPointer-=1;
if(pwm1.CmtnPointer>0xF0)
{
pwm1.CmtnPointer=5;
}
msp->SampleBemfEn_OpenPulse=TRUE;
msp->ExtenAdcSample=DISABLE;//DETECT BEMF
msp->AvoidCommuteTimer=0;
msp->dutyCycleCmd=OPEN_STARTUP_DUTY;//sysVar.InputAnalogRef;//注意ANA_INPUT_MIN限制
msp->uwSixStepCount++;
uwMspVirtualTimerKeep = uwMspVirtualTimer;
}
//Define the zeroCross structure
typedef struct
{
u16 timer; //過零檢測(cè)用時(shí)間計(jì)數(shù)器,時(shí)基為50us
u8 state; //過零檢測(cè)狀態(tài)
u16 compare; //過零換向延遲30°的時(shí)間
u16 period; //兩個(gè)cntr之間的時(shí)間(60°電角度)
u16 oldPeriod; //記錄上一次的Period
u16 periodARY[6]; //存儲(chǔ)過去6次的period
u8 CmtnPointer; //存儲(chǔ)經(jīng)由zerocross計(jì)算出的cntr,用于向pwm1.cntr賦值
u8 detected**; //過零點(diǎn)檢測(cè)標(biāo)志位,在檢測(cè)到過零點(diǎn)之后被置為TRUE,然后在等待30°換向的過程中被置FALSE(有效時(shí)間很短)
u8 diodeDelayTimer; //用于表示換向去磁階段(由續(xù)流二極管引起)不檢測(cè)反電勢(shì)的時(shí)間
u16 periodAcc; //用于存儲(chǔ)之前6次的period之和,用于計(jì)算period平均值averagePeriod6
u16 averagePeriod6; //等于periodAcc/6,算出平均period的值
u8 phaseAdvance; //超前換向補(bǔ)償,這個(gè)值用于補(bǔ)償因?yàn)V波導(dǎo)致過零點(diǎn)的滯后,以減小延遲30°的時(shí)間,需要根據(jù)實(shí)際的硬件電路進(jìn)行校正
//FIR階數(shù)的一半為FIR引入的群延遲時(shí)間,在換向時(shí)要進(jìn)行補(bǔ)償
u16 neutral; //估算的中性點(diǎn)電壓
u32 CmtnPointerChangeCounter;//記錄兩次換向之間的時(shí)間,如果過大,則認(rèn)為速度為0
u16 Revolutions; //記錄了zerocross的換向次數(shù)
u16 StopTimeProtected; //該值根據(jù)SPEEDMIN計(jì)算出的最大值,以50us(20K的中斷頻率下)為單位的次數(shù)
} ZEROCROSS_OTYP;
typedef ZEROCROSS_OTYP *ZEROCROSS_handle;
typedef struct
{
//Statemachine 內(nèi)部使用變量
u8 GuideState; //當(dāng)前狀態(tài)機(jī)的狀態(tài)
u16 uwStmTimebase; //statemachine 時(shí)基(50us)
u16 uwStartAttemptCount; //記錄接收到啟動(dòng)命令之后,進(jìn)入OFF_STATE的次數(shù)
u16 uwBemfThreshold; //啟動(dòng)過程中,反電勢(shì)過零比較時(shí)使用的閾值電壓,默認(rèn)為100mv
u16 uwThreeComuThrehold; //三步換向時(shí),換向點(diǎn)的電平值
u16 uwBemf; //啟動(dòng)過程中,記錄不通電那一相的端電壓
u32 uwAlignTime; //轉(zhuǎn)子對(duì)位時(shí)間,默認(rèn)為1.6s
u8 uwShortCycles; //記錄剎車次數(shù)(一個(gè)OFF_STATE到另外一個(gè)OFF_STATE之間)
u16 uwSixStepCount; //開環(huán)脈沖換向計(jì)數(shù)器,記錄了開環(huán)階段的換向次數(shù),等于START_PLUSE_TOTALNUM
u8 CheckType; //在START_PULSE_STATE使用,==1說明是電機(jī)未通電時(shí)轉(zhuǎn)速過高跳轉(zhuǎn)過來的,則進(jìn)行過零點(diǎn)周期計(jì)算(類似于FIND_PERIOD),否則就發(fā)送3步換向脈沖
u16 BemfPrdSUM_SixStep;
u16 BemfPrdAVG_SixStep; //記錄3步換向時(shí),兩個(gè)BEMF的間隔值(50us時(shí)基),由BemfPrdSUM_SixStep平均而來
u16 BemfPrdAVG_OpenPulse; //記錄OPEN_PULSE時(shí),兩個(gè)BEMF的間隔值(50us時(shí)基),由BemfPrd_OpenPulse平均而來
u16 MaxDutyForStart; //對(duì)應(yīng)于最大限流值的占空比,用于開環(huán)啟動(dòng)使用
u16 BemfPrd_SixStep; //3步換向時(shí),記錄兩個(gè)BEMF的間隔值(50us時(shí)基)
u16 BemfPrd_OpenPulse; //OPEN_PULSE時(shí),記錄兩個(gè)BEMF的間隔值(50us時(shí)基)
u16 uwCmtPRD_OpenPulse; //OPEN_PULSE時(shí)換向間隔(50us時(shí)基),600=30ms
u8 SampleBemfEn_OpenPulse; //==TRUE時(shí)可以采集過零點(diǎn),每個(gè)cmtnpointer只采集一次
//Statemachine 外部使用變量
u16 dutyCycleCmd; //命令占空比,將在statemachine函數(shù)之后送入ramp模塊
u16 AvoidCommuteTimer; //在OPEN_PULSE階段,每次檢測(cè)BEMF的時(shí)候,要避開二極管續(xù)流的那個(gè)點(diǎn),
//換向后,當(dāng)這個(gè)值大于START_PLUSE_COMMUTATE_TIME時(shí)才開始采樣BEMF
u8 CmtPtrKeep_OpenPulse; //跳轉(zhuǎn)到STOP_1S_STATE之前,保存當(dāng)前的cmtpointer值,在返回RUN_2S_STATE時(shí),恢復(fù)cmtpointer.
u8 CmtPtrKeep_SixStep; //在Three_step階段,保存pwm.cmtpointer的值
u32 Timer2S_trigger; //在OPEN_PULSE階段,運(yùn)行2S,觸發(fā)一次,跳入STOP_1S_STATE
u16 VirtualTimerKeep; //在Three_step階段,用于計(jì)算BemfPeriod
u8 ExtenAdcSample; //在電機(jī)啟動(dòng)的部分中,ENABLE=采樣非關(guān)鍵ADC通道,例如母線電流,外部模擬量,模塊溫度等,序列采樣
// DISABLE=采集反電動(dòng)勢(shì)
}MOTORSTART_OTYP;
復(fù)制代碼
框架思路下載,還只是半成品,很多程序還未寫完:
structure define.zip
(2.39 KB, 下載次數(shù): 215)
2018-5-9 15:32 上傳
點(diǎn)擊文件名下載附件
作者:
lushp88
時(shí)間:
2018-8-12 23:14
兄弟 有源碼嗎? 求源碼!!
作者:
zxgpy
時(shí)間:
2018-8-22 16:21
謝謝分享
作者:
zxgpy
時(shí)間:
2018-8-22 16:21
謝謝分享
作者:
huafeixue8
時(shí)間:
2018-11-4 17:18
感謝樓主
作者:
chenyixian
時(shí)間:
2019-7-23 14:59
對(duì)無傳感控制有好的參考價(jià)值!
作者:
a20084666
時(shí)間:
2019-8-15 21:19
謝謝提供,話說這個(gè)是哪個(gè)上面的程序
作者:
lf642411
時(shí)間:
2019-9-25 09:48
大俠,能提供源碼嗎?
作者:
bowaterbo
時(shí)間:
2020-2-10 22:53
正在學(xué)習(xí),參考一下,謝謝無私分享。
作者:
bowaterbo
時(shí)間:
2020-2-10 23:05
剛剛下載了,看了下,只有定義,沒有程序。如10樓問:話說哪個(gè)程序在哪里?
作者:
鑫1996
時(shí)間:
2020-8-14 16:14
這是個(gè)啥,放了一堆定義,大家一起完善一下吧
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1