• ADC của STM32F103C8 có độ phân giải 12 Bit . • Có 22 kênh ADC trong đó có 20 kênh bên ngoài : ADC1_IN0 ÷ ADC1_IN9; ADC2_IN0 ÷ ADC2_IN9 và 2 kênh bên trong chip: Vrefint và cảm biếnnhiệt độ . • Chuyển đổi AD trên các kênh có thể thực hiện với 4 chế độ: Single; Continuous; Scan; Discontinuous. • Giá trị ADC sau khi chuyển đổi xong được lưu trữ trong thanh ghi 16 bit (leftaligned hoặc rightaligned). • Xung nhịp ADC thuộc khối clock APB2.
Trang 1Bài 3 Lập trình cơ bản trên ARM
3.5 - Lập trình biến đổi tương tự số ADC.
#1
Trang 23.5.1 Giới thiệu
#2
• ADC của STM32F103C8 có độ phân giải 12 Bit
• Có 22 kênh ADC trong đó có 20 kênh bên ngoài : ADC1_IN0 ÷ ADC1_IN9; ADC2_IN0 ÷ ADC2_IN9 và 2 kênh bên trong chip: Vrefint và cảm biến
nhiệt độ
• Chuyển đổi A/D trên các kênh có thể thực hiện với 4 chế độ:
- Single; Continuous; Scan; Discontinuous.
• Giá trị ADC sau khi chuyển đổi xong được lưu trữ trong thanh ghi 16 bit (left-aligned hoặc right-aligned)
• Xung nhịp ADC thuộc khối clock APB2.
3.5 Lập trình biến đổi tương tự số ADC
Trang 33.5.2 Các tính năng của ADC trên STM32F103
#3
• Độ phân giải 12-bit.
• Xảy ra ngắt khi kết thúc quá trình chuyển đổi, kết thúc Injected conversion và có sự kiện
Analog watchdog
• Single mode và continuous mode (liên tục).
• Scan mode tự động chuyển đổi từ kênh 0 đến kênh ‘n’
• Tự hiệu chỉnh
• Căn chỉnh dữ liệu kết hợp xây dựng dữ liệu
• Thời gian lấy mẫu được thiết lập bằng chương trình trên từng kênh
• Lựa chọn đầu vào với chế độ thông thường và injected conversion
• Discontinuous mode (không liên tục)
• Dual mode (trên các vi điều khiển có 2 ADCs trở lên)
• Thời gian chuyển đổi ADC :
– STM32F103xx : 1 µs với 56 MHz (1.17 µs với 72 MHz)
• Nguồn cấp ADC: 2.4 V to 3.6 V
• Dải đầu vào ADC: VREF- ≤VIN ≤VREF+
• DMA - yêu cầu tạo trong quá trình chuyển đổi kênh thông thường.
3.5 Lập trình biến đổi tương tự số ADC
Trang 4Sơ đồ khối ADC Hình 22 trang 217 Datasheet
3 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(1) Các khối chức năng của ADC
- Khối đầu vào
- Khối chuyển đổi tương tự số
- Khối nguồn và điện áp tham chiếu
- Khối Regular data register
- Khối Injected data registers
- Khối ngắt ADC
Trang 5Sơ đồ khối ADC Hình 22 trang 217 Datasheet
3 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(1) Các khối chức năng của ADC
- Khối ADC Remap
Trang 6ADC pins bảng 65 trang 218 Datasheet
3 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(2) Các chân ADC
Trang 7Timing diagram Hình 23 trang 220 Datasheet
3 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
Trang 83 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
chuỗi chuyển đổi có thể
được thực hiện trên bất
kỳ kênh nào và theo thứ
Trang 93 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(4) Lựa chọn kênh
- Regular : gồm tối đa 16
kênh Lựa chọn kênh và
thứ tự chuyển đổi được
thiết lập trong thanh ghi
ADC_SQRx.
- Injected: gồm tối đa 4
kênh Lựa chọn kênh và
thứ tự chuyển đổi được
thiết lập trong thanh ghi
ADC_JSQR.
Nguồn http://web.eece.maine.edu/
Trang 103 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(4) Lựa chọn kênh
- Temperature sensor
/VREFIN : Cảm biến
nhiệt độ được kết nối
với kênh ADCx_IN16 và
điện áp tham chiếu bên
trongVREFINT được kết
nối với ADCx_IN17 Hai
kênh có thể được thiết
lập trong Regular hoặc
Trang 113 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(5) Analog watchdog
- Bit AWD (Analog watchdog flag)
thiết lập nếu điện áp tương tự
được ADC chuyển đổi dưới
ngưỡng thấp hoặc trên ngưỡng
cao Các ngưỡng này được lập
trình trong 12 bit thấp của thanh
ghi 16 bit ADC_HTR và
ADC_LTR Một ngắt có thể
được kích hoạt bằng cách sử
dụng bit AWDIE trong thanh ghi
ADC_CR1
Analog watchdog guarded area trang 220 Datasheet
Analog watchdog channel selection trang 220 Datasheet
Trang 123 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(6) Channel-by-channel programmable sample time
Thời gian lấy mẫu của các kênh ADC có thể được thiết lập bằng cách sử dụng các bit SMP [2: 0] trong thanh ghi ADC_SMPR1 và ADC_SMPR2 Mỗi kênh có thể được lấy mẫu với thời gian lấy mẫu khác
Tổng thời gian chuyển đổi được tính như sau:
Tconv = Sampling time + 12.5 cycles
Ví dụ:
ADCCLK = 14 MHz và Sampling time = 1.5 cycles:
Tconv = (1.5 + 12.5) cycles = 14 cycles = 1 µs
Trang 133 5 Lập trình biến đổi tương tự số ADC
3.5.3 Sơ đồ khối của ADC
(7) Ngắt ADC
Một ngắt có thể được tạo ra khi kết thúc chuyển đổi cho các nhóm Regular và Injected,
và khi bit Bit AWD của Analog watchdog được thiết lập.
Trang 163.5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
(1) Các hàm sử dụng trong thư viện HAL
• HAL_ADC_Start: hàm khởi tạo chuyển đổi ADC không ngắt.
• HAL_ADC_Start_IT: hàm khởi tạo chuyển đổi ADC có ngắt.
• HAL_ADC_GetValue: hàm trả về giá trị ADC chuyển đổi.
• HAL_ADC_Stop: hàm dừng chuyển đổi ADC không ngắt.
• HAL_ADC_Stop_IT: hàm dừng chuyển đổi ADC có ngắt.
• HAL_ADC_Start_DMA: hàm khởi tạo chuyển đổi ADC DMA.
• HAL_ADC_Stop_DMA: hàm dừng chuyển đổi ADC DMA.
• HAL_ADC_PollForConversion: hàm chờ ADC chuyển đổi xong.
Trang 17Bước 3 Cấu hình cho bộ chuyển đổi ADC
- Lựa chọn kênh đầu vào ADC
- ADC_Setting: Data Alignment(Right alignment);
Chế độ chuyển đổi ADC (Continuous Conversion Mode);
- ADC Regular_Conversion Mode:
- Rank: Sampling Time
- Cho phép ADC và bắt đầu chuyển đổi: HAL_ADC_Start(&hadc1);
- Chờ ADC chuyển đổi xong: HAL_ADC_PollForConversion(&hadc1,10);
- Đọc giá trị ADC chuyển đổi xong: AD=HAL_ADC_GetValue(&hadc1);
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 18(2) Các bước lập trình biến đổi ADC
Bước 3 Thiết lập các thông số cho bộ chuyển đổi ADC
- Lựa chọn kênh đầu vào ADC
- ADC_Setting: Data Alignment(Right alignment);
Chế độ chuyển đổi ADC (Continuous Conversion Mode);
- ADC Regular_Conversion Mode:
- Rank: Sampling Time
- Cho phép ADC và bắt đầu chuyển đổi:
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 19(3) Các bước lập trình biến đổi ADC trên STM CUBE
B1 Cấu hình nguồn xung của ADC
- ADC1, ADC2 – APB2
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 203 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 213 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 22(3) Các bước lập trình biến đổi ADC trên STM CUBE
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Lựa chọn chân chiều vào, chiều ra, mode Thiết lập các thông số trên STM32CubeMX như trong hướng dẫn lập trình với GPIO
Sau đó chọn GENERATE CODE để tạo file Code
Trang 23(3) Các bước lập trình biến đổi ADC trên STM CUBE
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
- Khung chương trình ADC1 – Kênh 0
#include "main.h"
ADC_HandleTypeDef hadc1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
Trang 24(4) Ví dụ
Ví dụ 1: Sử dụng đọc tín hiệu ADC trên
ADC 1 – Kênh 0 (ADC1_IN0 - PA0).
Hiển thị giá trị ADC bằng mã nhị phân D0 ÷ D11
lần lượt trên 12 LED - kết nối từ PB4 ÷ PB15
Bộ tạo dao động chế độ HSI với Fosc = 8MHz
3 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Trang 253 5 Lập trình biến đổi tương tự số ADC
3.5.5 Các bước lập trình biến đổi ADC
Code ví dụ 1
#include "main.h"
ADC_HandleTypeDef hadc1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
void hienthi_12bit(unsigned int data);
Trang 263 5 Lập trình biến đổi tương tự số ADC #26
Bài tập:
Bài tập 1 Sử dụng đọc tín hiệu ADC trên ADC 1 – Kênh 1 (ADC1_IN1 – PA1) Hiển thị giá trị ADC bằng mã nhị phân D0 ÷ D11 lần lượt trên 12 LED - kết nối từ PB0 ÷ PB11
Bộ tạo dao động chế độ HSI với Fosc = 8MHz
Bài tập 2 Sử dụng đọc tín hiệu ADC trên ADC 2 – Kênh 2 (ADC2_IN2 – PA2) Hiển thị giá trị ADC bằng mã nhị phân D0 ÷ D11 lần lượt trên 12 LED - kết nối từ PB0 ÷ PB11
Bộ tạo dao động chế độ HSI với Fosc = 8MHz
Bài tập 3 Sử dụng đọc tín hiệu ADC trên ADC 1 – Kênh 3 (ADC1_IN3 – PA3) Hiển thị giá trị ADC lên 4 Led 7 thanh kết nối với PORT B Bộ tạo dao động chế độ HSI với Fosc = 8MHz.
Bài tập 4 Sử dụng đọc tín hiệu ADC trên ADC 1 – Kênh 4 (ADC1_IN4 – PA4) Hiển thị giá trị Volt của đầu vào ADC lên 4 Led 7 thanh kết nối với PORT B Bộ tạo dao động chế độ HSI với Fosc = 8MHz