[DSP]/DSP283352011. 11. 13. 18:12

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제



[DSP28335 EVM] 보드에는 ADC를 테스트 하기 위한  CdS 센서가 있고, ADCA1에 연결되어 있다
CdS센서를 사용하지 않는다면 R157을 제거하면 된다.





TMS320F28335 ADC테스트용 PC프로그램





TMS320F28335 ADC테스트 동영상




TMS320F28335 ADC초기화 함수
//ADC Initialize
void AdcInit(void)
{
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;
    
   InitAdc();  // For this example, init the ADC

// Specific ADC setup for this example:
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    
   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run 
  
     // Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;
}


채널별 ADC 값 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = Channel;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

 while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
    // Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
    //               = (3*2)      * (1*2)        * (0+1)   = 12 cycles
    asm(" RPT #11 || NOP");
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
    return (AdcRegs.ADCRESULT0>>4);
}



Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 5. 4. 21:30

[TMS320F28069 EVM] ADC테스트 - TFT LCD에 VR값 표시

[TMS320F28069 EVM] ADC테스트 - TFT LCD에 VR값 표시



[TMS320F28069 EVM]에는 7개의 12비트 ADC를 할당해 두었다.
새로운 PICCOLO시리즈는 ADC쪽 기능이 향상되었다고 하는데.. 좀더 깊이 있는내용은 추후에 진행 하도록 하고 일단 기존 TMS320F2808 EVM예제를 포팅해서 간단한 테스트를 진행 해 보려고 한다.

TMS320F28069 ADC블록도



ADC부분은 기존 TMS320F2808 과 비교해 변화된 부분이 있으므로 수정이 필요하다. 레지스터명도 달라지고.. 구조 자체도 변경되었기 때문에 ADC.c 에 있는 초기화 함수를 수정해 주었다.

void AdcInit(void)
{
       InitAdc();

// Configure ADC
 EALLOW;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; // Enable non-overlap mode
 AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
 AdcRegs.INTSEL1N2.bit.INT1E     = 1; //Enabled ADCINT1
 AdcRegs.INTSEL1N2.bit.INT1CONT  = 0; //Disable ADCINT1 Continuous mode
    AdcRegs.INTSEL1N2.bit.INT1SEL  = 1;    // setup EOC1 to trigger ADCINT1 to fire
    AdcRegs.ADCSOC0CTL.bit.CHSEL  = 4;    // set SOC0 channel select to ADCINA4
    AdcRegs.ADCSOC1CTL.bit.CHSEL  = 2;    // set SOC1 channel select to ADCINA2
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 5;    // set SOC0 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = 5;    // set SOC1 start trigger on EPWM1A, due to round-robin SOC0 converts first then SOC1
 AdcRegs.ADCSOC0CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
 AdcRegs.ADCSOC1CTL.bit.ACQPS  = 6; //set SOC1 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
 EDIS;
}


ADC 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 AdcChanSelect(Channel);

 //Force start of conversion on SOC0
 AdcRegs.ADCSOCFRC1.all = 0x01;

 //Wait for end of conversion.
 while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){}  //Wait for ADCINT1
 AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;        //Clear ADCINT1

    asm(" RPT #11 || NOP");
    return (AdcResult.ADCRESULT0);
}



TMS320F28069 EVM ADC테스트 동영상
[EXP-DSP EVM]  ADC0에 연결되어 있는 VR을 가변하여 ADC값을 측정하고 이값을 TFT-LCD에 출력하는  테스트를 해 보았다.



Posted by nexp

댓글을 달아 주세요

[MODULE]/AD/DA2011. 1. 12. 17:31

[ADS8320] 16bit ADC테스트

[ADS8320] 16bit ADC테스트



모터 가속도 측정 장치 개발 프로젝트에 적용한 16bit ADC중 저렴하면서 정밀한 AD8320을 테스트 해 보았다.
노이즈 레벨도 적은것 같고 상당히 안정적이다.

AD8320 SPI 타이밍도






AD8320 테스트 코드

unsigned int AD8320_Read()
{
     :
  AD8320_CS0_ASSERT();

  byte0 = AD8320_SPI_READ(0);
  byte1 = AD8320_SPI_READ(0);
  byte2 = AD8320_SPI_READ(0);  
     
  byte0 = byte0 << 14;
  byte1 = byte1 << 6;
  byte2 = byte2 >> 2;

  adc_data = (byte0 | byte1 | byte2);

  AD8320_CS0_DEASSERT();

  return adc_data;
}


ADC테스트 결과
STM32 + AD8320 보드를 이용하여 USB로 16bit ADC데이터 전송하여 그래프로 출력해 보았다.



ECG데이터도 받아 보았다. 깨끗하게 로깅 되는것을 확인 할 수 있다.


Posted by nexp

댓글을 달아 주세요