You are on page 1of 14

Bộ chuyển đổ i tương tự số - ADC

ADC
Đặt vấn đề: Giả sử ta có 1 tín hiệu điện áp 2V làm thế nào để ta đo được hiệu điện thế này? Theo như
bài học GPIO ta được biệt GPIO chỉ có thể đo được tín hiệu điện áp 0v (ứng với mức logic 0), 3.3v
ứng với mức logic 1.

Chính vì lí do này mà người


Microcontroller
ta đã chế tạo ra bộ ADC. Bộ
ADC giúp chúng ta có thể
đo được 1 điện áp bất kì 2V
trong khoảng 0 -> 3.3V
ADC
ADC (Analog To Digital Converter) là bộ chuyển đổi từ tín hiệu tương tự
sang tín hiệu số.
ADC
  Các thông số của 1 bộ ADC:
• : Điện áp tham chiếu. Điện áp dung để làm mốc so sánh với điện
áp đầu vào cần đo (). 0<=<=

• Độ phân giải (n): là số bit dùng để chứa hết các giá trị sau khi
chuyển đổi của bộ ADC.

• Sample time (): thời gian lấy mẫu. Hay được xem như là tốc độ lấy
mẫu.
ADC

Đồ thị đặc tính Vôn - ADC


 𝑉 (Đại
𝑟𝑒𝑓 lượng đã biết) 4500 4096
(Đại lượng chưa biết) 4000
3500
  𝑉 𝑖𝑛
(Đại lượng đọc được)
3000
Bộ
Bộ ADC
ADC Value ADC 2500
2048

ADC
2000
1500 1241.21

 𝑛 (Đại lượng đã biết)


1000
500
0
0
0 0.5 1 1.5 2 2.5 3 3.5

Điện áp

 Điệnáp đầu vào Vin thay đổi từ 0 thì Value ADC = 0


Value ADC =
ADC
 Vídụ: Một bộ ADC có điện áp tham chiếu , độ phân giải 12 bit n = 12. Bộ
ADC chuyển đổi cho chúng ta được giá trị Value ADC = 300. Hỏi điện áp đầu
vào là bao nhiêu?

 Đáp án:
=
ADC TRONG STM32

:  bằ ng điện á p trên châ n VDDA.


Độ phân giải (n): 12bit (0 – 4095);
Sample time (): có thể lậ p trình đượ c.
Số bộ ADC: 2.
Số kênh ADC: 10 kênh, các kênh ở chân từ PA0 -> PA9
Các mode hoạ t độ ng củ a ADC:
• Single conversion mode: Trong chế độ này, ADC sẽ chỉ thự c hiện 1 chuyển đổ i
cho tớ i khi ngườ i dù ng cho phép chuyển đổ i tiếp.
• Continuous Conversion Mode: ở chế độ này, ADC sẽ ngay lậ p tứ c thự c hiển 1
chuyển đổ i khá c khi chuyển đổ i trướ c vừ a kết thú c.
• Scan Mode: Chế độ này đượ c sử dụ ng để quét 1 nhó m cá c kênh. 1 chuyển đổ i
duy nhấ t đượ c thự c hiện cho mỗ i kênh. Sau khi 1 kênh chuyển đổ i xong, kênh
tiếp theo sẽ tự độ ng chuyển đổ i.
• Discontinuous Mode: Chế độ này đượ c sử dụ ng để chuyển đổ i n lầ n (n <= 8).
Giá trị củ a n đượ c xá c định tạ i bit DISCNUM[2:0] trong thanh ghi ADC_CR1.
ĐỌ C 1 KÊ NH ADC
Tích chọn kênh cần đọc (ở đây ta đọc kênh IN0 chính là chân A0), các thông số cấu hình để mặc định.

ADC_HandleTypeDef
ADC_HandleTypeDef hadc1;
hadc1;
uint16_t
uint16_t adc;
adc;
HAL_ADC_Start(&hadc1);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,
HAL_ADC_PollForConversion(&hadc1, 300);
300);
adc=HAL_ADC_GetValue(&hadc1);
adc=HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
HAL_ADC_Stop(&hadc1);
BIẾ N TRỞ

Kết nối với vi điều khiển:

• Biến trở là các thiết bị có điện trở thuần có thể biến đổi


được theo ý muốn. Chúng có thể được sử dụng trong
các mạch điện để điều chỉnh hoạt động của mạch điện.
• Điện trở của thiết bị có thể được thay đổi bằng cách
thay đổi chiều dài của dây dẫn điện trong thiết bị, hoặc
bằng các tác động khác như nhiệt độ thay đổi, ánh
sáng hoặc bức xạ điện từ,...
• Cấu tạo của biến trở gồm 2 thành phần chính là con
chạy và cuộn dây được làm bằng hợp kim có điện trở
suất lớn.
ĐỌ C NHIỀ U KÊ NH ADC
Đọc ADC trên 3 kênh PA0, PA1, PA2

Các tham số cần lưu ý:

Scan Conversion Mode: chế độ quét lần lượt từng


kênh, chế độ này tự động được bật khi chúng ta muốn
đọc từ 2 kênh trở lên (khi set Number of Conversion
lớn hơn 1), ngược lại khi chỉ có 1 kênh ADC, mode
này tự động tắt.

Continuous conversion mode: khi chuyển đổi xong,


chúng sẽ ngay lập tức chuyển đến kênh kế tiếp để đọc.

Number Of Conversion: số kênh ADC cần đọc.


ĐỌ C NHIỀ U KÊ NH ADC
Các tham số cần lưu ý:

 Rank: hạng này sẽ cố định chạy từ 1 n (n là số kênh


cầnthứ hạng chuyển đổi, thứ chuyển đổi).
• Channel: Kênh cần đọc ứng (IN0 -> IN9) với thứ
hạng tương ứng.
• Sampling time: Thời gian lấy mẫu

 Ví dụ:
• Giả sử ta chọn Rank 1 là Channel 0, Rank 2 là
Channel 1, Rank 3 là Channel 2 thì thứ tự chuyển
đổi các kênh sẽ là Channel 0 Channel 1 Channel 2.

• Giả sử ta chọn Rank 1 là Channel 1, Rank 2 là


Channel 0, Rank 3 là Channel 2 thì thứ tự chuyển
đổi các kênh sẽ là Channel 1 Channel 0 Channel 2.
ĐỌC NHIỀU KÊNH ADC
ADC_HandleTypeDef
ADC_HandleTypeDef hadc1;
hadc1;
Khởi động bộ ADC.
uint16_t
uint16_t adc0,adc1,
adc0,adc1, adc2;
adc2;
Chuyển đổi
      HAL_ADC_Start(&hadc1);
      HAL_ADC_Start(&hadc1);
giá trị kênh
      HAL_ADC_PollForConversion(&hadc1,
      HAL_ADC_PollForConversion(&hadc1, 300);
300); rank thứ 1
      adc0=HAL_ADC_GetValue(&hadc1);
      adc0=HAL_ADC_GetValue(&hadc1); Đọc giá trị ADC ở trị kênh rank thứ 1 (
như trên hình thì sẽ là Channel 0)
      HAL_ADC_PollForConversion(&hadc1,
      HAL_ADC_PollForConversion(&hadc1, 300);
300);
      adc1=HAL_ADC_GetValue(&hadc1); Chuyển đổi
      adc1=HAL_ADC_GetValue(&hadc1);
giá trị kênh
 HAL_ADC_PollForConversion(&hadc1,
 HAL_ADC_PollForConversion(&hadc1, 300);
300); rank thứ 2
      adc1=HAL_ADC_GetValue(&hadc1);
      adc1=HAL_ADC_GetValue(&hadc1);
      HAL_ADC_Stop(&hadc1);
      HAL_ADC_Stop(&hadc1);
Chuyển đổi
giá trị kênh
rank thứ 3
Dừng bộ ADC
NGẮT ADC
BÀI TẬP
Làm mạch tự động bật tắt đèn dùng quang điện trở.

Quang trở Kết nối quang trở với VĐK Sự tăng/ giảm điện trở của quang trở

You might also like