欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13817|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

STM32無(wú)刷電機(jī)EMF過(guò)零檢測(cè)程序源碼模板(注釋很詳細(xì))求大神完善

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:325955 發(fā)表于 2018-5-9 15:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近在研究BLDC電機(jī)的控制,四處搜集資料,附件中是基于EMF過(guò)零檢測(cè)控制BLDC的程序,目前只有用到的結(jié)構(gòu)體變量定義部分,可以提供些程序框架思路。

帶有詳細(xì)注釋的單片機(jī)源程序框架如下:
  1. if((uwMspVirtualTimer - uwMspVirtualTimerKeep)>msp->uwCmtPRD_OpenPulse)
  2. {
  3.         pwm1.CmtnPointer-=1;
  4.         if(pwm1.CmtnPointer>0xF0)
  5.         {
  6.                 pwm1.CmtnPointer=5;
  7.         }
  8.         msp->SampleBemfEn_OpenPulse=TRUE;
  9.         msp->ExtenAdcSample=DISABLE;//DETECT BEMF
  10.         msp->AvoidCommuteTimer=0;
  11.         msp->dutyCycleCmd=OPEN_STARTUP_DUTY;//sysVar.InputAnalogRef;//注意ANA_INPUT_MIN限制
  12.         msp->uwSixStepCount++;
  13.         uwMspVirtualTimerKeep = uwMspVirtualTimer;
  14. }

  15. //Define the zeroCross structure

  16. typedef struct
  17. {
  18.         u16 timer;                   //過(guò)零檢測(cè)用時(shí)間計(jì)數(shù)器,時(shí)基為50us
  19.         u8  state;                   //過(guò)零檢測(cè)狀態(tài)
  20.         u16 compare;                 //過(guò)零換向延遲30°的時(shí)間
  21.         u16 period;                  //兩個(gè)cntr之間的時(shí)間(60°電角度)
  22.         u16 oldPeriod;               //記錄上一次的Period
  23.         u16 periodARY[6];            //存儲(chǔ)過(guò)去6次的period
  24.         u8  CmtnPointer;             //存儲(chǔ)經(jīng)由zerocross計(jì)算出的cntr,用于向pwm1.cntr賦值
  25.         u8  detected**;             //過(guò)零點(diǎn)檢測(cè)標(biāo)志位,在檢測(cè)到過(guò)零點(diǎn)之后被置為T(mén)RUE,然后在等待30°換向的過(guò)程中被置FALSE(有效時(shí)間很短)
  26.         u8  diodeDelayTimer;         //用于表示換向去磁階段(由續(xù)流二極管引起)不檢測(cè)反電勢(shì)的時(shí)間
  27.         u16 periodAcc;               //用于存儲(chǔ)之前6次的period之和,用于計(jì)算period平均值averagePeriod6
  28.         u16 averagePeriod6;          //等于periodAcc/6,算出平均period的值
  29.         u8  phaseAdvance;            //超前換向補(bǔ)償,這個(gè)值用于補(bǔ)償因?yàn)V波導(dǎo)致過(guò)零點(diǎn)的滯后,以減小延遲30°的時(shí)間,需要根據(jù)實(shí)際的硬件電路進(jìn)行校正
  30.                                  //FIR階數(shù)的一半為FIR引入的群延遲時(shí)間,在換向時(shí)要進(jìn)行補(bǔ)償
  31.         u16 neutral;                 //估算的中性點(diǎn)電壓
  32.         u32 CmtnPointerChangeCounter;//記錄兩次換向之間的時(shí)間,如果過(guò)大,則認(rèn)為速度為0
  33.         u16 Revolutions;             //記錄了zerocross的換向次數(shù)
  34.         u16 StopTimeProtected;       //該值根據(jù)SPEEDMIN計(jì)算出的最大值,以50us(20K的中斷頻率下)為單位的次數(shù)
  35. } ZEROCROSS_OTYP;   

  36. typedef ZEROCROSS_OTYP *ZEROCROSS_handle;

  37. typedef struct
  38. {
  39.         //Statemachine 內(nèi)部使用變量
  40.         u8  GuideState;              //當(dāng)前狀態(tài)機(jī)的狀態(tài)
  41.         u16 uwStmTimebase;           //statemachine 時(shí)基(50us)
  42.         u16 uwStartAttemptCount;     //記錄接收到啟動(dòng)命令之后,進(jìn)入OFF_STATE的次數(shù)
  43.         u16 uwBemfThreshold;         //啟動(dòng)過(guò)程中,反電勢(shì)過(guò)零比較時(shí)使用的閾值電壓,默認(rèn)為100mv
  44.         u16 uwThreeComuThrehold;     //三步換向時(shí),換向點(diǎn)的電平值
  45.         u16 uwBemf;                  //啟動(dòng)過(guò)程中,記錄不通電那一相的端電壓
  46.         u32 uwAlignTime;             //轉(zhuǎn)子對(duì)位時(shí)間,默認(rèn)為1.6s
  47.         u8  uwShortCycles;           //記錄剎車(chē)次數(shù)(一個(gè)OFF_STATE到另外一個(gè)OFF_STATE之間)
  48.         u16 uwSixStepCount;          //開(kāi)環(huán)脈沖換向計(jì)數(shù)器,記錄了開(kāi)環(huán)階段的換向次數(shù),等于START_PLUSE_TOTALNUM
  49.         u8  CheckType;               //在START_PULSE_STATE使用,==1說(shuō)明是電機(jī)未通電時(shí)轉(zhuǎn)速過(guò)高跳轉(zhuǎn)過(guò)來(lái)的,則進(jìn)行過(guò)零點(diǎn)周期計(jì)算(類(lèi)似于FIND_PERIOD),否則就發(fā)送3步換向脈沖
  50.         u16 BemfPrdSUM_SixStep;
  51.         u16 BemfPrdAVG_SixStep;      //記錄3步換向時(shí),兩個(gè)BEMF的間隔值(50us時(shí)基),由BemfPrdSUM_SixStep平均而來(lái)
  52.         u16 BemfPrdAVG_OpenPulse;    //記錄OPEN_PULSE時(shí),兩個(gè)BEMF的間隔值(50us時(shí)基),由BemfPrd_OpenPulse平均而來(lái)
  53.         u16 MaxDutyForStart;         //對(duì)應(yīng)于最大限流值的占空比,用于開(kāi)環(huán)啟動(dòng)使用
  54.         u16 BemfPrd_SixStep;         //3步換向時(shí),記錄兩個(gè)BEMF的間隔值(50us時(shí)基)
  55.         u16 BemfPrd_OpenPulse;       //OPEN_PULSE時(shí),記錄兩個(gè)BEMF的間隔值(50us時(shí)基)
  56.         u16 uwCmtPRD_OpenPulse;      //OPEN_PULSE時(shí)換向間隔(50us時(shí)基),600=30ms
  57.         u8  SampleBemfEn_OpenPulse;  //==TRUE時(shí)可以采集過(guò)零點(diǎn),每個(gè)cmtnpointer只采集一次
  58.         
  59.         //Statemachine 外部使用變量
  60.         u16 dutyCycleCmd;            //命令占空比,將在statemachine函數(shù)之后送入ramp模塊
  61.         u16 AvoidCommuteTimer;       //在OPEN_PULSE階段,每次檢測(cè)BEMF的時(shí)候,要避開(kāi)二極管續(xù)流的那個(gè)點(diǎn),
  62.                                  //換向后,當(dāng)這個(gè)值大于START_PLUSE_COMMUTATE_TIME時(shí)才開(kāi)始采樣BEMF
  63.         u8  CmtPtrKeep_OpenPulse;    //跳轉(zhuǎn)到STOP_1S_STATE之前,保存當(dāng)前的cmtpointer值,在返回RUN_2S_STATE時(shí),恢復(fù)cmtpointer.                                
  64.         u8  CmtPtrKeep_SixStep;      //在Three_step階段,保存pwm.cmtpointer的值
  65.         u32 Timer2S_trigger;         //在OPEN_PULSE階段,運(yùn)行2S,觸發(fā)一次,跳入STOP_1S_STATE
  66.         u16 VirtualTimerKeep;        //在Three_step階段,用于計(jì)算BemfPeriod
  67.         u8  ExtenAdcSample;          //在電機(jī)啟動(dòng)的部分中,ENABLE=采樣非關(guān)鍵ADC通道,例如母線電流,外部模擬量,模塊溫度等,序列采樣
  68.                                  //                    DISABLE=采集反電動(dòng)勢(shì)
  69. }MOTORSTART_OTYP;
復(fù)制代碼

框架思路下載,還只是半成品,很多程序還未寫(xiě)完:
structure define.zip (2.39 KB, 下載次數(shù): 215)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:30271 發(fā)表于 2018-8-12 23:14 | 只看該作者
兄弟 有源碼嗎?     求源碼!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:15104 發(fā)表于 2018-8-22 16:21 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:15104 發(fā)表于 2018-8-22 16:21 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
無(wú)效樓層,該帖已經(jīng)被刪除
6#
無(wú)效樓層,該帖已經(jīng)被刪除
7#
ID:82036 發(fā)表于 2018-11-4 17:18 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

8#
無(wú)效樓層,該帖已經(jīng)被刪除
9#
無(wú)效樓層,該帖已經(jīng)被刪除
10#
ID:474603 發(fā)表于 2019-7-23 14:59 | 只看該作者
對(duì)無(wú)傳感控制有好的參考價(jià)值!
回復(fù)

使用道具 舉報(bào)

11#
ID:96079 發(fā)表于 2019-8-15 21:19 | 只看該作者
謝謝提供,話說(shuō)這個(gè)是哪個(gè)上面的程序
回復(fù)

使用道具 舉報(bào)

12#
無(wú)效樓層,該帖已經(jīng)被刪除
13#
ID:616041 發(fā)表于 2019-9-25 09:48 | 只看該作者
大俠,能提供源碼嗎?
回復(fù)

使用道具 舉報(bào)

14#
無(wú)效樓層,該帖已經(jīng)被刪除
15#
ID:691135 發(fā)表于 2020-2-10 22:53 | 只看該作者
正在學(xué)習(xí),參考一下,謝謝無(wú)私分享。
回復(fù)

使用道具 舉報(bào)

16#
ID:691135 發(fā)表于 2020-2-10 23:05 | 只看該作者
剛剛下載了,看了下,只有定義,沒(méi)有程序。如10樓問(wèn):話說(shuō)哪個(gè)程序在哪里?
回復(fù)

使用道具 舉報(bào)

17#
ID:400030 發(fā)表于 2020-8-14 16:14 | 只看該作者
這是個(gè)啥,放了一堆定義,大家一起完善一下吧
回復(fù)

使用道具 舉報(bào)

18#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表