[DSP]/DSP283352009. 5. 28. 02:05

[DSP28335 EVM] TMS320F28335 SPI테스트 - 3축 가속도 센서 테스트

[DSP28335 EVM] TMS320F28335 SPI테스트 - 3축 가속도 센서 테스트


DSP2808335 SPI테스트를 위해 Code Composer Studio에 SPI관련 소스 및 가속도 센서 코드 추가



TMS320F28335 SPI블럭도






SPI Mode설정
LIS3LV02제어를 위해서는 SPI Mode0로 설정해야한다. SPICCR, SPICTL레지스터에서 설정할 수 있다.




SPI 설정


SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0

 //SPI 초기화
 SpiaRegs.SPICCR.bit.SPISWRESET = 0;
 SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
 SpiaRegs.SPICCR.bit.SPILBK = 0;  //루프백 비사용
 SpiaRegs.SPICCR.bit.SPICHAR = 7;  //8비트 모드 
 SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Ready to transmit

 SpiaRegs.SPICTL.bit.SPIINTENA = 0; //인터럽트 비사용
 SpiaRegs.SPICTL.bit.TALK = 1;   // Transmit enable
 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //SPI마스터 모드
 SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0
 SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0; //Overrun interrupt disable

 SpiaRegs.SPIPRI.bit.FREE = 1;       // Set so breakpoints don't disturb xmission


SPI클럭 속도 설정
SpiaRegs.SPIBRR 레지스터에서 설정 가능하다. TMS320F28335는 최대 10Mhz까지 가능하다.(좀 아쉽다.)

 //SPI 클럭속도 설정
 SPI0_SetSpeed(SPI_SPEED_4MHZ);



 //SPI GPIO초기화
 EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pull-up on GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
   
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
    EDIS;
 
 //SPI FIFO 초기화
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;


TMS320F280335  3축 가속도 센서 테스트 소스코드
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("TMS320F28335 SPI Test\r\n");

 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xD7);  //1000.0111 Power on, enable all axis, self test off
 myAccel3lvWrite(CTRL_REG2, 0x40);

 while(1)
 {
  if(DebugIsByte())
  {
   switch(U0_GetByte())
   {
   case 'h':
    DebugPrint(("device_id=%02X\r\n", myAccel3lvRead(WHO_AM_I));
    break;

 case 'r':
    GetAccelValue(AXIS_X, &data);
    DebugPrint("Accel:%d\\n", data);  
    break;
}
}
Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM322009. 5. 27. 22:30

[myUSB-Sensor] USB 센서보드제작

[myUSB-Sensor] USB 센서보드제작


USB를 이용하여 자이로, 가속도, 지자계, 압력 센서등의 모듈을 테스트 할수 있는 보드를 제작했다.
1차 프로토 보드로 여러가지로 테스트 할수 있는 커넥터 및 확장 분리 보드로 제작 했다.
보드에는 SPI, I2C, CAN Driver, 485 Driver, SD Card를 USB로 인터페이스 가능하도록 했다.



USB2UART를 연결할 수 있도록 해서 UART로 쉽게 디버깅 및 프로그램 다운도드 가능하다.



코어는 Cortex-M3 STM32로 USB가 있는 제품으로 저렴하고 성능 좋은 STM32F103으로 선택했다.



각종 센서 및 이더넷 모둘(ENC28J60) 연결가능하다.



USB 테스트 동영상


Posted by nexp

댓글을 달아 주세요

  1. 윤보람

    blueybr@naver.com
    죄송한데합니다. 제가 지금 졸업 작품을 만드려는 데 지금 USB센서 보드에 대한 자료가 필요해서 그런데
    USB센서 보드를 만드는 방법좀 설명해주실수 있나요? 무슨 재료가 들어가고 어떠한 순번으로 만들어야
    하는지? 참고로 진동 감지 센서가 진동을 감지하고 그걸 컴퓨터가 인식하게 만드려고 합니다.

    2009.10.29 15:45 [ ADDR : EDIT/ DEL : REPLY ]

[SENSOR]/Accel2008. 9. 8. 06:15

[LIS3LV02DL] 3축 가속도 센서 myAccel3LV02 모듈 테스트

[LIS3LV02DL] 3축 가속도 센서 myAccel3LV02 모듈 테스트

사용자 삽입 이미지

[LIS3LV02DL] 3축 가속도센서 (myAccel3LV02 모듈)을 이용하여 SPI방식의 제어 테스트.

LIS3LV02는 SPI, I2C구동이 가능하고, SPI구동을 위해 CS핀을 0으로 하면 된다.

제어 방법은 상당히 간단하며, 초기화 후 각 축의 레지스터에서 값을 읽어오기만 하면 된다.

초기화
디폴트 값이 파워다운 모드 이므로 CTRL_REG1레지스터에 초기 값을 쓰면 된다.
WriteReg(CTRL_REG1, 0xC7);  //1000.0111 Power on, enable all axis, self test off

X, Y,Z축 데이터 읽기
OUTX_L, OUTX_H 레지스터에서 값을 읽어오면 된다. 이때 각축의 데이터 값이 의미 있는 값인지는 STATUS_REG레지스터를 읽어 확인 할 수있다.

    //속도가 문제라면 이부분을 지우고 RDY핀을 GPIO로 읽으면된다.
    while(1)
    {
      ret = ReadReg(STATUS_REG);
      if ((ret & 0x8) != 0)break;
    }

   *data = ReadReg(OUTX_L);
   *data |= ReadReg(OUTX_H)<<8;

SPI인터페이스의 경우 SPI Mode0 로 인터페이스 가능하다.



LIS3LV02축방향 정보



테스트 동영상
가속도센서의 x축 데이터를 읽어서 그래프로 표시 하는 예제



[STM32-USB EVM]을 이용한 가속도 센서(LIS3LV02) 테스트 동영상



AVR쪽 커넥터 처리
왼쪽 부터 GND, PB0, BP1, PB2, PB3, ... VCC
Posted by nexp

댓글을 달아 주세요

  1. 최병무

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.04.07 18:45 [ ADDR : EDIT/ DEL : REPLY ]
  2. 비밀댓글입니다

    2011.12.22 14:57 [ ADDR : EDIT/ DEL : REPLY ]