[TI]/LuminaryMicro2009. 3. 7. 21:41

Luminary BLDC Motor Driver DK 테스트

Luminary BLDC Motor Driver DK 테스트



BLDC Motor Controller Consol Board
CAN 인터페이스로 Driver보드에 속도 및 위치 제어 신호를 보내는 역할을 하는 테스트 보드로 CAN으로 Driver 보드의 펌웨어까지 업데이트 가능하다.


Luminary Micro의 BLDC Motor Driver
CAN인터페이스로 속도 및 위치 제어 신호를 받아 모터를 제어 하거나 외부에서 PWM, Direction 신호를 공급해 모터를 드라이브 할 수있다.



테스트 동영상
Host MCU(LM3S2965)에서 CAN통신으로 전압설정을 하면 모터가 구동되는 예제로 12V까지 설정 가능하다. CAN ID는 12개 까지 설정 가능하다.



소스코드()


Feature
• Quiet control of brushed DC motors
– 15 kHz PWM frequency
• Two options for Speed control
– Industry-standard R-C servo type (PWM) interface
– Controller Area Network (CAN) interface
• CAN communication
– Full configurability of module options
– Real-time monitoring of current, voltage, speed,
and speed
– Load firmware over CAN
• Status LED indicates Run, Direction, and Fault Conditions
• Motor brake/coast selector
• Limit switch inputs for forward and reverse directions
• Quadrature encoder input (QEI) and Analog input
• Colored screw terminals for all power wiring
– Headers (0.1 inch pitch) for all control signals
• Easy to customize
– Includes full source code, example applications, and
design files
– Develop using tools from Keil, IAR, Code Sourcery, or
Code Red (using a Stellaris evaluation kit or preferred
ARM Cortex-M3 debugger)
– Supported by Stellaris Peripheral Driver Library
Posted by nexp

댓글을 달아 주세요

[TI]/LM3S2xxx2009. 3. 6. 21:02

[LM3S2965] 관련자료

[LM3S2965] 관련자료



예제소스
Posted by nexp
TAG LM3S2965

댓글을 달아 주세요

[TI]/LM3S2xxx2009. 3. 5. 17:27

[LM3S2965] PWM 제어

[LM3S2965] PWM 제어




Luminary Micro Cortex-M3 LM3S2965 PWM
예제소스코드
pwmgen.zip



PWM초기화 함수
void PwmInit(void)
{
    // Enable the peripherals used by this example.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
 

    //
    // Set GPIO D0 and D1 as PWM pins.  They are used to output the PWM0 and
    // PWM1 signals.
    //
    GPIOPinTypePWM(GPIO_PORTG_BASE, GPIO_PIN_2 | GPIO_PIN_3);

    //
    // Compute the PWM period based on the system clock.
    //
    ulPeriod = SysCtlClockGet() / 50000;

    //
    // Set the PWM period to 50 kHz.
    //
    PWMGenConfigure(PWM_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, ulPeriod);

    //
    // Set PWM0 to a duty cycle of 25% and PWM1 to a duty cycle of 75%.
    //
    PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, ulPeriod/4);
    PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, ulPeriod * 3 / 4);

    //
    // Enable the PWM0 and PWM1 output signals.
    //
    PWMOutputState(PWM_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT, true);

    //
    // Enable the PWM generator.
    //
    PWMGenEnable(PWM_BASE, PWM_GEN_0);
}


PWM출력 함수
void PWMPulseWidthSet(unsigned long ulBase, unsigned long ulPWMOut, unsigned long ulWidth)
{
    unsigned long ulGenBase, ulReg;

    //
    // Check the arguments.
    //
    ASSERT(ulBase == PWM_BASE);
    ASSERT(PWMOutValid(ulPWMOut));

    //
    // Compute the generator's base address.
    //
    ulGenBase = PWM_OUT_BADDR(ulBase, ulPWMOut);

    //
    // If the counter is in up/down count mode, divide the width by two.
    //
    if(HWREG(ulGenBase + PWM_O_X_CTL) & PWM_X_CTL_MODE)
    {
        ulWidth /= 2;
    }

    //
    // Get the period.
    //
    ulReg = HWREG(ulGenBase + PWM_O_X_LOAD);

    //
    // Make sure the width is not too large.
    //
    ASSERT(ulWidth < ulReg);

    //
    // Compute the compare value.
    //
    ulReg = ulReg - ulWidth;

    //
    // Write to the appropriate registers.
    //
    if(PWM_IS_OUTPUT_ODD(ulPWMOut))
    {
        HWREG(ulGenBase + PWM_O_X_CMPB) = ulReg;
    }
    else
    {
        HWREG(ulGenBase + PWM_O_X_CMPA) = ulReg;
    }
}

Luminary Micro에서 제공하는 함수는 상당히 복잡하다. 범용으로 사용하기 쉽게 제작하긴 했지만... 쉽다는 장점으로 속도에서는 상당한 문제가 있다.
특히나 모터제어와 같이 PWM출력을 주기적으로 변경해야 하는 루틴이 많을경우 AVR보다 더 느려질 수도 있다.

그래서 PWM 제어 함수를 따로 만들었다.
void PwmSet(unsigned int Speed)
{
   HWREG(PWM_OUT_BADDR(PWM_BASE, PWM_OUT_0) + PWM_O_X_CMPA) = PWM_MAX_VALUE - Speed;
}


테스트 동영상

Posted by nexp

댓글을 달아 주세요

[TI]/LM3S2xxx2008. 12. 24. 16:06

[LM3S2965] Motor Controller

[LM3S2965] Motor Controller

LM3S2000 시리즈는 PMW 6ch, Encoder 2ch, ADC 3ch, CAN 의 특히모터 제어용으로 특화되어 있는 MCU이다. Luminary Micro사 특징은 대부분의 시리즈가 코드 호환 되므로 개발에는 어려움이 없어 보인다. 모터 제어용으로 사용해 보면 좋을것 같다.


LM3S2965

The LM3S2965 microcontroller is based on the ARM Cortex-M3 controller core operating at 50 MHz, with 256 kB single-cycle flash, 64 kB single-cycle SRAM, two CAN controllers, Systick timer, four 32-bit or eight16-bit general purpose timers, watchdog timer, two SSI / SPI controllers, two I2C interfaces, three analog comparators, three UARTs, 10-bit analog-to-digital converter (ADC) with four input channels, six motion-control Pulse Width Modulation (PWM) outputs, two Quadrature Encoder Inputs, battery-backed hibernation module with RTC, low drop-out voltage regulator, brown-out reset, power-on reset controller, and up to 56 GPIOs.


Summarized Features

CAN UARTs GPIOs SSI I2C Analog Comparators ADC Channels PWM Pins Quadrature Encoder
LM3S2965 2 3 3-56 2 2 3 4 6 2
LM3S2950 2 3 10-60 2 1 3 6 1
LM3S2948 2 3 12-52 2 1 3 8
LM3S2939 1 3 18-57 1 1 3 3 4 1
LM3S2918 1 2 15-52 2 2 2 8 - -
LM3S2911 1 3 21-60 2 2 2 - - -







LM3S2965 회로도





Posted by nexp
TAG LM3S2965

댓글을 달아 주세요

[TI]/LuminaryMicro2008. 9. 25. 22:00

Luminary Micro LM3S 개발환경 설정 - IAR 무료 버젼 컴파일러를 이용한 테스트

Luminary Micro LM3S 개발환경 설정 - IAR 무료 버젼 컴파일러를 이용한 테스트

Luminary Micro의 Cortex-M3 코어 (LM3S8962, LM3S311, LM3S301, LM3S801, LM3S2965 ...)의 개발환경 설정에 관련해 정리해 보았다.

프로젝트 전체 예제소스




먼저 Lumnary Micro(http://www.luminarymicro.com/)에서 관련 최신 예제파일 및 Lib파일을 다운 받는다. 대부분 파일 하나에 포함되어 있다. 등록하고 다운받아 설치한다. 각종 예제 및 프로젝트파일 Lib파일... 전체를 포함하고 있다.


여기서 diverlib, inc폴더의 파일을 이용해 다양한 테스트를 해 볼 수 있다.




컴파일러는 IAR사의 EW-ARM을 이용 하였고 http://www.iar.com 에서 무료 데보 버젼을 다운로드 가능하다.
1)새로운 프로젝트를 생성하고 옵션 설정에서 디바이스를 선택한다.




2)필요한 환경설정을 한다.
$PROJ_DIR$\
$PROJ_DIR$\..\01_drv\
$PROJ_DIR$\..\inc\
$PROJ_DIR$\..\driverlib



3)Linker Command file설정



4)디버거 설정 - LMI FTDI로 설정


5)디버거 - Flash 다운로드 설정




환경설정이 완료되고 프로그램 작성하여 컴파일 한다. 디버깅 버튼을 클릭하여 파일 다운로드 및 디버깅 가능하다.



LM3S308을 이용한 디버깅 테스트 환경

Posted by nexp

댓글을 달아 주세요