亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9635|回復: 14
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
#
說明: 本例用PIC單片機控制帶感應器的直流無刷電機,通過調節RA0端口的可變電阻器可實現電機調速控制.由于當前版本PROTEUS不支持換向功能,連接RA1端口的SW1尚不能控制無刷電機的運行方向.

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



單片機源程序如下:

  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 感謝老師分享!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂2 踩
回復

使用道具 舉報

14#
ID:563624 發表于 2020-2-22 10:38 | 只看該作者
謝謝分享,好好學習一下
回復

使用道具 舉報

13#
ID:443710 發表于 2020-1-4 23:31 | 只看該作者
太牛逼了
回復

使用道具 舉報

12#
ID:518540 發表于 2019-4-22 14:23 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

11#
ID:518540 發表于 2019-4-22 13:54 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

10#
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};
回復

使用道具 舉報

9#
ID:407471 發表于 2018-10-10 15:13 | 只看該作者
學習一下,程序齊全嗎?
回復

使用道具 舉報

8#
ID:342906 發表于 2018-6-1 15:18 | 只看該作者
謝謝分享!!
回復

使用道具 舉報

7#
ID:333778 發表于 2018-5-28 12:26 | 只看該作者
驅動表怎么沒有呀,能發一下嗎
回復

使用道具 舉報

6#
ID:261010 發表于 2018-5-7 22:16 | 只看該作者
感謝!!!!!!!!!!!!!!!!!
回復

使用道具 舉報

5#
ID:249545 發表于 2018-4-15 16:40 | 只看該作者
感謝老師給學生分享,問下老師,程序是完整的嗎?
回復

使用道具 舉報

地板
ID:240034 發表于 2018-3-2 17:03 | 只看該作者
樓主用的PROTEUS是哪個版本
回復

使用道具 舉報

板凳
ID:286498 發表于 2018-3-1 09:20 | 只看該作者
謝謝分享。。。。。
回復

使用道具 舉報

沙發
ID:286498 發表于 2018-3-1 09:20 | 只看該作者
謝謝分享。。。。
回復

使用道具 舉報

樓主
ID:61135 發表于 2017-11-14 09:53 | 只看該作者
程序不全
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表