카테고리 없음2014. 7. 28. 11:25

[비공개 처리]

FB155BC의 상세설정이나 공장초기화를 하려면 인터페이스보드가 필요하다. 하지만 사실은 인터페이스보드 없이도 가능하다. 준비물은 단지 RS232 통신모듈과 3.3V의 전원만 있으면 된다.

 

여유가 없는관계로 회로 사진은 나중에 올리겠다.

 

블루투스 모듈의 GND와 VCC를 전원의 GND와 3.3V에 연결해준다. RS232모듈 역시 GND와 VCC를 연결해준다.

블루투스 모듈의 RX와 TX를 RS232의 TX와 RX에 연결해준다.

[아직 모듈에 전원을 인가하지는 않은 상태다]

RS232를 PC에 연결해준다.

 

소프트웨어 ComportMaster를 준비한다.

초기 보드레이트를 맞추고(메뉴얼 참조) RS232의 포트를 맞춰준다.->이로써 블루투스 모듈과의 통신준비 완료

 

1.공장초기화

모듈에 전원을 인가한다.

블루투스 모듈의 공장초기화 슬롯을 GND에 연결해준다.

슬롯과 GND간의 연결을 해지한다.

[공장초기화 끝]

 

2.인터페이스 메뉴<인터페이스 보드를 사용해서 들어가는 메뉴로 들어갈 수 있다.>

블루투스 모듈의 공장초기화 슬롯을 GND에 연결해준다.

모듈에 전원을 인가한다.-> 이후 인터페이스 메뉴가 나타난다.

슬롯과 GND간의 연결을 해지한다.

Posted by 십자성군
Project/Balancing Robot2014. 7. 27. 23:13

엔코더를 사용할 때, 풀업을 해주어야 한다. 이와 관련해서 설명하고자 한다.

 

 

 

위의 그림을 보면 A와 B상의 output이 저항을 건너 MCU의 Input에 연결되어 있다.

아래는 이에 대한 설명이다(맞는지 모르겠다. 틀린곳이 있다면 설명 바랍니다. 회로쪽은 잘 몰라서...)

 

 

내가 이해를 잘 못했을지도 모르겠고 나중에 다시 물어봐서 수정해야 겠다.

 

 

일단, 엔코더를 사용할 때는, 엔코더에 넣어주는 전원은 MCU와는 따로 사용해 준다.

엔고더의 센서에서 나오는 전류값은 낮다. 저항을 통해 센서와 입력부 사이에 DC 5V전원을 연결해 주었을 때, 센서가 High 상태이면 전원부의 전류는 입력으로 흐를것이고 OFF상태이면 센서로 흐를것이다.




 

 

'Project > Balancing Robot' 카테고리의 다른 글

실습코드 해석. 순서  (0) 2014.07.23
[초기화6] Init_ADC()  (0) 2014.07.23
[초기화5] Init_SPI()  (0) 2014.07.23
[초기화4] Init_SCIA(), Init_SCIB()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
Posted by 십자성군
TMS320/Study2014. 7. 27. 22:13

풀 업 저항과 풀 다운 저항을 사용하는 이유에 대해서 앞의 floating을 보충한다.

 

다음의 그림을 보자

 

 

 

 

두 그림 다 풀 업, 풀 다운 저항을 사용하지 않은 경우이다.

사용한 게이트는 not 게이트 이다.

 

1번 그림에 대해서 생각해 보자. 스위치가 닫혔을 경우 NOT게이트의 입력에 0이 입력되고 input에 1이 입력될 것이다. 그렇다면 스위차가 열렸을 경우는? 게이트에 아무 입력이 연결되지 못한다.

[이 부분은 이해가 잘 안된 부분]

스위치가 끊어지거나 연결되지 않은 상태는 대부분의 게이트에서 입력(high)으로 받아들인다. 또한 전자적인 잡음에 의해서 입력이 low가 될 수 있다. 이는 굉장히 불안정한 상태인 것이다.

 

그럼 2번 그림을 보자.

게이트에 입력을 직접 연결하였다. 스위치가 off가 되면 VCC에서 게이트로 입력이 들어가고 ON상태가 되면... 앞의 글을 봤다면 게이트로 전류가 흐른다고 생각할 지도 모르지만, GND쪽으로 저항이 0이기 때문에 그쪽으로 전류가 흐르고 전원과 접지가 바로 붙어버린다. 따라서 쇼트가 일어나 과전류가 흘러 전선이 탈 수 있다.

 

즉 1번 그림에 대하여 VCC를 붙여주어 입력을 확실히 하여 floating을 해결하고, 이로 인해 생길 수 있는 쇼트를 풀 업 또는 풀 다운 저항으로 해결한다.

Posted by 십자성군
TMS320/Study2014. 7. 27. 22:01

추가 참고 : http://blog.xcoda.net/77


풀 업(pull-up)저항과 풀 다운(pull-down)저항의 용도는

'여러 가지 입력들로부터 안전하게 동작할 수 있도록 하기 위한 것'이다.

 

두 저항의 차이점은 아래와 같다.

풀 업 저항 : 전원 쪽으로 연결

풀 다운 저항 : 접지 쪽으로 연결

 

 

pull-up                                    pull-down

 

구체적으로 들어가기에 앞서 플로팅(floating)에 대해 이해가 필요하다.

 

플로팅이란?

 칩에 입력을 5V(1) 또는 0V(0)을 가할 때, 입력 자체를 가하지 않는 경우에는 칩 자체에 5V를 입력하였는지 1V를 입력하였는지 모르며 이는 오작동의 원인이 될 수 있다. 이런 상태를 floating되었다고 한다.

 이런 상태는 1V등을 잡음으로 볼 수 있어 시스템이 잡음에 취햑하고 불안정해진다. 이를 해결하기 위해 풀 업 또는 풀 다운 저항을 이용하는 것이다.

 

아래 그림을 보자

 

 [풀 업 저항]

 

풀업 저항을 사용 할 경우, 스위치를 열어 놓으면 회로에 5V가 입력되고 회로에 입력을 몰라도 항상 5V의 전압을 가진 상태가 된다.

스위치를 닫는다면 GND로 전류가 흐르고 회로의 전압은 0V가 되어 1을 입력한 것으로 인식하게 된다. [풀 업 저항]은 핀을 높은 저항에 매달아 두는 이미지를 의미한다.

 

 

 

위처럼 스위치를 닫으면 핀의 전압이 0V가 된다.

 

[풀 다운 저항]

 

 

 

 

 

항상 그라운드(땅 바닥)에 묶어둔다는 이미지로 '풀 다운 저항'이라고 부른다.

스위치를 open 할 경우 전류가 항상 그라운드로 흘러가기 때문에 0, close 할 경우 소량의 전류가 나가지만 대량의 전류가 흘러 들어와 1이 된다.

Posted by 십자성군
TMS320/부품2014. 7. 27. 19:18

밸런싱 로봇에 쓰고있는 로터리 엔코더이다.

 

관련자료는 여기에 :

엔코더.zip

 

설명

2채널의 적분영 출력(quadrature outputs)

Optional index(3번째 채널)??

CPR(cycles per revolution) : 50 to 1024 : 1회전당 싸이클 수 ???

PPR(pulses per revolution) : 200 to 4000 : 1회전당 발생 펄스 수

Fit shaft diameters : 2mm to 10mm

 

사용하는 모터:

PM DC모터

BLDC 모터

Stepping 모터

 

로터리 엔코더는 적분형(Incremental)과 절대형(Absolute)이 있다. 이 엔코더는 적분형(I)이다.

 

Waveform은 다음과 같다.

2개의 위상으로 A와 B의 위상을 대조하고 Z(회전)을 검출한다.

즉, A가 하강중일 때 B가 하강하는 것을 검출하여 회전을 체크한다.

 

구조와 작동환경은 아래와 같다.

 

 

 

공급전윈 : 5V

최대 공급전류 : 버전에 따라 40mA 또는 85mA

최대 주파수 : 100kHz

Load capacitance(?) : 100pF Max

 

Odering Information은 확인불가했다.

Posted by 십자성군
TMS320/Study2014. 7. 25. 23:17


'TMS320 > Study' 카테고리의 다른 글

[이론]풀-업 저항과 풀-다운 저항2  (0) 2014.07.27
[이론]풀-업 저항과 풀-다운 저항  (0) 2014.07.27
[2812]부트모드 선택  (0) 2014.07.23
[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
Posted by 십자성군
Project/Balancing Robot2014. 7. 23. 19:15

 

 

 

'Project > Balancing Robot' 카테고리의 다른 글

엔코더와 풀업, 전압분배  (0) 2014.07.27
[초기화6] Init_ADC()  (0) 2014.07.23
[초기화5] Init_SPI()  (0) 2014.07.23
[초기화4] Init_SCIA(), Init_SCIB()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
Posted by 십자성군
Project/Balancing Robot2014. 7. 23. 14:53

void Init_ADC()
{


// AdcRegs.ADCTRL1.bit.RESET = 1 ;  // Adc module Reset
// asm(" RPT #12 || nop ") ;   // Reset는 3 ADC_CLK 지연이 발생한다.
          // 현재 ADC_CLK으로
 InitAdc();

 // ADC 설정
 AdcRegs.ADCTRL3.bit.ADCCLKPS = 15;     // ADCCLKPS = HSPCLK / 30 (ADCCLKPS = 2.5MHz)
 AdcRegs.ADCTRL1.bit.CPS = 1;   // ADCCLK = ADCCLKPS / 2 (ADC의 구동 클럭을 결정 : ADCCLK = 1.25MHz)
 AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;  // 시퀀스 직렬 모드
 AdcRegs.ADCTRL1.bit.ACQ_PS = 7 ;  // 샘플링 윈도우 size를 8 ADC_CLK 설정
// AdcRegs.ADCMAXCONV.all = 0x0002;       // ADC??개수 설정 : 모두 2개 ADC를 변환
 AdcRegs.ADCMAXCONV.all = 0x0004;
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;  // Murata [ Gyro ]
 AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; // SA1 [ Tilt ] 4
// AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 2; // Z [ Accelerometer ]
// AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 3; // Y [ Accelerometer ]
// AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 8; // X [ Accelerometer ]
// AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 5; // SCA10T [ Tilt ] 5

// AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 2;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;    // Cont. conv. mode
 AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;  // 시퀀스 시작


}

'Project > Balancing Robot' 카테고리의 다른 글

엔코더와 풀업, 전압분배  (0) 2014.07.27
실습코드 해석. 순서  (0) 2014.07.23
[초기화5] Init_SPI()  (0) 2014.07.23
[초기화4] Init_SCIA(), Init_SCIB()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
Posted by 십자성군
Project/Balancing Robot2014. 7. 23. 14:52

void Init_SPI()
{


 SpiaRegs.SPICCR.bit.CLKPOLARITY =0;
 SpiaRegs.SPICTL.bit.CLK_PHASE =0;

 SpiaRegs.SPICCR.bit.SPISWRESET =0;
 asm(" RPT #10 || nop ") ;
 SpiaRegs.SPICCR.bit.CLKPOLARITY =0;
 SpiaRegs.SPICCR.bit.SPILBK =0;
 SpiaRegs.SPICCR.bit.SPICHAR = 0xff;
 SpiaRegs.SPICCR.bit.SPISWRESET =1;

 SpiaRegs.SPICTL.bit.SPIINTENA =0;   //master,slave 선택
 SpiaRegs.SPICTL.bit.TALK =1;    //spi활성화
 SpiaRegs.SPICTL.bit.MASTER_SLAVE =1;
 SpiaRegs.SPICTL.bit.CLK_PHASE =0;
 SpiaRegs.SPICTL.bit.OVERRUNINTENA=0;
 SpiaRegs.SPICTL.bit.SPIINTENA =0;

 SpiaRegs.SPIPRI.bit.FREE = 1;
 SpiaRegs.SPIBRR = 7 ;

 

}

 

'Project > Balancing Robot' 카테고리의 다른 글

실습코드 해석. 순서  (0) 2014.07.23
[초기화6] Init_ADC()  (0) 2014.07.23
[초기화4] Init_SCIA(), Init_SCIB()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
[초기화2] Init_GPIO()  (0) 2014.07.23
Posted by 십자성군
Project/Balancing Robot2014. 7. 23. 14:51

void Init_SCIA()
{


 SciaRegs.SCICCR.bit.STOPBITS = 0 ;  // One Stop bit
 SciaRegs.SCICCR.bit.PARITY = 0 ;  // Odd parity(ignored)
 SciaRegs.SCICCR.bit.PARITYENA = 0 ;  // Parity disable
 SciaRegs.SCICCR.bit.LOOPBKENA = 0 ;  // loop back mode disable
 SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0 ; // Idle-line mode (normal)
 SciaRegs.SCICCR.bit.SCICHAR = 0x07 ; // SCI char-length 8 bit

 SciaRegs.SCICTL1.bit.RXERRINTENA = 1 ; // SCI receive error interrupt disable
 SciaRegs.SCICTL1.bit.SWRESET = 0 ;  // SCI module reset
 asm(" RPT #10 || nop ") ;
 SciaRegs.SCICTL1.bit.SWRESET = 1 ;  // SCI mdoule reset release
 SciaRegs.SCICTL1.bit.TXWAKE = 0 ;  // SCI transmitter wake-up method (non use)
 SciaRegs.SCICTL1.bit.SLEEP = 0 ;  // SCI sleep mode non use
 SciaRegs.SCICTL1.bit.TXENA = 1 ;  // SCI transmitter enable
 SciaRegs.SCICTL1.bit.RXENA = 1 ;  // SCI receiver enable

// SciaRegs.SCIHBAUD = 0x01 ;    // ( 37.5M / (9600 * 8) ) - 1 = 0x01e7
// SciaRegs.SCILBAUD = 0xe7 ;
 SciaRegs.SCIHBAUD = 0x00 ;    // ( 37.5M / (38400 * 8 ) - 1 = 0x0079
 SciaRegs.SCILBAUD = 0x79 ;
// SciaRegs.SCIHBAUD = 0x00 ;    // ( 37.5M / (57600 * 8) ) - 1 = 0x0050
// SciaRegs.SCILBAUD = 0x50 ;

 SciaRegs.SCICTL2.bit.RXBKINTENA = 1 ; // Receive buffer or break interrup enable
 SciaRegs.SCICTL2.bit.TXINTENA = 1 ;  // SCITXBUF-register interrupt enable

 SciaRegs.SCIFFTX.bit.SCIRST = 1 ;  // SCI FIFO can resume transmit or receive
 SciaRegs.SCIFFTX.bit.SCIFFENA = 0 ;  // SCI FIFO enhancements are enable
 SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0 ; // Transmitter FIFO Re-Enable (FIFO Point to zero reset)
 SciaRegs.SCIFFTX.bit.TXFFIENA = 0 ;  // Transmitter FIFO Interrupt enable
 SciaRegs.SCIFFTX.bit.TXFFILIL = 0 ;  // Transmitter FIFO deep level (5)

 SciaRegs.SCIFFRX.bit.RXFIFORESET = 0 ; // Receive FIFO Re-Enable
 SciaRegs.SCIFFRX.bit.RXFFIENA = 0 ;  // Receive FIFO Interrupt Enable
 SciaRegs.SCIFFRX.bit.RXFIFST = 4;       // RX FIFO 4개로 함
 SciaRegs.SCIFFRX.bit.RXFFIL = 0 ;  // Receive FIFO deep level (5)

 

}

 

void Init_SCIB()
{


 ScibRegs.SCICCR.bit.STOPBITS = 0 ;  // One Stop bit
 ScibRegs.SCICCR.bit.PARITY = 0 ;  // Odd parity(ignored)
 ScibRegs.SCICCR.bit.PARITYENA = 0 ;  // Parity disable
 ScibRegs.SCICCR.bit.LOOPBKENA = 0 ;  // loop back mode disable
 ScibRegs.SCICCR.bit.ADDRIDLE_MODE = 0 ; // Idle-line mode (normal)
 ScibRegs.SCICCR.bit.SCICHAR = 0x07 ; // SCI char-length 8 bit

 ScibRegs.SCICTL1.bit.RXERRINTENA = 1 ; // SCI receive error interrupt disable
 ScibRegs.SCICTL1.bit.SWRESET = 0 ;  // SCI module reset
 asm(" RPT #10 || nop ") ;
 ScibRegs.SCICTL1.bit.SWRESET = 1 ;  // SCI mdoule reset release
 ScibRegs.SCICTL1.bit.TXWAKE = 0 ;  // SCI transmitter wake-up method (non use)
 ScibRegs.SCICTL1.bit.SLEEP = 0 ;  // SCI sleep mode non use
 ScibRegs.SCICTL1.bit.TXENA = 1 ;  // SCI transmitter enable
 ScibRegs.SCICTL1.bit.RXENA = 1 ;  // SCI receiver enable

// ScibRegs.SCIHBAUD = 0x01 ;    // ( 37.5M / (9600 * 8) ) - 1 = 0x01e7
// ScibRegs.SCILBAUD = 0xe7 ;
 ScibRegs.SCIHBAUD = 0x00 ;    // ( 37.5M / (38400 * 8 ) - 1 = 0x0079
 ScibRegs.SCILBAUD = 0x79 ;
// ScibRegs.SCIHBAUD = 0x00 ;    // ( 37.5M / (57600 * 8) ) - 1 = 0x0050
// ScibRegs.SCILBAUD = 0x50 ;

 ScibRegs.SCICTL2.bit.RXBKINTENA = 1 ; // Receive buffer or break interrup enable
 ScibRegs.SCICTL2.bit.TXINTENA = 1 ;  // SCITXBUF-register interrupt enable

 ScibRegs.SCIFFTX.bit.SCIRST = 1 ;  // SCI FIFO can resume transmit or receive
 ScibRegs.SCIFFTX.bit.SCIFFENA = 0 ;  // SCI FIFO enhancements are enable
 ScibRegs.SCIFFTX.bit.TXFIFOXRESET = 0 ; // Transmitter FIFO Re-Enable (FIFO Point to zero reset)
 ScibRegs.SCIFFTX.bit.TXFFIENA = 0 ;  // Transmitter FIFO Interrupt enable
 ScibRegs.SCIFFTX.bit.TXFFILIL = 0 ;  // Transmitter FIFO deep level (5)

 ScibRegs.SCIFFRX.bit.RXFIFORESET = 0 ; // Receive FIFO Re-Enable
 ScibRegs.SCIFFRX.bit.RXFFIENA = 0;  // Receive FIFO Interrupt Enable
 ScibRegs.SCIFFRX.bit.RXFFIL = 0 ;  // Receive FIFO deep level (5)


}

 

'Project > Balancing Robot' 카테고리의 다른 글

[초기화6] Init_ADC()  (0) 2014.07.23
[초기화5] Init_SPI()  (0) 2014.07.23
[초기화3] Init_EVA(), Init_EVB()  (0) 2014.07.23
[초기화2] Init_GPIO()  (0) 2014.07.23
[초기화1] DSP_Init()  (0) 2014.07.23
Posted by 십자성군