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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8855|回復: 14
收起左側

帶位置感應器的直流無刷電機PMW控制仿真和單片機源碼

  [復制鏈接]
ID:249059 發表于 2017-11-13 20:18 | 顯示全部樓層 |閱讀模式
說明: 本例用PIC單片機控制帶感應器的直流無刷電機,通過調節RA0端口的可變電阻器可實現電機調速控制.由于當前版本PROTEUS不支持換向功能,連接RA1端口的SW1尚不能控制無刷電機的運行方向.

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png 0.png


單片機源程序如下:

  1. //-----------------------------------------------------------------
  2. //  名稱: 帶位置感應器的直流無刷電機PMW控制仿真
  3. //-----------------------------------------------------------------
  4. //  說明: 本例用PIC單片機控制帶感應器的直流無刷電機,通過調節RA0端口的
  5. //       可變電阻器可實現電機調速控制.
  6. //       由于當前版本PROTEUS不支持換向功能,連接RA1端口的SW1尚不能控制
  7. //       無刷電機的運行方向.
  8. //  
  9. //-----------------------------------------------------------------
  10. #include <xc.h>
  11. #define INT8U  unsigned char
  12. #define INT16U unsigned int
  13. #define _XTAL_FREQ 20000000UL           //20MHz
  14. #define  BLDC_StopMask       0B11010101 //關閉電機的掩碼(高邊設為全0)
  15. #define  BLDC_DrivePort      PORTC      //無刷直流電機驅動方向控制端口(6位)
  16. #define  BLDC_DrivePortTris  TRISC      //無刷直流電機驅動方向控制端口方向設置
  17. #define  BLDC_Direction      RA1        //無刷直流電機當前方向檢測位
  18. #define  BLDC_SensorPORT     PORTE      //無刷直流電機感應器輸入端口
  19. #define  BLDC_SensorTRIS     TRISE      //無刷直流電機感應器輸入端口方向寄存器
  20. volatile INT8U ADC_Result;              //控制PWM的AN0通道A/D轉換數據
  21. volatile INT8U DriveByte;               //電機驅動字節(低6位有效)
  22. //-----------------------------------------------------------------
  23. // 驅動表設置(更詳細說明可參閱本書相關章節)
  24. //-----------------------------------------------------------------
  25. //1.6個驅動器共為3對,每2個為一對
  26. //2.每一對驅動線由一個高邊和一個低邊構成
  27. //3.三個驅動器對應于三個電機繞組A,B,C
  28. //4.繞組 A 由RC[1..0]兩位驅動,其中RC1是 A 繞組的高邊
  29. //5.繞組 B 由RC[3..2]兩位驅動,其中RC3是 B 繞組的高邊
  30. //6.繞組 C 由RC[5..4]兩位驅動,其中RC5是 C 繞組的高邊
  31. //7.三個感應器位構成了驅動表的偏移地址,感應器位[0..2]分別對應于繞組A,B,C
  32. //正向驅動數據表,第1-6字節對應于相位6,4,5,2,1,3的驅動位,各字節中僅低6位有效
  33. //驅動表中第0,7兩字節無效
  34. const INT8U FwdTable[] =
  35. {

  36. };
  37. //反向驅動數據表,第1-6字節對應于相位/6,/4,/5,/2,/1,/3的驅動位,0,7兩字節無效
  38. //表中每個字節后6位中,相鄰兩位為一組,與上表的差別是每組中的兩位顛倒
  39. const INT8U RevTable[] =
  40. {
  41. };
  42. //-----------------------------------------------------------------
  43. // 換向控制
  44. //-----------------------------------------------------------------
  45. void Get_Drive_Byte()
  46. {
  47.     //讀取PORTE端口輸入的感應器當前數據(三位)
  48.     INT8U CurrentSensor = PORTE & 0B00000111;
  49.     //根據RA1端口的方向位及當前位置感應器輸出,從正向或反向驅動表中讀取驅動字節
  50.     if (BLDC_Direction == 0)
  51.        DriveByte = FwdTable[CurrentSensor];
  52.     else
  53.        DriveByte = RevTable[CurrentSensor];
  54. }
  55. //-----------------------------------------------------------------
  56. // 初始化程序
  57. //-----------------------------------------------------------------
  58. void Initialize()
  59. {
  60.     Get_Drive_Byte();            //根據當前電機位置取得驅動字節
  61.     ADC_Result= 0x00;            //初始速度控制值為0
  62.     BLDC_DrivePort = 0x00;       //關閉BLDC驅動端口
  63.     BLDC_DrivePortTris = 0x00;   //BLDC驅動方向端口設為輸出
  64.     BLDC_SensorTRIS = 0xFF;      //無刷直流電機感應器端口設為輸入
  65.     TRISA  = 0B00000011;         //AN0為模擬量輸入,RA1為電機方向控制
  66.     T0CS = 0;                    //TMR0時鐘選擇:內部時鐘
  67.     PSA = 0;                     //前分頻器分配給TMR0
  68.     PS2 = 1; PS1 = 1; PS0 = 1;   //256分頻(OPTION低3位為111,4M,256us)
  69.     ADCON1 = 0B00001110;         //A/D轉換結果左對齊,AN0為模擬端口,其余為數字端口
  70.     ADCON0 = 0B11000001;         //A/D時鐘源:RC,ADON置位,使能A/D模塊
  71.     GO_nDONE = 1;                //啟動ADC
  72. }
  73. //-----------------------------------------------------------------
  74. // 讀取A/D轉換結果的高8位
  75. //-----------------------------------------------------------------
  76. void ReadADC()
  77. {
  78.     //如果模/數轉換已經就緒則讀取速度控制值并重新啟ADC,以便讀取一次ADC結果
  79.     if (GO_nDONE) return;
  80.     ADC_Result = ADRESH;         //讀取A/D結果的高8位
  81.     GO_nDONE = 1;                //重啟A/D模塊
  82. }        
  83. //-----------------------------------------------------------------
  84. // 主程序
  85. //-----------------------------------------------------------------
  86. void main()
  87. {
  88.     Initialize();
  89.     while (1)
  90.     {
  91.        ReadADC();//從模/數轉換端口讀取速度控制值
  92.        //如果A/D轉換值為最大值則電機全速運行,否則調節PWM
  93.        //占空比 = ADC_Result / 255
  94.        if (ADC_Result != 0xFF)
  95.        {
  96.           if (TMR0 + ADC_Result <= 0xFF) DriveByte &= BLDC_StopMask;
  97.        }
  98.        //發送電機驅動字節(6位),驅動電機運行
  99.        BLDC_DrivePort = DriveByte;
  100.        //根據電機位置感應器輸出的當前位置取得新的驅動字節
  101.        Get_Drive_Byte();
  102. ……………………

  103. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
帶位置感應器的直流無刷電機PMW控制仿真.rar (64.17 KB, 下載次數: 228)


評分

參與人數 1黑幣 +15 收起 理由
GUOXUAN + 15 感謝老師分享!

查看全部評分

回復

使用道具 舉報

ID:61135 發表于 2017-11-14 09:53 | 顯示全部樓層
程序不全
回復

使用道具 舉報

ID:286498 發表于 2018-3-1 09:20 | 顯示全部樓層
謝謝分享。。。。
回復

使用道具 舉報

ID:286498 發表于 2018-3-1 09:20 | 顯示全部樓層
謝謝分享。。。。。
回復

使用道具 舉報

ID:240034 發表于 2018-3-2 17:03 | 顯示全部樓層
樓主用的PROTEUS是哪個版本
回復

使用道具 舉報

ID:249545 發表于 2018-4-15 16:40 | 顯示全部樓層
感謝老師給學生分享,問下老師,程序是完整的嗎?
回復

使用道具 舉報

ID:261010 發表于 2018-5-7 22:16 | 顯示全部樓層
感謝!。。。。。。。。。。。。。。!
回復

使用道具 舉報

ID:333778 發表于 2018-5-28 12:26 | 顯示全部樓層
驅動表怎么沒有呀,能發一下嗎
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
ID:342906 發表于 2018-6-1 15:18 | 顯示全部樓層
謝謝分享!!
回復

使用道具 舉報

ID:407471 發表于 2018-10-10 15:13 | 顯示全部樓層
學習一下,程序齊全嗎?
回復

使用道具 舉報

12#
無效樓層,該帖已經被刪除
ID:395522 發表于 2019-1-31 16:21 | 顯示全部樓層
正反轉的編碼如下,剛好我也在學馬達控制,分享給各位,感謝樓主的分享
const INT8U FwdTable[] = {0, 50, 11, 56, 44, 14, 35, 0
//0x00, 0x32, 0x0b, 0x38, 0x2c, 0x0e, 0x23, 0x00};

const INT8U RevTable[] = {0, 35, 14, 44, 56, 11, 50, 0
//0x00, 0x23, 0x0e, 0x2c, 0x38, 0x0b, 0x32, 0x00};
回復

使用道具 舉報

ID:518540 發表于 2019-4-22 13:54 | 顯示全部樓層
謝謝分享。。
回復

使用道具 舉報

ID:518540 發表于 2019-4-22 14:23 | 顯示全部樓層
謝謝分享。!
回復

使用道具 舉報

ID:443710 發表于 2020-1-4 23:31 | 顯示全部樓層
太牛逼了
回復

使用道具 舉報

ID:563624 發表于 2020-2-22 10:38 | 顯示全部樓層
謝謝分享,好好學習一下
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人免费视频二 | 国产一区日韩在线 | 成人老司机 | 精品自拍视频在线观看 | 亚洲狠狠爱 | 黑人巨大精品欧美一区二区免费 | 亚洲一区二区国产 | 日韩欧美在线观看视频 | 国产午夜精品久久久 | 日本一道本 | 欧美午夜一区 | 国产欧美精品一区二区三区 | 一区二区av| 亚洲狠狠| 欧美久久久久久久 | 波多野结衣先锋影音 | 欧美9999 | 国产精品观看 | 亚洲一二三区在线观看 | 91精品国产综合久久福利软件 | 欧美1区| 久久99精品久久久久久国产越南 | 日韩欧美中文字幕在线观看 | 色秀网站 | 一区二区精品 | 久久日韩精品 | 成人毛片在线视频 | 日韩一区二区三区视频在线播放 | 精品国产一级 | 国产91视频免费 | 国产乱精品一区二区三区 | 欧美理论片在线观看 | 免费观看www | 中文字幕一区二区三区精彩视频 | 成人在线一区二区 | 亚洲一区二区三区高清 | 福利网址 | 亚洲国产精品自拍 | 97国产精品视频人人做人人爱 | 中文字幕一级毛片视频 | 天天操人人干 |