#5.1_ADC – Đọc giá trị biến trở

Đọc giá trị biến trở

Đọc giá trị biến trở là ví dụ tiếp theo trong STM32 cơ bản. Ví dụ trước ta đã tìm hiểu về PWM Input capture. Trong ví dụ này ta sẽ đọc giá trị của biến trở bằng chức năng  ADC (Analog-to-Digital Converter).

———————————

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

Nội dung thực hành | Đọc giá trị biến trở

  • Đây là ví dụ thứ 5 trong chuỗi bài viết của STM32 cơ bản. Ví dụ này ta sẽ dùng chức năng ADC để đo giá trị của biến trở. Sơ đồ chân và nội dung thực hiện ở bên dưới, trong phần A ta sẽ tìm hiểu datasheet về chức năng này.
  • Dưới đây là 1 số đặc điểm trong datasheet về chức năng ADC trong reference manual. Bộ chuyển đổi tương tự sang số có độ phân giải tối đa 12 bit, nguồn cấp từ 2.4 -> 3.6V. Chu kỳ lấy mẫu Tcon được tính theo công thức tường minh.

Các ký hiệu:

  • APB2: Xung nhịp từ PCLK2 trong Clock configuration
  • Sampling time: Thời gian lấy mẫu, dùng để tính toán Tcon (Chu kỳ lấy mẫu)
  • Tcon: Chu kỳ lấy mẫu, để chuyển đổi từ tương tự sang số.

Trong ví dụ này ta chọn xung nhịp 100MHz, sampling time 144 suy ra chu kỳ lấy mẫu là 6.24µs.

Thực hành HAL_ADC_START

Cấu hình chân

Dao động và mạch nạp như cũ, tiếp theo sẽ là cấu hình ADC. Ví dụ này ta sẽ dùng 3 cách để đọc giá trị biển trở.

Như phần A đã nói đến, ta sẽ cấu hình theo đúng ý định ban đầu, để có được chu kỳ lấy mẫu Tcon 6.24µs. Trong cấu hình DMA chọn word (2byte ~ 16bit) do độ phân giải tối đa của ADC là 12bit > 8bit.

  • Lưu ý ngắt và khởi tạo DMA chọn circular để quá trình nhận dữ liệu diễn ra liên tục
  • Khi cắm dây biến trở chú ý nguồn cấp là 3.3V (<3.6V)

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

Sau khi cấu hình chân xong ta tiến hành khởi tạo code. Sau đó vào dùng các hàm trong stm32f4xx_HAL_ADC.c để lập trình. 3 cách để nhận dữ liệu tương ứng là đọc trực tiếp, sử dụng ngắt và DMA.

  • Hàm ngắt map() sử dụng để quy đổi khoảng giá trị từ 0->4096(212) về (0,100) để tiện theo dõi.
Chuyển đổi khoảng giá trị (Click để phóng to)

Trong ví dụ này ta chuyển đổi khoảng giá trị của adc_val từ (0,4095) về (0,100).

  • Đọc trực tiếp
Đọc giá trị biến trở
Đọc giá trị biến trở trực tiếp (Click để phóng to)

Trong trường hợp này ta lần lượt khởi tạo ADC, chờ 500ms để bắt đầu, sau đó đọc giá trị biến trở và chuyển nó về khoảng (0,100). Cuối cùng là dừng ADC.

  • Đọc thông qua ngắt.
Đọc giá trị biến trở
Đọc giá trị biến trở sử dụng ngắt (Click để phóng to)

Khi vào ngắt, bắt đầu nhận dữ liệu từ biến trở qua chân PA0. Cuối cùng là khởi tạo lại hàm bắt đầu ngắt HAL_ADC_START_IT để tiếp tục chờ đến thời điểm ngắt tiếp theo.

  • Đọc thông qua DMA.
Đọc giá trị biến trở
Đọc giá trị biến trở sử dụng DMA (Click để phóng to)

Sử dụng DMA rất thuận tiện do các dữ liệu liên tục được nhận vào bộ đệm buffer mà không cần thông qua ngắt. Ta có thể tùy ý đẩy giá trị từ bộ đệm sang 1 biến khác để lập trình.

Dù là 3 cách khác nhau nhưng đều nhận, và đọc giá trị biến trở chính xác. Tùy vào dự án, tình huống của bạn mà đưa ra phương pháp sử dụng phù hợp.

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.


Bài viết tới cũng sẽ nói về chức năng chuyển đổi từ tương tự sang số ADC. Ví dụ tiếp theo nói về Multi ADC, 1 lúc đọc dữ liệu từ nhiều kênh ADC. Cụ thể 1 kênh sẽ đọc giá trị biến trở, 1 kênh đọc giá trị nhiệt độ từ cảm biến tích hợp sẵn trong chip STM32.

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.5/5 - (2 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 *