#5.2_Multi ADC

Multi ADC

Multi ADC là nội dung được tìm hiểu trong bài viết STM32 cơ bản này. Bài viết trước ta đã tìm hiểu các đặc điểm của ADC. Ví dụ này sẽ sử dụng DMA để đọc dữ liệu từ 2 kênh 1 lúc, đo biến trở và nhiệt độ thiết bị từ cảm biến tích hợp sẵn trong chip.

———————————

Cùng xem bài viết bên dưới.

Nội dung thực hành | MultiADC

  • Trong ví dụ về Multi ADC này, ta sẽ tìm hiểu kỹ hơn về chu kỳ lấy mẫu Tcon và cảm biến nhiệt độ trong chip STM32.
Multi ADC
Sơ đồ chân trong Multi ADC
  • Để có thể đọc dữ liệu từ cảm biến, trước hết ta cùng tìm hiểu về datasheet của STM32 và lưu ý vào 1 số điểm.
  • Chu kỳ lấy mẫu nhỏ nhất cần được sử dụng của cảm biến là 10µS. Sau khi đọc được giá trị ADC này dùng công thức tính toán để quy đổi giá trị này về nhiệt độ (ºC).

Khi đã nắm được cách thiết lập chu kỳ lấy mẫu thì việc sử dụng ADC sẽ không có gì khó khăn. Mỗi ngoại vi ADC có thể yêu cầu chu kỳ lấy mẫu khác nhau, nếu chưa nắm rõ việc thiết lập có thể đặt câu hỏi ở phần bình luận bên dưới.

Thực hành trên STM32cubeIDE

Cấu hình chân

Dao động và mạch nạp không đổi. Phần cấu hình kênh biến trở như ví dụ trước. Trong phần Multi ADC này, cấu hình ADC kênh nhiệt độ như sau.

Từ công thức về chu kỳ lấy mẫu. Chu kỳ lấy mẫu 10µS tương ứng với PCLK2 là 8MHz, hệ số chia là 2, thời gian lấy mẫu là 28 cycles. Ta có thể chọn hệ số khác phù hợp với project của mình. Khi chọn Tcon thấp hơn giá trị yêu cầu trong datasheet, sẽ xuất hiện 1 số lỗi trong quá trình đọc dữ liệu, trình bày trong kết quả debug ở bên dưới.

  • Thiết lập chu kỳ lấy mẫu nhỏ nhất là 10µS để đọc dữ liệu chính xác
  • Nguồn cấp cho biến trở là 3.3V

Khởi tạo code và thư viện stm32f4xx_HAL_ADC.c

  • Tiếp theo là khởi tạo code và lập trình đọc dữ liệu. Phần đọc giá trị biến trở như ví dụ trước, khoảng giá trị tương ứng độ phân giải 12bit là (0,4095).
STM32 cơ bản
Hàm get_temp() đọc nhiệt độ của cảm biến

Khi debug ví dụ, trong 2 trường hợp sampling time là 28 cycles ~ Tcon = 10µS và 3 cycles ~ Tcon = 3.75µS có sự khác biệt về độ chính xác.

  • Tcon = 10µS
STM32 cơ bản
Kết quả debug khi chu kỳ lấy mẫu là 10uS 
  • adc_val: Giá trị của biến trở
  • vsense: Giá trị thô của cảm biến nhiệt độ (RAW value)
  • temp_device: Nhiệt độ tính toán được.

Trong kết quả debug này, khi ta tăng giá trị biến trở thì kết quả nhiệt độ không có gì thay đổi. Nhưng ở trường hợp Tcon = 3.75µS thì lại khác. Nhiệt độ đo được không ổn định.

Kết quả debug khi chu kỳ lấy mẫu là 3.75uS
Sử dụng Multi ADC bằng DMA trong việc đọc nhiều dữ liệu cùng lúc rất phù hợp. Lưu ý về ADC cũng chỉ tập trung vào chu kỳ lấy mẫu, nguồn đầu vào ADC <3.6V.

Phần cứng và code trong bài viết

Phần cứng tiếp tục sử dụng STM32F411, phần mềm sử dụng là stm32cubeIDE. File code ví dụ các bạn tải về bên dưới.


Trong bài viết này ta đã cùng tìm hiểu về Multi ADC.

Các bài viết khác cùng chuyên mục trong “STM32 cơ bản“.

Các chuyên mục khác:

Bạn có thắc mắc gì trong bài viết không?

Đánh giá và để lại bình luận bên dưới nhá.

4.7/5 - (3 bình chọn)

Similar Posts

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *