久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10248|回復: 10
收起左側

請問一下,三根線的無刷馬達,都是無霍爾元件的嗎?

  [復制鏈接]
ID:386588 發表于 2018-8-15 16:04 | 顯示全部樓層 |閱讀模式
請問一下,三根線的無刷馬達,都是無霍爾元件的嗎?
回復

使用道具 舉報

ID:384109 發表于 2018-8-15 19:17 | 顯示全部樓層
是的,無刷電機的自身繞線就要出3根,霍爾信號不算霍爾器件的供電也要有3根,再加上霍爾器件供電2根,所以電機出線少于8根的一般都是無霍爾的電機

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:386577 發表于 2018-8-15 16:19 | 顯示全部樓層
是的 ,都是通過檢測反電動勢的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:386647 發表于 2018-8-15 17:45 | 顯示全部樓層
不一定,霍爾元件需帶霍爾信號

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:376009 發表于 2018-8-15 20:31 | 顯示全部樓層
先看說明書,在查查資料,就可以了。
回復

使用道具 舉報

ID:386691 發表于 2018-8-15 21:46 | 顯示全部樓層
三根線無法既滿足馬達工作,也滿足霍爾元件工作,因此是無霍爾元件的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:386699 發表于 2018-8-15 21:58 | 顯示全部樓層
是的,沒有多余的線接霍爾
回復

使用道具 舉報

ID:386381 發表于 2018-8-16 00:07 來自觸屏版 | 顯示全部樓層
不全是,無刷的不見得有用霍爾的
回復

使用道具 舉報

ID:386588 發表于 2018-10-17 18:08 | 顯示全部樓層
那位大神,可以提供一下簡單驅動無刷無霍爾馬達的驅動程序嗎?謝謝
回復

使用道具 舉報

ID:155507 發表于 2018-10-18 06:42 | 顯示全部樓層
本帖最后由 angmall 于 2018-10-18 08:05 編輯

參考程序,請搞懂了后才進行實驗,防止造成不必要的損失!程序屬于STC公司所有!


  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited ----------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* --- Mobile: 13922805190 --------------------------------------------*/
  5. /* --- Fax: 0513-55012956,55012947,55012969 ---------------------------*/
  6. /* --- Tel: 0513-55012928,55012929,55012966 ---------------------------*/
  7. /* --- Web: www.GXWMCU.com   www.stcmcu.com ---------------------------*/
  8. /* --- QQ:  800003751 -------------------------------------------------*/
  9. /* 如果要在程序中使用此代碼,請在程序中注明使用了宏晶科技的資料及程序   */
  10. /*---------------------------------------------------------------------*/


  11. /*************        功能說明        **************

  12. 本程序試驗使用STC15W401AS-35I-SOP16<RMB1.6>來驅動航模用的無傳感器無刷三相直流馬達.

  13. 本程序參考自網上的代碼(作者: 瑞生), 改良而來.

  14. 電路圖見文件 "BLDC-V10-實驗電路.pdf".

  15. 控制信號由P3.2輸入正脈沖信號, 間隔5~20ms, 脈沖寬度1.000~1.610ms.

  16. 1.160ms開始啟動, 1.610ms為最高速度, 分辨率為2us.

  17. 本程序僅僅是簡單控制, 軟件沒有處理 過0延時30度切換 過流檢測.

  18. 由于過0檢測部分有RC濾波, 所以改變電容值可以大約的對應在最高速時延時30度的時間.

  19. 有意者可自行完善電路和程序.

  20. ******************************************/




  21. #define MAIN_Fosc                24000000L        //定義主時鐘

  22. #include "STC15Fxxxx.H"

  23. #define                MCU_PIN                16        /* 選擇MCU引腳數, 只支持16或20腳(28腳或32腳跟20腳一樣) */



  24. //CMPCR1
  25. #define        CMPEN        0x80        //1: 允許比較器, 0: 禁止,關閉比較器電源
  26. #define        CMPIF        0x40        //比較器中斷標志, 包括上升沿或下降沿中斷, 軟件清0
  27. #define        PIE                0x20        //1: 比較結果由0變1, 產生上升沿中斷
  28. #define        NIE                0x10        //1: 比較結果由1變0, 產生下降沿中斷
  29. #define        PIS                0x08        //輸入正極性選擇, 0: 選擇外部P5.5做正輸入,           1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
  30. #define        NIS                0x04        //輸入負極性選擇, 0: 選擇內部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入.
  31. #define        CMPOE        0x02        //1: 允許比較結果輸出到P1.2, 0: 禁止.
  32. #define        CMPRES        0x01        //比較結果, 1: CMP+電平高于CMP-,  0: CMP+電平低于CMP-,  只讀

  33. //CMPCR2
  34. #define        INVCMPO        0x80        //1: 比較器輸出取反,  0: 不取反
  35. #define        DISFLT        0x40        //1: 關閉0.1uF濾波,   0: 允許
  36. #define        LCDTY        0x00        //0~63, 比較結果變化延時周期數

  37. #if        (MCU_PIN == 20)
  38.         sbit PWM2_L = P3^4;
  39.         sbit PWM1_L = P3^5;
  40.         sbit PWM0_L = P3^6;
  41. #endif

  42. #if        (MCU_PIN == 16)
  43.         sbit PWM2_L = P5^5;
  44.         sbit PWM1_L = P3^3;
  45.         sbit PWM0_L = P3^6;
  46. #endif

  47. u8        Step;
  48. u8        PWM_Value; // 決定PWM占空比的值
  49. u16        RxPulseWide;
  50. bit        B_RxOk;
  51. bit        B_RUN;
  52. u8        PWW_Set;
  53. u8        cnt10ms;
  54. u8        Rx_cnt;
  55. u8        TimeOut;        //堵轉超時

  56. #define DISABLE_CMP_INT CMPCR1 &= ~0X40                // 關閉比較器中斷
  57. #define ENABLE_CMP_INT  CMPCR1 |= 0X40                // 打開比較器中斷

  58. /*************************/

  59. void        Delay_n_ms(u8 dly)
  60. {
  61.         u16        j;
  62.         do
  63.         {
  64.                 j = MAIN_Fosc / 13000;        //延時1ms, 主程序在此節拍下運行
  65.                 while(--j)        ;
  66.         }while(--dly);
  67. }


  68. void delay_us(u8 us)
  69. {
  70.         do
  71.         {
  72.                 NOP(20);        //@24MHz
  73.         }
  74.         while(--us);
  75. }

  76. void StepXL(void) // 換相序列函數
  77. {
  78. switch(Step)
  79.   {
  80.    case 0:  // AB
  81.                         PWM0_L=0;        PWM2_L=0;
  82.                         CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // 打開A相的高端
  83.                         PWM1_L = 1;                 // 打開B相的低端
  84.                         ADC_CONTR = 0XED;        // 選擇P1.5作為ADC輸入 即c相電壓
  85.                         CMPCR1 = 0x9C;                //bit7=1 允許比較器, bit4=1 比較結果由1變0, 產生下降沿中斷 (不能響應下降沿中斷?)
  86.                         break;
  87.    case 1:  // AC
  88.                         PWM0_L=0;        PWM1_L=0;
  89.                         CCAP0H = PWM_Value;        CCAP1H=0;        CCAP2H=0;        // 打開A相的高端
  90.                         PWM2_L = 1;                        // 打開C相的低端
  91.                         ADC_CONTR = 0XEC;        // 選擇P1.4作為ADC輸入 即B相電壓
  92.                         CMPCR1 = 0xAC;                //上升沿中斷
  93.          
  94.       break;
  95.    case 2:  // BC
  96.                         PWM0_L=0;        PWM1_L=0;
  97.                         CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; // 打開B相的高端
  98.                         PWM2_L = 1;                        // 打開C相的低端
  99.                         ADC_CONTR = 0XEB;        // 選擇P1.3作為ADC輸入 即a相電壓
  100.                         CMPCR1 = 0x9C;                //下降沿中斷
  101.       break;
  102.    case 3:  // BA
  103.                         PWM1_L=0;        PWM2_L=0;
  104.                         CCAP0H=0;        CCAP2H=0;        CCAP1H = PWM_Value; // 打開B相的高端
  105.                         PWM0_L = 1;                        // 打開A相的低端
  106.                         ADC_CONTR = 0XED;        // 選擇P1.5作為ADC輸入 即c相電壓
  107.                         CMPCR1 = 0xAC;                //上升沿中斷
  108.                        
  109.       break;
  110.    case 4: // CA
  111.                         PWM1_L=0;        PWM2_L=0;
  112.                         CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value; // 打開C相的高端
  113.                         PWM0_L = 1;                        // 打開A相的低端
  114.                         ADC_CONTR = 0XEC;        // 選擇P1.4作為ADC輸入 即B相電壓
  115.                         CMPCR1 = 0x9C;                //下降沿中斷
  116.       break;
  117.    case 5: // CB
  118.                       PWM0_L=0;        PWM2_L=0;
  119.                         CCAP0H=0;        CCAP1H=0;        CCAP2H = PWM_Value;// 打開C相的高端
  120.                       PWM1_L = 1;                        // 打開B相的低端
  121.                         ADC_CONTR = 0XEB;        // 選擇P1.3作為ADC輸入 即a相電壓
  122.                         CMPCR1 = 0xAC;                //上升沿中斷
  123.          
  124.                 break;
  125.          
  126.         default:
  127.                 break;
  128.   }       
  129. }



  130. void PWM_Init(void)
  131. {
  132.         PWM0_L = 0;
  133.         PWM1_L = 0;
  134.         PWM2_L = 0;
  135.        
  136. #if        (MCU_PIN == 20)
  137.         P3n_push_pull(0x70);
  138. #endif
  139. #if        (MCU_PIN == 16)
  140.         P3n_push_pull(0x48);
  141.         P5n_push_pull(0x20);
  142. #endif

  143. //        CMOD = 1 << 1; //選擇系統時鐘/2為時鐘源,即PWM頻率=24M/2/256=46.9K
  144.         CMOD = 5 << 1; //選擇系統時鐘/4為時鐘源,即PWM頻率=24M/4/256=23.4K
  145. //        CMOD = 6 << 1; //選擇系統時鐘/6為時鐘源,即PWM頻率=24M/6/256=15.6K
  146.         CL=0;                        // PCA計數器清零
  147.         CH=0;
  148.        
  149.         PCA_PWM0 = 0X00;
  150.         CCAP0H=0;    // 初始化占空比為0% H的值裝載到L中
  151.         CCAP0L=0;
  152.         CCAPM0=0x42;        // 設置為PWM模式
  153.        
  154.         PCA_PWM1 = 0X00;
  155.         CCAP1H=0;    // 初始化占空比為0%
  156.         CCAP1L=0;
  157.         CCAPM1=0x42;        // 設置為PWM模式
  158.        
  159.         PCA_PWM2 = 0X00;
  160.         CCAP2H=0;    // 初始化占空比為0%
  161.         CCAP2L=0;
  162.         CCAPM2=0x42;        // 設置為PWM模式
  163.        
  164.         CR = 1;
  165. }

  166. void ADC_Init(void)
  167. {
  168.         P1n_pure_input(0x38);
  169.         P1ASF = 0X38; // 開通P1.3 P1.4 P1.5的AD輸入口
  170. }

  171. void CMP_INT(void) interrupt 21
  172. {
  173.         CMPCR1 &= ~0X40; // 需軟件清除中斷標志位
  174.         if(Step<5)        Step++;
  175.         else                Step = 0;
  176.         StepXL();
  177.         TimeOut = 10;        //10ms超時
  178. }

  179. void CMP_Init(void)
  180. {
  181.         CMPCR1 = 0X8C;        // 1000 1100 打開比較器,P5.4作為比較器的反相輸入端,ADC引腳作為正輸入端
  182.         CMPCR2 = 60;        // 60個時鐘濾波
  183.         P5n_pure_input(0x10);
  184. }

  185. u8 StartMotor(void)
  186. {
  187.         u16 timer,i;
  188.         DISABLE_CMP_INT;        // 禁止比較器中斷
  189.         PWM_Value = 30;                // 初始占空比=16/256=6%
  190.         Step = 0;
  191.         StepXL();                        // 初始位置
  192.         Delay_n_ms(5);//delay_ms(5);
  193.         timer = 300;

  194.         while(1)
  195.         {
  196.                 for(i=0; i<timer; i++)        delay_us(50);  //
  197.                 timer -= timer /15 + 1;
  198.                 if(timer < 25)        return(1);
  199.                 if( Step < 5)        Step++;
  200.                 else                        Step = 0;
  201.                 StepXL();
  202.         }
  203. }

  204. void T0_Iint(void)
  205. {
  206.         Timer0_AsTimer();        /* 時器0用做定時器        */
  207.         Timer0_12T();                /* Timer0 clodk = fo/12        12分頻,        default        */
  208.         Timer0_16bit();
  209.         Timer0_Gate_INT0_P32();        /* 時器0由外部INT0高電平允許定時計數 */
  210.         TH0 = 0;
  211.         TL0 = 0;
  212.         TR0 = 1; // 打開定時器0
  213.         ET0 = 1;// 允許ET0中斷
  214. }

  215. void T0_Interrupt(void) interrupt 1
  216. {
  217.         Rx_cnt = 0;                        //一旦出現溢出, 則開始的n個脈沖無效
  218.         RxPulseWide = 1000;        //停止
  219.         B_RxOk = 1;                        //虛擬收到一個脈沖
  220. }

  221. /********************* INT0中斷函數 *************************/
  222. void INT0_int (void) interrupt INT0_VECTOR
  223. {
  224.         u16        j;
  225.        
  226.         TR0 = 0;
  227.         j = ((u16)TH0 << 8) + TL0;
  228.         TH0 = 0;
  229.         TL0 = 0;
  230.         TR0 = 1;

  231.         if(++Rx_cnt >= 5)        Rx_cnt = 5;
  232.         j >>= 1;        //為了好處理, 轉成單位為us
  233.         if((j >= 800) && (j <= 2000) && (Rx_cnt == 5))
  234.         {
  235.                 RxPulseWide = j;
  236.                 B_RxOk = 1;                //標志收到一個脈沖
  237.         }

  238. }


  239. /**********************************************/
  240. void main(void)
  241. {
  242.         u16 j;

  243.         PWM_Init();
  244.         ADC_Init();
  245.         CMP_Init();
  246.         T0_Iint();

  247.         IE0 = 0;        // 清除外中斷0標志位
  248.         EX0 = 1;        // INT0 Enable
  249.         IT0 = 1;        //INT0 下降沿中斷
  250.        
  251.         RxPulseWide = 1000;
  252.         PWW_Set = 0;
  253.         cnt10ms = 0;
  254.         Rx_cnt  = 0;
  255.         TimeOut = 0;

  256.         EA  = 1; // 打開總中斷
  257.        
  258.         while (1)
  259.         {
  260.                 Delay_n_ms(1);        //延時1ms, 主程序在此節拍下運行

  261.                 if(TimeOut > 0)
  262.                 {
  263.                         if(--TimeOut == 0)        //堵轉超時
  264.                         {
  265.                                 CCAP0H=0;        CCAP1H=0;        CCAP2H=0;  // 占空比為0
  266.                                 PWM0_L=0;        PWM1_L=0;        PWM2_L=0;
  267.                                 DISABLE_CMP_INT; // 關比較器中斷
  268.                                 Delay_n_ms(250);        //堵轉時,延時1秒再啟動
  269.                                 Delay_n_ms(250);
  270.                                 Delay_n_ms(250);
  271.                                 Delay_n_ms(250);

  272.                                 RxPulseWide = 1000;
  273.                                 PWW_Set   = 0;
  274.                                 PWM_Value = 0;
  275.                                 B_RxOk = 0;
  276.                                 B_RUN  = 0;
  277.                                 Rx_cnt = 0;
  278.                                 TimeOut = 0;
  279.                         }
  280.                 }
  281.                
  282.                 if(B_RxOk)        //收到一個脈沖
  283.                 {
  284.                         B_RxOk = 0;
  285.                         j = RxPulseWide;
  286.                         if(j >= 1100)                                // 1100~1610對應PWM占空比值0~255
  287.                         {
  288.                                 j = (j - 1100) >> 1;        //2us對應PWM一個步進
  289.                                 if(j > 256)        j = 255;
  290.                         }
  291.                         else        j = 0;
  292.                         PWW_Set = (u8)j;
  293.                 }
  294.                
  295.                 if(!B_RUN && (PWW_Set >= 30))                // PWM_Set >= 30, 并且馬達未運行, 則啟動馬達
  296.                 {
  297.                         StartMotor();        // 啟動馬達
  298.                         CMPCR1 &= ~0X40; // 需軟件清除中斷標志位
  299.                         ENABLE_CMP_INT; // 打開比較器中斷
  300.                         B_RUN = 1;
  301.                         TimeOut = 0;
  302.                 }
  303.                
  304.                
  305.                 if(++cnt10ms >= 10)                // 10ms時隙
  306.                 {
  307.                         cnt10ms = 0;
  308.                         if(B_RUN)
  309.                         {
  310.                                 if(PWM_Value < PWW_Set)        PWM_Value++;
  311.                                 if(PWM_Value > PWW_Set)        PWM_Value--;
  312.                                 if(PWM_Value < 20)        // 停轉
  313.                                 {
  314.                                         PWM_Value = 0;
  315.                                         B_RUN = 0;
  316.                                         CCAP0H=0;        CCAP1H=0;        CCAP2H=0;  // 占空比為0
  317.                                         PWM0_L=0;        PWM1_L=0;        PWM2_L=0;
  318.                                         DISABLE_CMP_INT; // 關比較器中斷
  319.                                 }
  320.                         }
  321.                 }
  322.        
  323.         }
  324. }



復制代碼



STC15W401AS-實現四軸飛行器無刷電機的電調控制-參考程序和電路 (1).ZIP

161.85 KB, 下載次數: 35

回復

使用道具 舉報

ID:386588 發表于 2018-10-18 15:59 | 顯示全部樓層
謝謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产一区二区 | 精品欧美一区二区久久久伦 | 亚洲国产欧美日韩 | 国产精品久久网 | 色婷婷久久久亚洲一区二区三区 | 国产一区二区三区免费 | 妖精视频一区二区三区 | 性视频一区 | 欧美一区 | 国产精品视频yy9299一区 | 中国毛片免费 | 国产福利在线播放麻豆 | 99久久婷婷国产亚洲终合精品 | 人人玩人人添人人澡欧美 | 小川阿佐美pgd-606在线 | 一级黄色淫片 | 九九热精品在线视频 | 午夜精品一区二区三区三上悠亚 | 日韩免费在线观看视频 | 日日夜夜91 | 欧洲免费毛片 | 日韩欧美一区在线 | 精品99在线 | 99热电影| 国产女人第一次做爰毛片 | 中文在线a在线 | 久草在线在线精品观看 | 亚洲一区二区不卡在线观看 | 国产高清一区二区三区 | 欧美黑人一级爽快片淫片高清 | 日批的视频| 国户精品久久久久久久久久久不卡 | 成人激情视频网 | 97偷拍视频 | 欧美一区二区在线观看 | 久久国产精品视频 | 一级看片免费视频 | 嫩草视频免费 | 午夜精品导航 | 欧美中文字幕一区二区三区亚洲 | 盗摄精品av一区二区三区 |