Tải bản đầy đủ (.pdf) (15 trang)

Tài liệu Bộ ADC 1.3.18 B doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (701.17 KB, 15 trang )


Bộ ADC

1.3.18 Bộ chuyển đổi Analog sang Digital

Các đặc trưng cơ bản:
• Độ phân giải 10-bit
• Độ chình xác tuyệt đối: ±2 LSB
• Thời gian chuyển đổi 13 - 260 µs
• Lên tới 15 kSPS khi độ phân giải cao nhất
• Phạm vi điện áp đầu vào: 0 - V CC
• Điện áp tham chiếu 2.56V có thể lựa chọn
• Ngắt khi chuyển đổi hoàn thành
• Loại bỏ nhiễu trong chế độ ngủ


1.ADC (analog to digital converter)
Vi điều khiển AVR 8535 có một bộ biến đổi ADC tích hợp trong chip.
Có các đặc điểm:
Độ phân giải bit.
Sai số tuyến tính:0.5LSB.
Dộ chính xác +/-2LSB.
Thời gian chuyển đổi:65-260µs.
8 Kênh đầu vào có thể được lựa chọn.
Có hai chế độ chuyển đổi.
Có nguồn báo ngắt khi hoàn thành chuyển đổi.
Loại bỏ nhiễu trong chế độ ngủ.
Sơ đồ khối:

Bộ ADC



Từ sơ đồ khối ta có thể thấy:
Tám đầu vào của ADC là tám chân của PORTA và chúng được chọn thông qua
một MUX.
Để điều khiển hoạt động vào ra dữ liệu của ADC và CPU chúng ta có 3 thanh
ghi:ADMUX đây là thanh ghi điều khiển lựa chọn kênh đầu vào cho ADC. ADCSR
Đây là thanh ghi điều khiển và thanh ghi trạng thái của ADC. ADCD :Đây là thanh
ghi dữ liệu.
1.ADMUX: Multiplexer select register
Đây là thanh ghi điều khiển 8 bit:
Với 3 bit được định nghĩa là MUX2,MUX1,và MUX0.Ứng với các tổ hợp logic
ta có thể chọn kênh đầu vào.Cụ thể:
Chú ý: Nếu như ta thay đổi kênh trong thời điểm mà ADC đang chuyển đổi thì khi
quá trình chuyển đổi đã hoàn thành thì khên vào mới được thay đổi.
2.ADCSR :ADC control and status register
Đây là thanh ghi điều khiển và lưu trạng thái của ADC:
Bit 7-ADEN:ADC enable
Đây là bit điều khiển hoạt động của ADC.Khi bit này được set 1 thì ADC có thể
hoạt động và ngược lại.Nếu như ta ngừng hoạt động của ADC trong khi nó đang
chuyển đổi thì nó sẽ kết thúc quá trình chuyển đổi.Mặc dù chưa chuyển đổi xong.
Bit 6-ADSC: ADC start conversion

Bộ ADC

Trong chế độ chuyển đổi đơn thì bit này phải được set lên 1 để bắt đầu chuyển
đổi.Trong chế độ chuyển đổi tự do thì bit này cần được set lên 1 để bắt đầu lần
chuyển đổi đầu tiên.Bit này được giữ sốt trong quá trình chuyển đổi và được xóa
khi mà chuyển đổi xong.
Bit 5-ADRR :ADC Free Running select
Khi bit này được set thì ADC hoạt động theo chế độ chuyển đổi tự do. Đây là chế

độ mà ADC tự động lấy mẫu và chuyển đổi (khi nó được phép chuyển đổi)từ một
kênh đã định sẵn.Ki xóa bit này thì chế độ này lập tức ngừng hoạt động.
Bit 4-ADIF:ADC interrupt Flag
Bit này được set lên 1 bởi phần cứng khi mà quá trình chuyển đổi đã hoang thành
và thanh ghi dữ liệu đã được update.Bit này được xóa bằng phần cứng nhếu như
ngắt này được phép và được phục vụ.Hoặc nó có thể được xóa bằng cách ghi giá trị
logic “0”vào cờ này.Cụ thể khi ngắt bị cấm ta có thể sử dụng các lệnh sbi và cbi để
tác dụng lên bit này.
Bit 3-ADIE:ACD interrupt Enable
Nếu bit này set 1 và ngắt toàn cục được cho phép thì ngắt này được phép phục vụ
(Khi chuyển đổi xong dữ liệu).Và nếu bị xóa thì ngược lại.
Bit 2.1.0-ADPS2…ADPS0:Bit lựa chọn xung nhịp(Tốc độ)
Sơ qua về nguồn xung:Nguồn xung được lấy từ nguồn xung của VĐK (XTAL)và
được chia tần thông qua bộ chia tần:
Các bit ADSP có nhiệm vụ chọn số chia cho bộ chia tần theo bảng sau:
3.Thanh ghi dữ liệu ACDDR:
Đây là thanh ghi 16 bit và ta có thể truy nhập chúng như hai thanh ghi 8 bit với địa
chỉ và các bit tương ứng:
Khi khởi tạo chúng có giá trị 0.Sau khi chuyển đổi thì dữ liệu số được đưa vào
thanh ghi này.
4.Các chân đầu vào:
Các chân đầu vào của ADC là 8 chân của PORTA
Để định nghĩa một cổng là cổng vào cho ADC thì cổng đó phải được định nghĩa là
một cổng vào và loại bổ điện trở treo.
5.Nguyên tắc hoạt động và lập trình điều khiển:
ADC có nhiệm vụ chuyển đổi tín hiệu điện áp tương tự thành tín hiệu số có độ phân
giải 10 bit.Với giá trị nhỏ nhất của điện áp đặt ở chân AGND và giá trị cực đại của
điện áp tương tự được mắc vào chân AREF. Tám kênh tương tự đầu vào được chọn
lựa thông qua ADMUX và ADMUX này được điều khiển bởi thanh ghi ADMUX.
ADC này có thể hoạt động được ở hai chế độ. Đó là chuyển đổi đơn: chỉ chuyển đổi


Bộ ADC

một lần khi có lệnh chuyển đổi và chế độ tự chuyển đổi (Free mode) đây là chế độ
mà ADC tự động chuyển đổi khi được hoạt động và công việc chuyển đổi có tính
tuần hoàn (chỉ cần khởi động một lần).
ADC được phép hoạt động nhờ thiết lập bit ADEN. Quá trình chuyển đổi được bắt
đầu bằng việc ghi vào bit ADSC mức logic 1 và trong suốt quá trình chuyển đổi bit
này luôn được giữ ở mức cao. Khi quá trình chuyển đổi hoàn thành thì bit này được
xóa bằng phần cứng và cờ AIDF được bật lên.
Dữ liệu sau khi chuyển đổi được đưa ra thanh ghi dữ liệu ADCL và ADCH,
nhưng chú ý khi đọc dữ liệu từ hai thanh ghi này thì đọc ADCL trước rồi mới đọc
ADCH. Nếu đọc ADCH trước thì dữ liệu update có thể ghi đè lên ADCL (VĐK
nghĩ rằng đã đọc xong dữ liệu).
Điều khiển vào ra dữ liệu với ADC:
Các bước thực hiện:
Bước 1: Định nghĩa các cổng vào cho tín hiệu tương tự
Xóa bit tương ứng với chân đó trong thanh ghi DDAR. Sau đó loại bỏ điện trở treo
bằng chách xóa bit tương ứng ở thanh ghi PORTA.
Bước 2: Chọn kênh tương tự vào (chọn chân vào cho ADC) thông qua thanh ghi
ADMUX (có thể thay đổi trong quá trình hoạt động).
Bước2:Thiết lập các thông số cho ADC
Tốc độ chuyển đổi thông qua xung nhip chuyển đổi.
Chế độ chuyển đổi : đơn hoặc tự động.
Sử dụng ngắt hoặc không.
Bước3:Bắt đầu chuyển đổi và đọc dữ liệu.
Sau đây là hai Ví dụ sử dụng hai chế độ của ADC và dùng theo hai cách vào ra dữ
liệu: bằng ngắt và bằng chương trình.
VD: Đọc 20 byte dữ liệu (10 thông số từ ADC vào bộ nhớ RAM từ địa chỉ 0x065)
Cách 1:sử dụng vào ra bằng chương trình và chạy với chế độ chuyển đổi đơn, chọn

chân vào là chân PA0
; đoạn chương trình như sau:
.MACRO READ
;dọc 10 mẫu từ ADC
;thiết lập các thông số cho cổng
Cbi DDAR,0 ; Đăt pin PA0 thành lối vào.
Cbi PORTA,0 ;Loại điện trở treo.
;Chọn kênh vào cho ADC

Bộ ADC

ldi R16,0x00
Out ADMUX,R16 ;chọn kênh vào la ADC0
;Thiết lập ADC hoạt động không dùng ngắt chế độ chuyển đổi đơn
sbi ADCSR,7 ;cho phép hoạt động
cbi ADCSR,5
cbi ADCSR,3
cbi ADCSR,2 ;thiết lập tốc dộ
cbi ADCSR,1
cbi ADCSR,0
;Chuẩn bị chuyển đổi:
;Khởi tạo biến đếm chương trình.
Ldi R17,0x0a
;Khởi tạo con trỏ địa chỉ SRAM
Ldi XL,0x65
Ldi Xh,0x00


READ_ADC:
Cbi ADSR,4

Sbi ADSR,6 ;bat đầu chuyển đổi
Sbic ADSR,4
Rjmp READ_ADC
; đã có dữ liệu
In R18,ADCL
In R19,ACDH
Sts X+,R18
Sts X+,R19
Dec R17
Breq exit
Rjmp READ_ADC
Exit:
Nop
.ENDMACRO



Bộ ADC



























1.Yêu cầu:
Đo được nhiệt độ từ LM35 hiển thị lên LCD.
2.Lý thuyết:
Đối với ATMEGA 16L: 8 chân của PORTA sử dụng làm 8 kênh đầu vào ADC. Để sử dụng
tính năng ADC của Atmega 16L chúng ta cần phải thiết kế phần cứng của Vi điều khiển như sau :
* Chân AVCC chân này bình thường khi thiết kế mạch chúng ta đưa lên Vcc(5V) nhưng khi trong mạch
có sử dụng các kênh ADC của phần cứng thì chúng ta phải nối chân này lên Vcc qua 1 cuộn cảm nhằm
mục đích cấp nguồn ổn định cho các kênh (đầu vào) của bộ biến đổi.

Bộ ADC

* Chân AREF chân này cần cấp 1 giá trị điện áp ổn định được sử dụng làm điện áp tham chiếu, chính vì
vậy điện áp cấp vào chân này cần ổn định vì khi nó thay đổi làm giá trị ADC ở các kênh thu được bị trôi
(thay đổi ) không ổn định với 1 giá trị đầu vào chúng ta có công thức tính như sau:
ADCx=(V_INT*1024)/ AREF
chỉ dựa vào công thức chúng ta củng có thể thấy giá trị ADCx tỉ lệ thuận với điện áp vào V_INT. Giá trị

ADC thu được từ các kênh được lưu vào 2 thanh ghi ADCH và ADCL khi sử dụng chúng ta phải đọc
giá trị từ các thanh ghi này, khi sử dụng ở ché độ 8 bít thì chỉ lưu vào thanh ghi ADCL.
3.Mô tả:
Đầu ra của LM35 và chân 2 biến trở 1K trên Kit được nối vơi 2 jump chờ. Với AMEGA16L có 8
kênh ADC là chức năng thứ 2 của PORTA. Do đó để ADC ta dung dây nối 2 chân đó với 2 bit của
PORTA là bit 0 và bit 1

Theo datasheet LM35 thì cứ 10mV tương ứng với 1
0
C, ở 0
0
C điện áp ra là 0V, tương ứng với giá
trị ADC là 0. Với Vref=5V, giá trị của ADC từ 0 đến 256, lấy tròn 250 mức. Mỗi giá trị ADC ứng với
5V/250= 20 mV. Vậy 1 giá trị ADC ứng với 2
0
C. Muốn tăng độ phân giải ADC ta giảm Vref.
4.Thực hành: Các bước khởi tạo code như sau:
Trong tab ADC check vào ADC enable:

Bộ ADC


Khởi tạo LCD.

Cấu hình ADC.

Bộ ADC


Ta check vào Use 8 bít, để ADC trả về giá trị 8 bít, và ta ADC dùng ngắt check vào Interrupt, về

điện áp tham khảo AREF thì lấy điện áp của chân AREF của AVR được nối với 5V. Tần số ADC
tùy các bạn thích nhanh hoặc chậm chọn giá trị phù hợp. Trong box Automatically Scan Inputs các
bạn check vào Enabled. Vì chúng ta cần ADC 2 kênh, 1 kênh dùng biến trở để test ADC, một kênh
từ LM35 đấu với 2 bit 0 và 1 của PORTA do đó chọn First 0, Last 1.
Khởi tạo cho LCD vào PORTB như hình bên cạnh.
Chọn Generate, Save and Exit.
Đê hiển thị được một số bất kỳ lên LCD, trong thư viện hàm không có và ta phải tự viết hàm . Đầu
vào là một biến unsigned char, ta phải tách lấy hàng trăm, hàng chục, hàng đơn vị và đưa lần lượt
lên LCD.
Code như sau:

void lcd_putnum(unsigned char so,unsigned char x,unsigned char y)
{
unsigned char a,b,c;
a=so/100;
// lay fan tram
b=(so-100*a)/10;
// lay fan chuc
c=(so-100*a-10*b);
// lay hang don vi
lcd_gotoxy(x,y);
// ve vi tri x,y
lcd_putchar(a+48);
// day ra hang tram, ma ascii
lcd_putchar(b+48);
// day ra hang chuc, ma ascii
lcd_putchar(c+48);
// day ra hang don vi, ma ascii
}


Trong vòng while(1) trong hàm main ta viết như sau:

while (1)
{
// Place your code here
lcd_putnum(2*adc_data[1],0,0);
// dua gia tri ADC tu LM35*2= nhiet do
lcd_putnum(adc_data[0],0,1);
// dua gia tri ADC tu bien tro
delay_ms(3000);
// tre 3 s, cap nhat du lieu mot lan
};

Bộ ADC



Đo nhiệt độ bằng LM35 qua ADC thường có sai số và độ trôi, do đó ta cần hiệu chỉnh nhiệt độ bằng
cách so sánh với nhiệt kế.






Bộ ADC


1.Yêu cầu:
Điều khiển led đơn trên KIT AVR 03 bằng máy tính.

Đo kết quả ADC từ biến trở và cảm biến nhiệt LM35 hiển thị lên máy tính.
• Điều khiển led:
Tạo một Form bằng VB như sau:


Trong FORM có: 1 đối tượng picturebox chứa logo của DKS. Có 10 đối tượng button trong đó 8
đối tượng button Led1 Led8 là một mảng button có tên từ Command1(0) Command1(7). Muốn
tạo một mảng button ta chỉ việc lấy ra 8 đối tượng button và sửa tên tất cả chúng thành
Command 1. Hai button còn lại là Phản hồi và Exit. Có một textbox để hiển thị dữ liệu phản hồi.
Hoạt động của phần mềm như sau:
Khi nhấn vào button Led 1 thì truyền dữ liệu là 0x01 xuống cổng nối tiếp của PC, AVR nhận được
và đưa dữ liệu đó ra cổng của AVR để 1 led trên Kit sáng. Tương tự cho bấm các nút Led còn lại.
Đồng thời AVR gửi luôn giá trị vừa nhận được lên PC. Và khi bấm nút phản hồi thì dữ liệu đó hiện
ra trên Textbox. Khi nhấn nút Exit thì thoát khỏi phần mềm.
Thực hành:
Phần mềm trên VB Code như sau:
Private Sub Command1_Click(Index As Integer)
If Index = 0 Then
MSComm1.Output = Chr$(1)
End If
If Index = 1 Then
MSComm1.Output = Chr$(2)
End If
If Index = 2 Then

Bộ ADC

MSComm1.Output = Chr$(4)
End If
If Index = 3 Then

MSComm1.Output = Chr$(8)
End If
If Index = 4 Then
MSComm1.Output = Chr$(16)
End If
If Index = 5 Then
MSComm1.Output = Chr$(32)
End If
If Index = 6 Then
MSComm1.Output = Chr$(64)
End If
If Index = 7 Then
MSComm1.Output = Chr$(128)
End If
End Sub

Private Sub Command2_Click()
MSComm1.PortOpen = False
End
End Sub

Private Sub Command3_Click()
If MSComm1.Input = "" Then
Exit Sub
Else
Text1.Text = Asc(MSComm1.Input)
End If
End Sub

Private Sub Form_Load()

MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub

Firm ware:
Khởi tạo trong CodeVision AVR cho phép cổng nối tiếp hoạt động, PORT D là out put như các bài
trước đã học. Sau đó lập trình cho hàm main như sau:


Bộ ADC


Trong hàm main có sử dụng thêm một biến temp nên dĩ nhiên các bạn phải khai báo thêm biến đó ở
phía ngoài hàm main.
Nạp chương trình vào chip AVR
Kết nối dây cổng Com từ KIT và cổng Com máy tính và test kết quả.





Đo ADC từ biến trở và LM35.
Trên VB tạo ra một giao diện phần mềm như sau:

Bộ ADC


Form gồm có:
4 label để hiển thị như hình.

2 text box để hiển thị dữ liệu.
2 button: Thu du lieu và Thoat khỏi phần mềm.
Code trên VB như sau:
Private Sub Command1_Click()
If MSComm1.Input = "" Then
Exit Sub
Else
Text1.Text = Asc(MSComm1.Input)
Text2.Text = Asc(MSComm1.Input)
End If
End Sub

Private Sub Command2_Click()
MSComm1.PortOpen = False
End
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True

Bộ ADC

End Sub
Firm Ware:
Khởi tạo bằng CodeWinzard AVR cho cổng nối tiếp USART hoạt động, cho phép ADC hoạt
động(interrupt) như các bài trước sau đó viết code cho hàm main như sau:



Dịch nạp chương trình và test


×