Chuyển đổi dữ liệu tương tự Analog sang dữ liệu số Digital 2.. Chuyển đổi dữ liệu tương tự Analog sang dữ liệu số Digital : - Trong các ứng dụng đo lường và điều khiển bằng vi điều khiển
Trang 1TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA CƠ ĐIỆN
<=O=>
Báo cáo môn thực tập Kỹ thuật số :
Mạch mô phỏng chuyển đổi dữ liệu
từ Analog sang Digital (ADC)
sử dụng vi điều khiển PIC
GVHD : Ngô Văn Bình
Lớp 09CD111
Phùng Tấn Đức MSSV : 109000454 Phan Thanh Tuyến MSSV : 109000098
Trong báo cáo này gồm :
1 Chuyển đổi dữ liệu tương tự (Analog)
sang dữ liệu số (Digital)
2 Vi điều khiển PIC16F876A
3 Sơ đồ nguyên lý
4 Source
5 Ứng dụng ADC
Trang 21 Chuyển đổi dữ liệu tương tự (Analog) sang dữ liệu số (Digital) :
- 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 chính là các dữ liệu tương tự (analog)
- Ví dụ nhiệt độ không khí buổi sáng là 25oC 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ể đạt mức 32oC từ 25oC, đại lượng nhiệt độ như thế gọi là một đại lượng analog
- 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 255oC, như chúng ta đã biết, một thanh ghi 8 bit có thể chứa tối đa 256 giá trị nguyên từ 0 đến
255, như thế các mức nhiệt độ không nguyên như 28.123oC 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)
Trang 32 Vi điều khiển PIC16F876A :
Trong mạch này sử dụng các chân chức năng như sau :
1 MCLR (Reset)
5 AN3 (Analog 3)
9, 10 (Tạo xung Clock từ thạch anh cho VĐK, hoạt động tối đa
ở 20MHz)
21 INT (Ngắt ngoài)
20 VDD (5V)
8, 19 VSS (0V)
11->18 RC0 ->RC7 (Port C)
Trang 43 Sơ đồ Nguyên lý :
Nguyên lý hoạt động :
- Đây là mạch tạo xung analog bằng tay đưa vào chân AN3 ở mức thấp sử dụng biến trở VR 50K và xuất ra mức cao ở Port C dạng digital Port C sẽ hiển thị giá trị digital qua 8 LED LED sáng hiển thị giá trị 1 và tắt thể hiện giá trị 0 Các giá trị này từ 0 -> 255 (00000000 -> 11111111)
- Khi nhấn nút ngắt thì chân 21 (INT) sẽ nhận điện áp âm (ngắt mức thấp) và nhảy sang chương trình ngắt ngoài nháy LED, dịch LED từ phải sang trái và ngược lại
- Khi nhấn nút reset thì chân 1 (MCLR) sẽ nhận điện áp âm (reset mức thấp) và nhảy lại chương trình ban đầu
Trang 54 Source :
Đây là code chương trình của mạch viết bằng ngôn ngữ C
#include <16f876a.h>
#fuses hs
#device adc=8
#use delay(clock=12000000)
int a,b;
#INT_EXT
void dich_led_nhay_led()
{
set_tris_a(0xff);
set_tris_b(0xff);
set_tris_c(0x00);
while (1)
{
{
b=0xFF;
for(a=1;a<=8;a++)
{
output_c(b);
delay_ms(300);
b=b<<1;
}
}
{
for(a=0;a<=2;a++)
{
output_c(0x00);
delay_ms(300);
output_c(0xFF);
delay_ms(300);
}
}
{
Trang 6for(a=1;a<=8;a++)
{
output_c(b);
delay_ms(300);
b=b>>1;
}
}
for(a=0;a<=2;a++)
{
output_c(0x00);
delay_ms(300);
output_c(0xFF);
delay_ms(300);
}
output_c(0x00);
delay_ms(300);
output_c(0x0F);
delay_ms(300);
output_c(0x00);
delay_ms(300);
output_c(0xF0);
delay_ms(300);
output_c(0x00);
delay_ms(300);
output_c(0x55);
delay_ms(300);
output_c(0x00);
delay_ms(300);
output_c(0xAA);
delay_ms(300);
output_c(0x00);
delay_ms(300);
output_c(0x33);
delay_ms(300);
output_c(0x00);
delay_ms(300);
Trang 7delay_ms(300);
output_c(0x00);
delay_ms(300);
output_c(0x7E);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0xDB);
delay_ms(200);
output_c(0xE7);
delay_ms(200);
output_c(0xDB);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0x7E);
delay_ms(200);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0xDB);
delay_ms(200);
output_c(0xE7);
delay_ms(200);
output_c(0xDB);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0x7E);
delay_ms(200);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0xDB);
delay_ms(200);
output_c(0xE7);
Trang 8output_c(0xDB);
delay_ms(200);
output_c(0xBD);
delay_ms(200);
output_c(0x7E);
delay_ms(200);
output_c(0xFE);
delay_ms(300);
output_c(0xFD);
delay_ms(300);
output_c(0xFB);
delay_ms(300);
output_c(0xF7);
delay_ms(300);
output_c(0xEF);
delay_ms(300);
output_c(0xDF);
delay_ms(300);
output_c(0xBF);
delay_ms(300);
output_c(0x7F);
delay_ms(300);
output_c(0x7F);
delay_ms(300);
output_c(0xBF);
delay_ms(300);
output_c(0xDF);
delay_ms(300);
output_c(0xEF);
delay_ms(300);
output_c(0xF7);
delay_ms(300);
output_c(0xFB);
delay_ms(300);
output_c(0xFD);
delay_ms(300);
Trang 9delay_ms(300);
}
}
void main()
{
set_tris_a(0xff);
set_tris_b(0xff);
set_tris_c(0x00);
ext_int_edge(h_to_l);
enable_interrupts(int_ext);
enable_interrupts(global);
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(3);
delay_ms(10);
while (1)
{
a=read_adc();
for(b=1;b<=8;b++)
output_c(a);
}
}
5 Ứng dụng ADC :
- Dò line trong robot
- Đo nhiệt độ
- Điều khiển động cơ
-