บทที่ 4 วงจร ADC

Download Report

Transcript บทที่ 4 วงจร ADC

บทที่ 4
วงจร ADC
เทอดศักดิ์ ลิ่วหาทอง
สาขาวิชาอิเล็กทรอนิกส์
สถาบันเทคโนโลยีพระจอมเกล้ าเจ้ าคุณทหาร
ลาดกระบัง
Analog & Digital Signal
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
Analog Signal
Digital Signal
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
Digital Signal
Analog to Digital Converter
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
Sampling and Hold
Quantize
Sampling Rate Selection
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
Sampling Rate
fs >= 2 Bandwidth
Sampling Rate Selection
10100
10011
10010
10001
10000
01111
01110
01101
01100
01011
01010
01001
01000
00111
00110
00101
00100
00011
00010
00001
00000
vin
101
100
011
010
001
000
D0
D1
VRef+
Resolution
LSB = (Vref+-Vref-)/2k
VrefDk-1
ADC ชนิด Successive
Approximation
ADC ของ PIC18F8722
• PIC18F8722 มีวงจร Analog to Digital Converter
ขนาด 10 bit ทังหมด
้
16 วงจร (AN0-AN15)
ADC ของ PIC18F8722
ADC ของ PIC18F8722
ADC ของ PIC18F8722
Register ของ ADC
• PIC มี Register ที่เกี่ยวกับ ADC ทังหมด
้
5 ตัวคือ
1.
2.
3.
4.
5.
A/D Result High Register (ADRESH)
A/D Result Low Register (ADRESL)
A/D Control Register 0 (ADCON0)
A/D Control Register 1 (ADCON1)
A/D Control Register 2 (ADCON2)
ADRESH และ ADRESL
• ADRESH และ ADRESL เป็ น Register ที่ใช้ เก็บผลลัพธ์ของ
การแปลง ADC
ADCON0
• ADCON0 เป็ น Register ที่ใช้ กาหนดว่าจะให้ วงจร VAin ของ
วงจร ADC ต่อกับ AN ตัวที่เท่าใด (CHS3:0)
• สัง่ ให้ ADC เริ่มทางาน Go/DONE
• และตรวจสอบว่า ADC ทางานเสร็จหรื อยัง
ADON
ADCON0
ADCON1
• ADCON1 เป็ น Register ที่ใช้ กาหนดให้ AN ตัวใดทางานเป็ น
Analog Input Port หรื อทางานเป็ น Digital I/O Port
(PCFG3:0)
• และกาหนดให้ RA3/AN3 เป็ น VRef+ และ RA2/AN2 เป็ น
VRef- (VCFG1:0)
ADCON1
ADCON2
• ADCON2 เป็ น
Register ที่ใช้
กาหนด
Acquisition
Time ของวงจร
ADC
Acquisition Time
• สัญญาณ Analog จะถูกป้อนผ่านสวิทซ์ไปเข้ าที่ขา VAin ของวงจร
ADC
• จากนัน้ CHOLD จะถูกชาร์ จประจุให้ มีแรงดันเท่ากับขา VAin
Acquisition Time
• เพื่อให้ การแปลง ADC มีความถูกต้ อง จะต้ องให้ แรงดันของ CHOLD
เท่ากับ VAin
• เนื่องจาก VAin ชาร์ จประจุ CHOLD ผ่าน RS, RSS ดังนันจึ
้ งต้ องใช้
เวลาในการชาร์ จประจุ เราเรี ยกเวลาดังกล่าวว่า Acquisition
Time (TACQ)
Acquisition Time
• เราสามารถตังค่
้ า Acquisition Time ได้ จาก ACQT<2:0>
• เมื่อเซ็ทให้ GO/DONE = 1 PIC จะรอเป็ นเท่ากับ
Acquisition Time จากนันจึ
้ งเริ่มแปลง ADC
• และเมื่อแปลง ADC เสร็จแล้ ว GO/DONE จะเท่ากับ 0
ขั้นตอนการแปลง ADC
#include <p18f8722.h>
#include <adc.h>
#include <delays.h>
#include <timers.h>
ADCON0bits.ADON = 1;
while(1)
{
ADCON0bits.GO=1;
while(ADCON0bits.GO);
result = ADRES;
result >>=2;
if(result==0) result = 1;
#define NUMBER_OF_LEDS 8
#pragma code
//
int result;
int shift;
void main(void)
{
TRISAbits.TRISA0=1;
TRISD = 0;
PORTD = 0;
ADCON1 = 0b00001110;
ADCON2 = 0b10001010;
PORTD = result;
PORTD=1<<shift;
shift++;
shift %=8;
Delay10KTCYx(20);
}
}