⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsensor.c

📁 NXP网站上的基于LPC2141的直流无刷电机控制源代码及文档
💻 C
字号:
#include <LPC214x.H>                   // LPC214x definitions
#include "bldc.h"


__irq void T0_Isr(void)
{
    T0TC = 0;                          // Reset timer

    switch ((IO0PIN >> 18) & 7)        // read Hall sensor inputs P0.18, P0.19 and P0.20
    {			
      case 1:  PWMMR1 = actualSpeed;   // phase 6: 001
               PWMMR2 = 0;
               PWMMR3 = 0;
               PWMMR4 = 0;
               PWMMR5 = 0;
               PWMMR6 = actualSpeed;
               break;
      case 2:  PWMMR1 = 0;             // phase 4: 010
               PWMMR2 = actualSpeed;
               PWMMR3 = 0;
               PWMMR4 = actualSpeed;
               PWMMR5 = 0;
               PWMMR6 = 0;
               break;
      case 3:  PWMMR1 = 0;             // phase 5: 011
               PWMMR2 = actualSpeed;
               PWMMR3 = 0;
               PWMMR4 = 0;
               PWMMR5 = 0;
               PWMMR6 = actualSpeed;
               break;
      case 4:  PWMMR1 = 0;             // phase 2: 100
               PWMMR2 = 0;
               PWMMR3 = actualSpeed;
               PWMMR4 = 0;
               PWMMR5 = actualSpeed;
               PWMMR6 = 0;
               break;
      case 5:  PWMMR1 = actualSpeed;   // phase 1: 101
               PWMMR2 = 0;
               PWMMR3 = 0;
               PWMMR4 = 0;
               PWMMR5 = actualSpeed;
               PWMMR6 = 0;
               break;
      case 6:  PWMMR1 = 0;             // phase 3: 110
               PWMMR2 = 0;
               PWMMR3 = actualSpeed;
               PWMMR4 = actualSpeed;
               PWMMR5 = 0;
               PWMMR6 = 0;
               break;
      default: break;                  // invalid
    }

    T0IR = 0xFF;                       // reset flags
    PWMLER = 0x7F;                     // enable PWM0 - PWM6 match latch (reload)
    VICVectAddr = 0;                   // Acknowledge interrupt by reseting VIC
}

void HES_Init(void)
{
    VICVectAddr1  = (unsigned int) &T0_Isr;
    VICVectCntl1  = 0x24;              // Channel1 on Source#4 ... enabled
    VICIntEnable |= 0x10;              // Channel#4 is the Timer 0

    PINSEL1 |= 0x3A000000;             // P0.30, P0.28 and P0.29 as CAP0.0, CAP0.2 and CAP0.3

    T0PR  = 60;                        // prescaler 60, timer runs at 60 MHz / 60 = 1 MHz
    T0MR0 = 1000000;                   // = 1 sec / 1 us
    T0MCR = 3;
    T0CCR = 0x0FC7;                    // Capture on both edges and enable the interrupt
    T0TC  = 0;                         // Reset timer
    T0TCR = 1;                         // start timer
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -