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

QQ登錄

只需一步,快速開始

搜索
查看: 40948|回復(fù): 70
收起左側(cè)

51 MCU,BLDC有感無感全開源,輕松實(shí)踐直流無刷電機(jī)控制(程序+電路詳解)

  [復(fù)制鏈接]
ID:359276 發(fā)表于 2019-1-24 08:59 | 顯示全部樓層 |閱讀模式
上封帖子介紹了51單片機(jī),JMT18F003PLUS,提供了芯片例程和資料,鏈接如下:

JMT18F003PLUS單片機(jī)芯片手冊(cè),例程等資料下載
http://www.torrancerestoration.com/bbs/dpj-148985-1.html
(出處: 51hei)

這里把這款芯片用于直流無刷電機(jī)控制的demo程序,有感和無感源代碼,一并開源,希望對(duì)學(xué)習(xí)者有幫助。

BLDC demo板是這樣的:

003plus BLDC.jpg



芯片資料,bldc控制板簡(jiǎn)要說明,原理圖,有感和無感的開源軟件等等,請(qǐng)點(diǎn)擊下載:

JMT18F003 PLUS BLDC DEMO 板應(yīng)用筆記
1. 簡(jiǎn)介
本應(yīng)用筆記討論了使用 JMT18F003 PLUS 控制芯片對(duì)無刷直流電機(jī)(Brushless Direct Current Motor,  BLDC)進(jìn)行方波算法的控制。
2.  JMT18F003 PLUS 芯片特點(diǎn)
  8位MCU,兼容 MCS51指令集;
  內(nèi)核運(yùn)行最高頻率 24.576MHz;
  8K字節(jié)Flash、1K字節(jié)外部 RAM、128 字節(jié)內(nèi)部RAM;
  2個(gè)高性能 16位 PWM 模塊,最高運(yùn)行頻率 73.728MHz,其中 PWM0支持3路互補(bǔ)加 1路獨(dú)立PWM, PWM1支持 1路互補(bǔ)PWM;
  1 個(gè) 12 通道的 10 位 ADC、1 個(gè)可編程運(yùn)算放大器(4 組差分輸入) 、1個(gè)模擬比較器(4組可切換) 、3個(gè) Timer、1個(gè)蜂鳴器輸出;
  通信接口:SPI總線、 I2C總線、 UART總線接口;
  支持 JTAG 調(diào)試。

3. 電機(jī)開發(fā)板使用說明
3.1 電機(jī)板如下圖 1 所示,包括以下資源:
  控制芯片:JMT18F003 PLUS芯片;
  24V-DC電源接口:為電機(jī)板提供24V直流電;
  電機(jī)U/V/W 接口:連接電機(jī)的3根控制線;
  電機(jī)霍爾接口:連接電機(jī)霍爾信號(hào)的五根控制線,從左至右依次為: HC、HB、HA、VDD、GND;
  串口:用于程序下載和打印調(diào)試信息;
  滑阻:通過改變滑阻的大小,實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)速的控制;
  采樣電阻:0.05歐;
  排針J5、J6、J7:通過跳線帽選擇電機(jī)運(yùn)行方式為無感或有感;
  按鍵S1、S2:用戶自定義。

3.2 電機(jī)板使用注意點(diǎn)
  由于下載串口的 RX管腳與滑阻管腳復(fù)用,在使用的時(shí)候只能二選一;
  電機(jī)控制方式選擇如圖 2 所示,排針 J5、J6、J7 按圖 2 左邊方式短接則表示選擇的電機(jī)控制方式為無感控制方式,按圖 2右邊方式短接則表示選擇的電機(jī)控制方式為有感控制方式。

JMT18F003 PLUS BLDC DEMO板原理圖如下:
0.jpg

4.1JMT18F003 PLUS主控芯片電路如下圖所示
0.png

4.2 供電模塊電路
電壓為24V供電,經(jīng)過如下電路轉(zhuǎn)為5V 電壓,給芯片供電。
0.png

4.3 PWM MOS 管及驅(qū)動(dòng)電路
0.png

4.4 電機(jī)反電動(dòng)勢(shì)采樣電路
0.png

4.5 電機(jī)霍爾信號(hào)輸入電路

0.png

4.6 電流采樣電路
電機(jī)板默認(rèn)采用內(nèi)部放大電路對(duì)電流進(jìn)行 AD采樣。

0.png

5. 軟件參數(shù)設(shè)置
電機(jī)控制方式選擇 SENSORMODE、極對(duì)數(shù) POLE_PAIRS、轉(zhuǎn)速范圍、電壓保護(hù)
參數(shù)、電流保護(hù)參數(shù)等參數(shù)都位于MotorPara.h文件中。示例如下圖所示。

0.png

電機(jī)控制方式選擇SENSORMODE選擇為0時(shí),表示選擇無感控制電機(jī)的方式,主板需要按圖 2 左邊的排針接法連接;SENSORMODE 選擇為 1 時(shí),表示選擇有感控制電機(jī)的方式,主板需要按圖2右邊的排針接法連接。

注意:
1、除 PWM 外的其他模塊的時(shí)鐘由片內(nèi) 24.576MHz(由片內(nèi) 73.728MHz 高頻振蕩器產(chǎn)生的時(shí)鐘經(jīng)過 3 分頻得到)或外部晶振(最高 24MHz)或片內(nèi)低頻振蕩器產(chǎn)生的32.768KHz 時(shí)鐘提供
2、由于滑阻VSP與RXD共用引腳,故調(diào)速是RXD不可接串口
3、UVW:紅黃黑    HCHBHA:黃白藍(lán)    HUHVHW:CW-326451;CCW-623154

單片機(jī)源程序如下:
  1. #include "main.h"

  2. /*****************************************************************************
  3. 函 數(shù) 名  : main
  4. 功能描述  : 主函數(shù)
  5. 輸入?yún)?shù)  : 無
  6. 輸出參數(shù)  : void
  7. *****************************************************************************/
  8. void main()
  9. {               
  10.         StartParaInit();
  11.         
  12.         WDT_Init();
  13.         Crpm_Init();
  14.         Port_Init();
  15.         UART_Init();
  16.         
  17.         Interrupt_Init();
  18.         
  19.         ADC_Init();

  20.         CMP_Init();
  21.         
  22.         Pss("V0.1", NONE);

  23.         PWM_Init();
  24.         
  25.         #if(SENSORMODE)
  26.         PWM1_Init();
  27.         #else
  28.         Timer0_Init();
  29.         #endif

  30.         while(1)
  31.         {
  32.                 switch(MasterState)
  33.                 {
  34.                         case Startup:
  35.                                 Ps("Start", NONE);
  36.                                        
  37.                                 Fault_InitOverUnderVoltage();        // 電源電壓判斷
  38.                                 
  39.                                 UserSpeedControlInit();        //滑阻判斷

  40.                                 MasterState = Operation;
  41.                                 mcState = mcInit;
  42.                                 break;
  43.                                 
  44.                         case Operation:
  45.                                 MotorControl();
  46.                                 
  47.                                 if(ADCIntProtectCnt >= 5)        // 250us
  48.                                 {                                       
  49.                                         Fault_OverCurrent();
  50.                
  51.                                         Fault_OverUnderVoltage();

  52.                                         UserSpeedControl();
  53.                                 
  54.                                         ADCIntProtectCnt = 0;                                
  55.                                 }
  56.                                 break;
  57.                                 
  58.                         default:
  59.                                 MotorStop();
  60.                                 break;
  61.                 }
  62.         }
  63. }
復(fù)制代碼
  1. #include "common.h"

  2. MasterState_T MasterState;
  3. MotorState_T mcState;

  4. volatile u8 xdata Phase = 0;        // 相位
  5. volatile u8 xdata NextPhase = 0;

  6. volatile u8 xdata MotorRotation = CW;        // 電機(jī)轉(zhuǎn)動(dòng)方向        

  7. volatile u8 xdata TuneDutyRatioCnt = 0;        // 調(diào)整轉(zhuǎn)速占空比的周期計(jì)數(shù)

  8. volatile u16 xdata PWMDutyCycle = 0;        // PWM占空比

  9. volatile u16 xdata CurrentPgaSample = 0;
  10. volatile u16 xdata CurrentSample = 0;        // 電流采樣值
  11. volatile u16 xdata VoltageSample = 0;        // 電壓采樣值
  12. volatile u16 xdata UserSpeedSample = 0;        // 用戶調(diào)速采樣值

  13. volatile u8 xdata ADCIntProtectCnt = 0;        // ADC中斷計(jì)數(shù)保護(hù)
  14. volatile u8 xdata flag_ADCSample = 0;        // AD采樣時(shí)的通道切換標(biāo)志

  15. volatile u8 xdata flag_ErrorException = 0;        // BIT0:Timer2計(jì)數(shù)超時(shí)        BIT1:比較器中斷異常        BIT2:長(zhǎng)短波啟動(dòng)超時(shí)        BIT3:長(zhǎng)短波電流采樣過流        BIT4:ADC采樣換相異常        BIT5:CMP換相異常

  16. volatile u8 xdata LastPhase = 0;
  17. volatile u8 xdata SamePhaseCnt = 0;

  18. // 電轉(zhuǎn)速60度時(shí)間
  19. volatile bit flag_SpeedTime = 0;        
  20. volatile u8 xdata SpeedTimeCnt = 0;        
  21. volatile u16 xdata SpeedTime = 0;
  22. volatile u16 xdata SpeedTimeTemp = 0;
  23. volatile u32 xdata SpeedTimeSum = 0;

  24. volatile u16 xdata MotorSpeed = 0;
  25. volatile u16 xdata UserRequireSpeed = 0;        // 用戶請(qǐng)求轉(zhuǎn)速

  26. volatile u8 xdata RheostatCnt = 0;        // 調(diào)速信號(hào)

  27. // 保護(hù)計(jì)數(shù)
  28. volatile u8 xdata VoltageProCnt = 0;
  29. volatile u8 xdata CurrentPgaProCnt = 0;
  30. volatile u8 xdata CurrentProCnt = 0;

  31. #if(SENSORMODE)
  32. volatile u8 xdata NowHallState = 0;        // HALL當(dāng)前位置
  33. volatile u8 xdata PreHallState = 0;        // 前次HALL位置

  34. volatile bit flag_HallStateRight = 0;

  35. volatile u16 xdata OverflowCnt = 0;        // PWM1捕獲上溢中斷計(jì)數(shù)
  36. #else
  37. volatile u16 xdata NeutralPoint = 0;
  38. volatile u16 xdata UBemf = 0;
  39. volatile u16 xdata VBemf = 0;
  40. volatile u16 xdata WBemf = 0;

  41. volatile u8 xdata BlankingCnt = 0;
  42. volatile u8 xdata CheckZeroCrossState = 0;

  43. volatile u8 xdata Timer0OutCnt = 0;        // 換相超時(shí)

  44. volatile u16 xdata ADCTimeCnt = 0;        // ADC中斷計(jì)數(shù)
  45. volatile u16 xdata DragTime = 0;
  46. #endif

  47. /*****************************************************************************
  48. 函 數(shù) 名  : Common_Init
  49. 功能描述  : 全局變量初始化
  50. 輸入?yún)?shù)  : 無
  51. 輸出參數(shù)  : void
  52. *****************************************************************************/
  53. void Common_Init()
  54. {
  55.         Phase = 0;
  56.         NextPhase = 0;
  57.                
  58.         TuneDutyRatioCnt = 0;
  59.         
  60.         PWMDutyCycle = PWM_DUTYCYCLE_05;

  61.         CurrentPgaSample = 0;
  62.         CurrentSample = 0;        // 電流采樣值
  63.         VoltageSample = 0;        // 電壓采樣值
  64.         UserSpeedSample = 0;

  65.         ADCIntProtectCnt = 0;
  66.         flag_ADCSample = 0;

  67.         flag_ErrorException = 0;
  68.         
  69.         LastPhase = 0;
  70.         SamePhaseCnt = 0;

  71.         flag_SpeedTime = 0;        
  72.         SpeedTimeCnt = 0;        
  73.         SpeedTime = 0;
  74.         SpeedTimeTemp = 0;
  75.         SpeedTimeSum = 0;

  76.         MotorSpeed = 0;
  77.         UserRequireSpeed = 0;        // 用戶請(qǐng)求轉(zhuǎn)速

  78.         RheostatCnt = 0;

  79.         VoltageProCnt = 0;
  80.         CurrentPgaProCnt = 0;
  81.         CurrentProCnt = 0;

  82.         #if(SENSORMODE)
  83.         NowHallState = 0;
  84.         PreHallState = 0;

  85.         flag_HallStateRight = 0;

  86. ……………………

  87. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


0.png


所有資料51hei提供下載:
JMT18F003 BLDC資料.rar (6.03 MB, 下載次數(shù): 1262)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-1-24 18:53 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:359276 發(fā)表于 2019-1-25 08:55 | 顯示全部樓層
admin 發(fā)表于 2019-1-24 18:53
好資料,51黑有你更精彩!!!

謝謝!

希望這些內(nèi)容對(duì)了解BLDC控制和51單片機(jī)愛好者有所幫助。
回復(fù)

使用道具 舉報(bào)

ID:308397 發(fā)表于 2019-2-12 17:55 來自手機(jī) | 顯示全部樓層
加個(gè)qq好友有些問題向你請(qǐng)教一下:1252574935
回復(fù)

使用道具 舉報(bào)

ID:249545 發(fā)表于 2019-2-18 14:55 | 顯示全部樓層
感謝您分亨資料,請(qǐng)問老師如何購買套件呢?
回復(fù)

使用道具 舉報(bào)

ID:149075 發(fā)表于 2019-2-28 19:40 | 顯示全部樓層
這個(gè)芯片在哪有賣,性價(jià)比怎么樣
回復(fù)

使用道具 舉報(bào)

ID:9973 發(fā)表于 2019-3-1 13:04 | 顯示全部樓層
謝謝分享,學(xué)習(xí)。。
回復(fù)

使用道具 舉報(bào)

ID:249416 發(fā)表于 2019-6-15 11:21 | 顯示全部樓層

好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:228022 發(fā)表于 2019-6-28 19:06 | 顯示全部樓層
感謝分享!
回復(fù)

使用道具 舉報(bào)

ID:236168 發(fā)表于 2019-8-1 09:39 | 顯示全部樓層
非常感謝
回復(fù)

使用道具 舉報(bào)

ID:441868 發(fā)表于 2019-8-14 15:36 | 顯示全部樓層
可以借鑒,多謝了
回復(fù)

使用道具 舉報(bào)

ID:229997 發(fā)表于 2019-8-26 08:10 | 顯示全部樓層
好資料
回復(fù)

使用道具 舉報(bào)

ID:602594 發(fā)表于 2019-8-27 10:35 | 顯示全部樓層
好東西,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:403593 發(fā)表于 2019-8-28 08:44 | 顯示全部樓層
感謝樓主分享~
回復(fù)

使用道具 舉報(bào)

ID:385637 發(fā)表于 2019-8-28 10:09 | 顯示全部樓層
好資料,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:583110 發(fā)表于 2019-8-31 14:51 | 顯示全部樓層
學(xué)習(xí)一下,好久沒有登錄了。。。。
回復(fù)

使用道具 舉報(bào)

ID:324611 發(fā)表于 2019-9-18 14:32 | 顯示全部樓層
高手,學(xué)習(xí)了。
回復(fù)

使用道具 舉報(bào)

ID:616268 發(fā)表于 2019-9-25 17:17 | 顯示全部樓層
無感是通過AD采集,計(jì)算過零點(diǎn)嗎?
回復(fù)

使用道具 舉報(bào)

ID:633661 發(fā)表于 2019-11-1 09:03 | 顯示全部樓層
非常有用,謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:336378 發(fā)表于 2019-11-15 09:59 | 顯示全部樓層


非常有用,謝謝樓主 ,正在做這方面產(chǎn)品,
回復(fù)

使用道具 舉報(bào)

ID:347467 發(fā)表于 2019-11-18 15:06 | 顯示全部樓層
謝謝分享。
回復(fù)

使用道具 舉報(bào)

ID:81733 發(fā)表于 2019-11-29 16:30 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報(bào)

ID:607312 發(fā)表于 2019-11-30 09:34 | 顯示全部樓層
感謝了,非常好的資料,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:655203 發(fā)表于 2019-12-3 15:38 | 顯示全部樓層
感謝分享。!
回復(fù)

使用道具 舉報(bào)

ID:280573 發(fā)表于 2019-12-10 15:49 | 顯示全部樓層
很全面了,看了幾天代碼,代碼中檢測(cè) 到過零后直接換相了,反電動(dòng)勢(shì)好像要延遲30電角度換相吧?想請(qǐng)教一下樓主是怎么處理延遲30度電角度的呢?
回復(fù)

使用道具 舉報(bào)

ID:287451 發(fā)表于 2019-12-21 14:43 | 顯示全部樓層
代碼實(shí)際測(cè)試過沒
回復(fù)

使用道具 舉報(bào)

ID:563624 發(fā)表于 2020-2-21 17:21 | 顯示全部樓層
感謝您分亨資料,請(qǐng)問可否購買相關(guān)資料
回復(fù)

使用道具 舉報(bào)

ID:385637 發(fā)表于 2020-3-2 18:16 | 顯示全部樓層
請(qǐng)問這款單機(jī)片能驅(qū)動(dòng)十萬轉(zhuǎn)的無感無刷電機(jī)嗎
回復(fù)

使用道具 舉報(bào)

ID:702233 發(fā)表于 2020-3-4 12:55 | 顯示全部樓層
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:710204 發(fā)表于 2020-3-17 16:11 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:62514 發(fā)表于 2020-4-9 18:40 | 顯示全部樓層
可以參考。謝謝。
回復(fù)

使用道具 舉報(bào)

ID:730173 發(fā)表于 2020-4-23 13:25 | 顯示全部樓層
請(qǐng)問下樓主或是其他熱心網(wǎng)友,這個(gè)代碼Atmel的51單片機(jī)也能通用嗎?
回復(fù)

使用道具 舉報(bào)

ID:763521 發(fā)表于 2020-5-28 16:27 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:302325 發(fā)表于 2020-6-1 01:56 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:214421 發(fā)表于 2020-6-3 10:28 | 顯示全部樓層
很好的資料,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:105698 發(fā)表于 2020-6-5 19:58 | 顯示全部樓層
謝謝分享,學(xué)習(xí)k中。。
回復(fù)

使用道具 舉報(bào)

ID:675863 發(fā)表于 2020-6-12 23:10 | 顯示全部樓層
學(xué)習(xí),最近想做高壓無刷電調(diào)
回復(fù)

使用道具 舉報(bào)

ID:787018 發(fā)表于 2020-6-22 19:32 | 顯示全部樓層
剛剛在了解直流電機(jī)的驅(qū)動(dòng)。好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:791977 發(fā)表于 2020-6-28 16:57 | 顯示全部樓層
無感檢測(cè)和30度的相位差補(bǔ)償這一塊的實(shí)現(xiàn)上,一直有問題。
回復(fù)

使用道具 舉報(bào)

ID:495287 發(fā)表于 2020-7-9 07:43 | 顯示全部樓層
謝謝樓主指導(dǎo),俺又進(jìn)步一點(diǎn)了。
電路齊全一目然,
耐心講解明根源,
差分信號(hào)勤補(bǔ)拙,
有感無感都能轉(zhuǎn)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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