Professional Documents
Culture Documents
Chương 5 BỘ CHUYỂN ĐỔI TƯƠNG TỰ SỐ - 6 tiết
Chương 5 BỘ CHUYỂN ĐỔI TƯƠNG TỰ SỐ - 6 tiết
Trong các ứng dụng đo lường và điều khiển bằng vi điều khiển bộ chuyển đổi tương tự-số
(ADC) là một thành phần rất quan trọng. Dữ liệu trong thế giới của chúng ta là các dữ liệu
tương tự (analog). Ví dụ nhiệt độ không khí buổi sáng là 26oC và buổi trưa là 32oC, giữa hai
mức giá trị này có vô số các giá trị liên tục mà nhiệt độ phải “đi qua” có thể là 30.12oC, đại
lượng nhiệt độ như thế gọi là một đại lượng tương tự. Trong khi đó, rõ ràng vi điều khiển là
một thiết bị số (digital), các giá trị mà một vi điều khiển có thể thao tác là các con số rời rạc vì
thực chất chúng được tạo thành từ sự kết hợp của hai mức 0 và 1. Ví dụ chúng ta muốn dùng
một thanh ghi 8 bit trong vi điều khiển để lưu lại các giá trị nhiệt độ từ 0oC đến 100oC, như
chúng ta đã biết, một thanh ghi 8 bit có thể chứa tối đa 256 (28) giá trị nguyên từ 0 đến 255,
như thế các mức nhiệt độ không nguyên như 30.12oC sẽ không được ghi lại. Nói cách khác,
chúng ta đã “số hóa” (digitalize) một dữ liệu analog thành một dữ liệu digital. Quá trình “số
hóa” này thường được thực hiện bởi một thiết bị gọi là “bộ chuyển đổi tương tự - số hay đơn
giản là ADC (Analog to Digital Converter).
Có rất nhiều phương pháp chuyển đổi ADC khác nhau nhưng cùng bản chất. Phương pháp
dể hình dung nhất là phương pháp chuyển đổi trực tiếp. Các bộ chuyển đổi ADC theo phương
pháp này được cấu thành từ một dãy các bộ so sánh (opamp), các bộ so sánh được mắc song
song và được kết nối trực tiếp với tín hiệu analog cần chuyển đổi. Một điện áp tham chiếu
(reference) và một mạch chia áp được sử dụng để tạo ra các mức điện áp so sánh khác nhau
cho mỗi bộ so sánh
Vo4
Vo3
Vin
Vo2
Vo1
Vo4 Vo3 Vo2 Vo1 Giá trị nhị phân Giá trị thập phân
0 0 0 0 000 0
0 0 0 1 0001 1
0 0 1 1 010 2
0 1 1 1 011 3
1 1 1 1 100 4
Nếu mạch điện có 4 bộ so sánh, ngõ ra digital sẽ có 5 mức giá trị. Tương tự nếu mạch điện
có 7 bộ so sánh thì sẽ có 8 mức giá trị có thể ở ngõ ra digital, khoảng cách giữa các mức tín
hiệu trong trường hợp 8 mức sẽ nhỏ hơn trường hợp 4 mức. Nói cách khác, mạch chuyển đổi
với 7 bộ so sánh có giá trị digital ngõ ra “mịn” hơn khi chỉ có 4 bộ, độ “mịn” càng cao tức độ
phân giải (resolution) càng lớn.
Độ phân giải được dùng để chỉ số bit cần thiết để chứa hết các mức giá trị digital ngõ ra.
Trong trường hợp có 8 mức giá trị ngõ ra, chúng ta cần 3 bit nhị phân để mã hóa hết các giá trị
này, vì thế mạch chuyển đổi ADC với 7 bộ so sánh sẽ có độ phân giải là 3 bit. Một cách tổng
quát, nếu một mạch chuyển đổi ADC có độ phân giải n bit thì sẽ có 2n mức giá trị có thể có ở
ngõ ra digital.
Để tạo ra một mạch chuyển đổi ADC có độ phân giải n bit, chúng ta cần đến 2n-1 bộ so
sánh. Độ phân giải liên quan mật thiết đến chất lượng chuyển đổi ADC, việc lựa chọn độ phân
giải phải phù hợp với độ chính xác yêu cầu và khả năng xử lý của bộ điều khiển.
5.2. Sơ đồ khối ADC
ADC của PIC16F887 có khả năng chuyển đổi được 14 kênh ngõ vào, độ phân giải 10 bit,
kết quả 10 bit được lưu giữ trong 2 thanh ghi 8 bit là ADRESH và ADRESL
5.3. Cấu hình của ADC và các bit, thanh ghi liên quan
5.3.1. Cấu hình ngõ vào
ADC là bộ chuyển đổi tín hiệu tương tự, khi sử dụng chức năng này thì các kênh tương tự
ngõ vào không còn là I/O số nữa. Thiết lập chức năng tương tự bằng cách set ANS_bit tương
ứng, cấu hình tương tự là ngõ vào bằng cách set TRISxy tương ứng
0
Số
Định dạng canh trái nếu cho ADFM_bit bằng 0, canh phải nếu cho ADFM_bit bằng 1. Kết
quả chuyển đổi là kết quả tổng hợp từ 2 byte trên. Để cho dễ tính toán, thường phép canh phải
được dùng, khi đó kết quả sẽ là ADRESH x 256 + ADRESL
5.4. Hoạt động chuyển đổi ADC
Hoạt động chuyển đổi ADC được thực hiện như sau: tín hiệu tương tự được đưa vào ngõ
vào bộ AD, bộ AD sẽ hoạt động chuyển đổi nếu được cho phép chuyển đổi, sau một thời gian
sẽ chuyển đổi xong và kết quả được lưu trong 2 thanh ghi theo như đã định dạng ở trên. Đọc
kết quả từ 2 thanh ghi ta có được kết quả chuyển đổi
Người lập trình có thể cấu hình và đọc kết quả chuyển đổi theo các bước sau:
*Cấu hình ban đầu:
- Cấu hình chân cần chuyển đổi là ngõ vào TRISxy, chọn chức năng tương tự ANSx
- Chọn điện áp tham chiếu VCFGx_bit
- Canh lề kết quả ADFM_bit
- Có thể hoặc không cấu hình ngắt chuyển đổi ADC (ADIF_bit, ADIE_bit)
- Cho phép cấp nguồn cho ADC (ADON_bit)
*Đọc kết quả:
- Chọn kênh cần chuyển đổi (CHS<3:0>
- Bật GO_DONE_bit để thực hiện quá trình chuyển đổi ADC
- Đợi cho đến khi chuyển đổi xong GO_DONE_bit sẽ tự động bị xóa, dựa trên tín hiệu này
để đọc kết quả từ 2 thanh ghi chứa kết quả. Hoặc nếu có sử dụng ngắt, khi GO_DONE_bit bị
xóa sẽ tự động bật cờ ngắt và kết quả sẽ được đọc ở chương trình ngắt
Ví dụ cấu hình và đọc kết quả ADC trên kênh AN0 (RA0)
void main() {
TRISA0_BIT=1;ANS0_BIT=1;
VCFG1_BIT=0;VCFG0_BIT=0;
ADFM_BIT=1;
ADON_BIT=1;
while(1){
CHS3_BIT=0;CHS2_BIT=0;CHS1_BIT=0;CHS0_BIT=0;
GO_DONE_BIT=1;
while(GO_DONE_BIT==1){}
kq= ADRESH x 256 + ADRESL;
}
}
5.5. Ngắt chuyển đổi ADC
Như cách chuyển đổi ở ví dụ trên, để đọc được kết quả chuyển đổi phải chờ 1 thời gian
trong lệnh while(GO_DONE_BIT==1){} cho đến khi GO_DONE_BIT=0 như vậy sẽ lãng phí
thời gian trong khi vòng lặp vô tận while(1) có thể còn và làm được nhiều việc phía sau nữa.
Nếu sử dụng ngắt để đọc kết quả sẽ tránh được sự lãng phí không mong muốn này.
5.6. Bài tập ứng dụng
5.6.1. Bài tập 1
Cho mạch điện kết nối vào AN1 như hình vẽ
Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC ra PORTD và PORTC
5.6.2. Bài tập 2
Cho mạch điện kết nối vào AN1 như hình vẽ bài tập 1
Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC ra LCD 16x2
5.6.3. Bài tập 3
Cho mạch điện kết nối vào AN1 như hình vẽ
Viết chương trình đọc kết quả và hiển thị chuyển đổi ADC trên kênh AN1 và AN8 ra LCD
16x2
5.6.4. Bài tập 4
Cho mạch điện kết nối vào AN1 như hình vẽ
Viết chương trình đọc kết quả chuyển đổi ADC và hiển thị giá trị điện áp đo được trên AN1
ra LCD 16x2
5.6.5. Bài tập 5
Cho mạch kết nối như hình, cảm biến cần đo có giá trị điện áp ra từ 0V đến 2.5V được đưa
vào chân RB3
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo giá trị điện áp trên chân RB3 và hiển thị ra LCD 16x2
5.6.6. Bài tập 6
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo và hiển thị nhiệt độ ra LCD 16x2
5.6.7. Bài tập 7
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5. Yêu cầu lập trình đo khoảng nhiệt độ từ
20 đến 40 oC
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC
Lập trình đo và hiển thị nhiệt độ ra LCD 16x2
5.6.8. Bài tập 8
Cho mạch kết nối như hình, cảm biến LM35 cần đo có giá trị điện áp ra từ 0V đến 1V tương
ứng nhiệt độ từ 0 đến 100oC được đưa vào chân RB5, 1 cảm biến khác đo độ ẩm có điện áp ra
từ 0V đến 5V tương ứng độ ẩm từ 0%RH đến 100%RH được mắc vào RA0. Yêu cầu lập trình
đo khoảng nhiệt độ từ 20 đến 40 oC, đo độ ẩm từ 0%RH đến 100%RH
Tìm điện áp tham chiếu Vrefl và Vrefh cho bộ chuyển đổi ADC tương ứng mỗi cảm biến để
có kết quả đo chính xác nhất
Lập trình đo và hiển thị nhiệt độ và độ ẩm ra LCD 16x2