TMS320F28069์˜ ๋‚ด๋ถ€ ADC๋Š” 12 ๋น„ํŠธ์˜ ํ•ด์ƒ๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. SAR ํƒ€์ž…์˜ ADC์ด๋ฉฐ, ADC์˜ ์ž…๋ ฅ๋‹จ์—๋Š” MUX์™€ S&H ํšŒ๋กœ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.

 

1) ๊ตฌ์„ฑ

TMS320F28069์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ADC๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ธ”๋Ÿญ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

์ž…๋ ฅ ์ฑ„๋„์ด A, B ํฌํŠธ๋กœ ๊ฐ๊ฐ 8 ์ฑ„๋„์”ฉ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์„œ ์ž…๋ ฅ์ฑ„๋„์€ ์ตœ๋Œ€ 16๊ฐœ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ ๋ฒ”์œ„๋Š” 0V ~ 3.3V๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. 

 

์ž…๋ ฅ๋œ ์‹ ํ˜ธ๊ฐ€ ๋‹ค์Œ์œผ๋กœ ๋งŒ๋‚˜๋Š” ๋ธ”๋Ÿญ์€ MUX์ด๋‹ค. ๊ฐ ํฌํŠธ๋ณ„๋กœ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ, 8์ฑ„๋„ ์ž…๋ ฅ ํ›„ 1์ฑ„๋„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์ด๋•Œ CHSEL ๋น„ํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ž…๋ ฅ ์ฑ„๋„์„ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

CHSEL ๋น„ํŠธ๋Š” ADCSOCxCTL ๋ ˆ์ง€์Šคํ„ฐ์˜ 6~9๋ฒˆ ๋น„ํŠธ์ด๋‹ค. 4๋น„ํŠธ ์ค‘ ์ƒ์œ„ ๋น„ํŠธ์ธ 9๋ฒˆ ๋น„ํŠธ๋Š” ํฌํŠธ ์„ ํƒ ๋น„ํŠธ์ด๊ณ , ๋‚˜๋จธ์ง€ 3๋น„ํŠธ๋Š” ์ฑ„๋„ ์„ ํƒ ๋น„ํŠธ์ด๋‹ค. ์ด๋•Œ ADCSAMPLEMODE ๋ ˆ์ง€์Šคํ„ฐ์˜ SIMULENx ๋น„ํŠธ๋“ค๋กœ ์ˆœ์ฐจ์  ์ƒ˜ํ”Œ๋ง ๋ชจ๋“œ์™€ ๋™๊ธฐ ์ƒ˜ํ”Œ๋ง ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ปจ๋ฒ„์ „ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

ADCSOCxCTL ๋ ˆ์ง€์Šคํ„ฐ

 

 

 

ADC์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ ํŠธ๋ฆฌ๊ฑฐ๋œ SOC๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋‹จ์ผ ๋ณ€ํ™˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

SOC๋Š” Start Of Conversion์ด๋‹ค.

 

์ˆœ์ฐจ ์ƒ˜ํ”Œ๋ง์€ ์ˆœ์„œ ์ œํ•œ ์—†์ด a์ฑ„๋„๊ณผ b์ฑ„๋„์„ ๋ชจ๋‘ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ ์ƒ˜ํ”Œ๋ง ๋ชจ๋“œ ์ง€์›์˜ ๋ถ€์‚ฐ๋ฌผ์€ ์Œ์„ ์ด๋ฃฌ ๋™์‹œ ์ฑ„๋„์˜ ์ƒ˜ํ”Œ๋ง ์ปคํŒจ์‹œํ„ฐ๋„ ์›ํ•˜๋Š” ์ˆœ์ฐจ ์ƒ˜ํ”Œ๋ง ACQPS์ฐฝ๊ณผ ๋™์‹œ์— ํ•ด๋‹น ์ž…๋ ฅ์— ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

ADC๋Š” ํŽ˜์–ด๋ง๋œ ์ฑ„๋„์˜ ์ƒ˜ํ”Œ์„ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.(๋™์‹œ ์ƒ˜ํ”Œ๋ง ๋ชจ๋“œ๋Š” ์„น์…˜ 8/6์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.)

 

 

 

ADC ์„ธํŒ… ๊ฒ€ํ† 

    EALLOW;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;  // Enable non-overlap mode:1
    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;    // trips after AdcResults latch:1
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;      // Reference select, External : 1, Internal : 0

 

ADCCTL2 ๋ ˆ์ง€์Šคํ„ฐ์˜ 1๋ฒˆ ๋น„ํŠธ์ธ ADCNONOVERLAP์€ ์ƒ˜ํ”Œ์˜ ์˜ค๋ฒ„๋žฉ ํ—ˆ์šฉ์— ๋Œ€ํ•œ ๋น„ํŠธ์ด๋‹ค.

 

ADCCTL1 ๋ ˆ์ง€์Šคํ„ฐ์˜ 2๋ฒˆ ๋น„ํŠธ์ธ INTPULSEPOS๋Š” ๋ญ์ง€

0 : ADC๊ฐ€ ๋ณ€ํ™˜์„ ์‹œ์ž‘ํ•  ๋•Œ INT ํŽ„์Šค ์ƒ์„ฑ ๋ฐœ์ƒ (์ƒ˜ํ”Œ๋ง๋œ ์‹ ํ˜ธ์˜ ์ƒ˜ํ”Œ ํŽ„์Šค์˜ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ์—์ง€)

1 : INT ํŽ„์Šค ์ƒ์„ฑ์€ ADC ๊ฒฐ๊ณผ๊ฐ€ ๊ฒฐ๊ณผ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ž˜์นญ๋˜๊ธฐ 1์ฃผ๊ธฐ ์ „์— ๋ฐœ์ƒํ•œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ์ƒ์„ฑ ์œ„์น˜? 0์ด๋ฉด ์ปจ๋ฒ„์ „์‹œ ๋ฐœ์ƒ์ด๊ณ  1์ด๋ฉด ์ปจ๋ฒ„์ „ ํ›„ ๊ฒฐ๊ณผ ๋ ˆ์ง€์Šคํ„ฐ์— ์˜ฎ๊ธฐ๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๊ณ ?

 

ADCCTL1 ๋ ˆ์ง€์Šคํ„ฐ(์œ„)์˜ 3๋ฒˆ ๋น„ํŠธ์ธ ADCREFSEL์€ ADC ๋ ˆํผ๋Ÿฐ์Šค ์ „์••์„ ๋‚ด๋ถ€์šฉ์„ ์“ธ ๊ฒƒ์ธ์ง€ ์™ธ๋ถ€์šฉ์„ ์“ธ ๊ฒƒ์ธ์ง€ ์„ ํƒํ•˜๋Š” ๋น„ํŠธ์ด๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค ์ „์••์„ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฒƒ์„ ์“ธ ๊ฒƒ์ธ์ง€ ์™ธ๋ถ€์— ์ถ”๊ฐ€ํ•œ ๊ฒƒ์„ ์“ธ ๊ฒƒ์ธ์ง€ ์ •ํ•˜๋Š” ์„ธํŒ… ๋น„ํŠธ์ด๋‹ค.

ํ•ด๋‹น ๋น„ํŠธ๋ฅผ '0'์œผ๋กœ ์„ธํŒ…ํ•˜๋ฉด ๋‚ด๋ถ€ ๋ฐด๋“œ์บก ๋ ˆํผ๋Ÿฐ์Šค ํšŒ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์™ธ๋ถ€ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋น„ํŠธ๋ฅผ '1'๋กœ ์„ธํŒ…ํ•˜๋ฉด 19๋ฒˆ ํ•€์ธ ADCINA0 ์ฑ„๋„์„ VREFHI๋กœ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ADCINA0 ์ฑ„๋„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์™ธ๋ถ€ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ์šฉ์‹œ GND๋Š” 21๋ฒˆ VSS๋ฅผ VREFLO๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

    //-------- Board Temperature: ADCINT1 -> EOC0 -> SOC0 -> ADCINA6 -----------------
    AdcRegs.INTSEL1N2.bit.INT1E     = 1;    // Enabled ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT  = 0;    // Disable ADCINT1 Continuous mode
    AdcRegs.INTSEL1N2.bit.INT1SEL   = 0;    // setup EOC0 to trigger ADCINT1
    AdcRegs.ADCSOC0CTL.bit.CHSEL    = 6;    // set SOC0 channel select to ADCINA6
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 10;   // set SOC0 start trigger on EPWM3B, 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.ADCINTSOCSEL1.bit.SOC0  = 3;    //2017.07.06

INTSELxNy ๋ ˆ์ง€์Šคํ„ฐ์˜ 5๋ฒˆ ๋น„ํŠธ๋Š” ADC ์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™” ๋น„ํŠธ์ด๋‹ค.

 

๋™์ผ ๋ ˆ์ง€์Šคํ„ฐ์˜ 6๋ฒˆ ๋น„ํŠธ๋Š” ADCINTFLG ๋ ˆ์ง€์Šคํ„ฐ์˜ ADCINTx ํ”Œ๋ž˜๊ทธ๊ฐ€ ํด๋ฆฌ์–ด ๋˜์ง€ ์•Š์•„๋„ EOC ํŽ„์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ADC ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋น„ํŠธ์ด๋‹ค.

ADCINTx ํ”Œ๋ž˜๊ทธ(ADCINTFLG ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ์Œ)๊ฐ€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ง€์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๋” ์ด์ƒ์˜ ADCINTx ํŽ„์Šค๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ADCINTx ํŽ„์Šค๋Š” ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ์˜ ํด๋ฆฌ์–ด ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด EOC ํŽ„์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

EOC ํŽ„์Šค๋Š” ์•„๋ž˜์˜ INTSELxNy ๋ ˆ์ง€์Šคํ„ฐ์˜ 8~12๋ฒˆ ๋น„ํŠธ ์„ธํŒ…์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ADCSOCxCTL ๋ ˆ์ง€์Šคํ„ฐ์˜ 6~9๋ฒˆ ๋น„ํŠธ๋Š” SOC ์ฑ„๋„ ์„ ํƒํ•˜๋Š” ๋น„ํŠธ๋“ค์ด๋‹ค. SOCx๊ฐ€ ADC์— ์˜ํ•ด ์ˆ˜์‹ ๋  ๋•Œ ๋ณ€ํ™˜๋  ์ฑ„๋„์„ ์„ ํƒํ•œ๋‹ค.

 

๋™์ผ ๋ ˆ์ง€์Šคํ„ฐ์˜ 11~15๋ฒˆ ๋น„ํŠธ์ธ TRIGSEL์€ SOC ํŠธ๋ฆฌ๊ฑฐ ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋น„ํŠธ์ด๋‹ค.

 

SOCx์— ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋ถ€์—ฌ๋˜๋ฉด ์‹œ์ž‘ํ•œ๋‹ค. ๋ณ€ํ™˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ADCSOCFLG1 ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๊ฐ SOCx ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•  ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.



  ์ด ์„ค์ •์€ ADCINTSOCSEL1 ๋˜๋Š” ADCINTSOCSEL2 ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ SOCx ํ•„๋“œ์— ์˜ํ•ด ์žฌ์ •์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—๋„ ๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ์˜ 0~5๋ฒˆ ๋น„ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ACQPS๋Š” 

SOCx ํš๋“ ํ”„๋ฆฌ์Šค์ผ€์ผ. SOCx์˜ ์ƒ˜ํ”Œ ๋ฐ ํ™€๋“œ ์œˆ๋„์šฐ๋ฅผ ์ œ์–ดํ•œ๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ๋ง์ด๊ณ ?

 

    EPwm3Regs.ETSEL.bit.SOCBEN = 1;         // SOCB ET Enable
    EPwm3Regs.ETSEL.bit.SOCBSEL = 2;        // SCCB Select
    EPwm3Regs.ETPS.bit.SOCBPRD = 1;         // SOCB ET period
    EPwm3Regs.TBCTL.bit.CTRMODE = 0;        // Count mode: Up-count
    EPwm3Regs.TBCTL.bit.HSPCLKDIV = 1;      // TBCLK = [SYSCLKOUT / ((HSPCLKDIV*2) * 2^(CLKDIV))]
    EPwm3Regs.TBCTL.bit.CLKDIV = 1;         // TBCLK = [150MHz / (2*2)] = 37.5MHz
    EPwm3Regs.TBPRD = 37499;                // TBPERIOD = (TBPRD+1)/TBCLK = 37500/37.5MHz = 1us(1KHz)
    EPwm3Regs.TBCTR = 0x0000;               // TB count initial
    EDIS;

ETSEL ๋ ˆ์ง€์Šคํ„ฐ์˜ 15๋ฒˆ ๋น„ํŠธ์ธ SOCBEN์€ EPWMxSOCB ํŽ„์Šค์˜ ํ™œ์„ฑํ™” ํ•€์ด๋‹ค.

 

๋™ ๋ ˆ์ง€์Šคํ„ฐ์˜ 12~14๋ฒˆ ๋น„ํŠธ์ธ SOCBSEL์€ EPWMxSOCB์˜ ์˜ต์…˜ ์„ ํƒ ๋น„ํŠธ์ด๋‹ค.

2๋กœ ์„ธํŒ…ํ•˜๋ฉด TBCTR๊ณผ TBPRD๋Š” ๊ฐ™๋‹ค. (์นด์šดํ„ฐ์™€ ์ฃผ๊ธฐ)

 

ETPS ๋ ˆ์ง€์Šคํ„ฐ์˜ 12~13๋ฒˆ ๋น„ํŠธ์ธ SOCBPRD๋Š” ePWM ADC ๋ณ€ํ™˜ ์‹œ์ž‘ B ์ด๋ฒคํŠธ(EPWMxSOCB) ์ฃผ๊ธฐ ์„ ํƒ ๋น„ํŠธ์ด๋‹ค.

์ด ๋น„ํŠธ๋Š” EPWMxSOCB ํŽ„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š” ์„ ํƒ๋œ ETSEL[SOCBSEL] ์ด๋ฒคํŠธ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ƒ์„ฑํ•˜๋ ค๋ฉด ํŽ„์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ETSEL[SOCBEN] = 1). ์ด์ „ ๋ณ€ํ™˜ ์‹œ์ž‘(ETFLG[SOCB] = 1)์—์„œ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๋”๋ผ๋„ SOCB ํŽ„์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. SOCB ํŽ„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ETPS[SOCBCNT] ๋น„ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์ง€์›Œ์ง„๋‹ค.

 

TBCTL ๋ ˆ์ง€์Šคํ„ฐ์˜ 0~1๋ฒˆ ๋น„ํŠธ์ธ CTRMODE๋Š” ์นด์šดํ„ฐ์˜ ์ฆ๊ฐ€, ๊ฐ์†Œ ๋“ฑ์„ ์„ค์ •ํ•˜๋Š” ๋น„ํŠธ์ด๋‹ค.

 

๋™์ผ ๋ ˆ์ง€์Šคํ„ฐ์˜ 7~9๋ฒˆ ๋น„ํŠธ์ธ HSPCLKDIV๋Š” ํƒ€์ž„ ๋ฒ ์ด์Šค ํด๋Ÿญ ์„ธํŒ…์„ ์œ„ํ•œ ๋น„ํŠธ์ด๋‹ค. ์•„๋ž˜ CLKDIV ๋น„ํŠธ๋„ ํ•จ๊ป˜ ๋ณด์ž.

 

์—ฌ๊ธฐ์„  SYSCLKOUT์ด 90MHz์ด๊ณ  HSPCLKDIV๋Š” 1๋กœ ์„ธํŒ…ํ•˜์—ฌ 2์ด๊ณ , CLKDIV๋Š” 1๋กœ ์„ธํŒ…ํ•˜์—ฌ 2์ด๋‹ค. ํƒ€์ž„ ๋ฒ ์ด์Šค ํด๋Ÿญ(TBCLK)์€ 90MHz / ( 2 x 2 )๋กœ 22.5MHz์ด๋‹ค. ์œ„ ์ฃผ์„์—๋Š” ์ž˜๋ชป ์“ด ๋‚ด์šฉ์ธ๋“ฏ ํ•˜๋‹ค.

 

TBPRD ๋ ˆ์ง€์Šคํ„ฐ๋Š” 0~15๋ฒˆ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ ํƒ€์ž„ ๋ฒ ์ด์Šค ์ฃผ๊ธฐ๋ฅผ ์„ธํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๋น„ํŠธ์ด๋‹ค. ์ด๊ฑธ๋กœ PWM์˜ ์ฃผํŒŒ์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.

TBCTL[PRDLD]๊ฐ€ 0์ด๋ฉด ์‰๋„์šฐ๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ณ  ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์‰๋„์šฐ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ด๋™ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ํ™œ์„ฑ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์นด์šดํ„ฐ๊ฐ€ 0์ผ ๋•Œ ์‰๋„์šฐ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋กœ๋“œ๋œ๋‹ค.

 

TBCTL[PRDLD]๊ฐ€ 1์ด๋ฉด ์‰๋„์šฐ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ๋ชจ๋“  ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ๊ฐ€ ํ™œ์„ฑ ๋ ˆ์ง€์Šคํ„ฐ์ธ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ง์ ‘ ์ด๋™ํ•œ๋‹ค.

 

์œ„ ๋ ˆ์ง€์Šคํ„ฐ ์„ธํŒ…์€ ์•„๋ž˜์˜ TBCTL ๋ ˆ์ง€์Šคํ„ฐ์˜ 3๋ฒˆ ๋น„ํŠธ์ธ PRDLD ์„ค์ •์— ๋”ฐ๋ผ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

 

 

TBCTR ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํƒ€์ž„ ๋ฒ ์ด์Šค ์นด์šดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค. 0~15๋ฒˆ ๋น„ํŠธ๋กœ ์นด์šดํ„ฐ๋ฅผ ์„ธํŒ…ํ•˜๊ฑฐ๋‚˜ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋น„ํŠธ์— ๊ธฐ๋กํ•˜๋ฉด ํ˜„์žฌ ํƒ€์ž„๋ฒ ์ด์Šค ์นด์šดํ„ฐ ๊ฐ’์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋Š” ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฆ‰์‹œ ๋ฐœ์ƒํ•˜๋ฉฐ, ์“ฐ๊ธฐ๋Š” ํƒ€์ž„๋ฒ ์ด์Šค ํด๋Ÿญ(TBCLK)๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์Œ์˜ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ryuss2&logNo=80184085464 

 

 

 

 

#pragma CODE_SECTION(Isr_ADC,"ramfuncs")
interrupt void Isr_ADC(void)
{
    temp0 = AdcResult.ADCRESULT0; //board temperature
    temp1 = AdcResult.ADCRESULT1; //dc current
    temp2 = AdcResult.ADCRESULT2; //dc voltage

    ADC_buffer1[ADC_cnt1] = AdcResult.ADCRESULT0 >> 1;
    ADC_buffer2[ADC_cnt2] = AdcResult.ADCRESULT1 >> 1;
    ADC_buffer3[ADC_cnt3] = AdcResult.ADCRESULT2 >> 1;
    ADC_buffer4[ADC_cnt4] = Read_Ext_ADC();

    ADC_cnt1 == BUFFER_LENGTH1 - 1 ? ADC_cnt1 = 0, Buffer_filled1 = 1 : ADC_cnt1++;
    ADC_cnt2 == BUFFER_LENGTH2 - 1 ? ADC_cnt2 = 0, Buffer_filled2 = 1 : ADC_cnt2++;
    ADC_cnt3 == BUFFER_LENGTH3 - 1 ? ADC_cnt3 = 0, Buffer_filled3 = 1 : ADC_cnt3++;
    ADC_cnt4 == BUFFER_LENGTH4 - 1 ? ADC_cnt4 = 0, Buffer_filled4 = 1 : ADC_cnt4++;

    AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;     // Clear ADCINT1 flag reinitialize for next SOC
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
}

ADCINTFLGCLR ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ADC ์ธํ„ฐ๋ŸฝํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ํด๋ฆฌ์–ดํ•ด์ฃผ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค. ํด๋ฆฌ์–ดํ•˜๊ณ ์ž ํ•˜๋Š” ๋น„ํŠธ์— 1์„ ์จ์ฃผ๋ฉด ๋œ๋‹ค.

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."