1. Trang chủ
  2. » Tất cả

vi điều khiển nâng cao ADC

26 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

• 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.

Bài Lập trình ARM 3.5 - Lập trình biến đổi tương tự số ADC #1 3.5 Lập trình biến đổi tương tự số ADC 3.5.1 Giới thiệu • ADC STM32F103C8 có độ phân giải 12 Bit • Có 22 kênh ADC có 20 kênh bên ngồi : ADC1_IN0 ÷ ADC1_IN9; ADC2_IN0 ÷ ADC2_IN9 kênh bên chip: Vrefint cảm biến nhiệt độ • Chuyển đổi A/D kênh thực với chế độ: - Single; Continuous; Scan; Discontinuous • Giá trị ADC sau chuyển đổi xong lưu trữ ghi 16 bit (left-aligned right-aligned) • Xung nhịp ADC thuộc khối clock APB2 #2 3.5 Lập trình biến đổi tương tự số ADC 3.5.2 Các tính ADC STM32F103 • Độ phân giải 12-bit • Xảy ngắt kết thúc trình chuyển đổi, kết thúc Injected conversion có kiện Analog watchdog • Single mode continuous mode (liên tục) • Scan mode tự động chuyển đổi từ kênh đến kênh ‘n’ • Tự hiệu chỉnh • Căn chỉnh liệu kết hợp xây dựng liệu • Thời gian lấy mẫu thiết lập chương trình kênh • Lựa chọn đầu vào với chế độ thông thường injected conversion • Discontinuous mode (không liên tục) • Dual mode (trên vi điều khiển có ADCs trở lên) • Thời gian chuyển đổi ADC : – STM32F103xx : µ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 q trình chuyển đổi kênh thơng thường #3 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (1) Các khối chức ADC - Khối đầu vào - Khối chuyển đổi tương tự số - Khối nguồn điện áp tham chiếu - Khối Regular data register - Khối Injected data registers - Khối ngắt ADC Sơ đồ khối ADC Hình 22 trang 217 Datasheet #4 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (1) Các khối chức ADC - Khối ADC Remap Sơ đồ khối ADC Hình 22 trang 217 Datasheet #5 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC #6 (2) Các chân ADC ADC 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 ADC (3) ADC Clock - ADC_CLK điều khiển đồng với PCLK2(APB2) - ADC_CLK tạo từ RCC với hệ số chia tần thiết lập chương trình Timing diagram Hình 23 trang 220 Datasheet #7 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (4) Lựa chọn kênh - 10 kênh ADC tổ chức chuyển đổi theo nhóm: Regular Injected - Một nhóm bao gồm chuỗi chuyển đổi thực kênh theo thứ tự - Ví dụ: ADC_IN3, ADC_IN8, ADC_IN2, ADC_IN2, ADC_IN0, ADC_IN2, ADC_IN2, ADC_IN9 Nguồn http://web.eece.maine.edu/ #8 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (4) Lựa chọn kênh - Regular : gồm tối đa 16 kênh Lựa chọn kênh thứ tự chuyển đổi thiết lập ghi ADC_SQRx - Injected: gồm tối đa kênh Lựa chọn kênh thứ tự chuyển đổi thiết lập ghi ADC_JSQR Nguồn http://web.eece.maine.edu/ #9 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (4) Lựa chọn kênh - Temperature sensor /VREFIN : Cảm biến nhiệt độ kết nối với kênh ADCx_IN16 điện áp tham chiếu bên trongVREFINT kết nối với ADCx_IN17 Hai kênh thiết lập Regular Injected  Lưu ý: Temperature sensor /VREFIN thực với ADC1 Temperature sensor and VREFINT channel block diagram Hình 39 trang 235 Datasheet #10 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC #12 (6) Channel-by-channel programmable sample time Thời gian lấy mẫu kênh ADC thiết lập cách sử dụng bit SMP [2: 0] ghi ADC_SMPR1 ADC_SMPR2 Mỗi kênh lấy mẫu với thời gian lấy mẫu khác Tổng thời gian chuyển đổi tính sau: Tconv = Sampling time + 12.5 cycles Ví dụ: ADCCLK = 14 MHz Sampling time = 1.5 cycles: Tconv = (1.5 + 12.5) cycles = 14 cycles = µs 3.5 Lập trình biến đổi tương tự số ADC 3.5.3 Sơ đồ khối ADC (7) Ngắt ADC Một ngắt tạo kết thúc chuyển đổi cho nhóm Regular Injected, bit Bit AWD Analog watchdog thiết lập #13 3.5 Lập trình biến đổi tương tự số ADC 3.5.4 Các chế độ hoạt động (1) Các chế độ hoạt động Nguồn http://web.eece.maine.edu/ #14 3.5 Lập trình biến đổi tương tự số ADC 3.5.4 Các chế độ hoạt động (2) Lưu liệu sau chuyển đổi Nguồn http://web.eece.maine.edu/ #15 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 (1) Các hàm sử dụng 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ả 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 #16 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 (2) Các bước lập trình biến đổi ADC Bước Thiết lập hệ thống - Thiết lập xung nhịp hệ thống : SystemClock_Config() Bước Thiết lập cho GPIO, xung nhịp ADC - Cho phép GPIO – AFIO tương ứng hoạt động hàm: HAL_RCC_GPIOx_CLK_ENABLE(); HAL_RCC_ADCx_CLK_ENABLE(); Bước Cấu hình cho 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 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); #17 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 (2) Các bước lập trình biến đổi ADC Bước Thiết lập thông số cho 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 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); #18 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 (3) Các bước lập trình biến đổi ADC STM CUBE B1 Cấu hình nguồn xung ADC - ADC1, ADC2 – APB2 #19 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 (3) Các bước lập trình biến đổi ADC STM CUBE B2 Cấu hình ADC - Lựa chọn ADC - Lựa chọn kênh ADC - Cấu hình ADC #20 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 (3) Các bước lập trình biến đổi ADC STM CUBE B2 Cấu hình ADC - ADC_Setting - ADC_Regular Conversions - Rank #21 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 #22 (3) Các bước lập trình biến đổi ADC STM CUBE Lựa chọn chân chiều vào, chiều ra, mode Thiết lập thông số STM32CubeMX hướng dẫn lập trình với GPIO Sau chọn GENERATE CODE để tạo file Code 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 #23 (3) Các bước lập trình biến đổi ADC STM CUBE - Khung chương trình ADC1 – Kênh #include "main.h" ADC_HandleTypeDef hadc1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); uint32_t AD; int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); while (1){ HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,10); AD=HAL_ADC_GetValue(&hadc1); } } static void MX_ADC1_Init(void){ ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc1) != HAL_OK){Error_Handler();} sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK){ Error_Handler(); }} 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 (4) Ví dụ Ví dụ 1: Sử dụng đọc tín hiệu ADC ADC – Kênh (ADC1_IN0 - PA0) Hiển thị giá trị ADC mã nhị phân D0 ÷ D11 12 LED - kết nối từ PB4 ÷ PB15 Bộ tạo dao động chế độ HSI với Fosc = 8MHz #24 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 Code ví dụ #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); uint32_t AD; int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); while (1) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,10); AD=HAL_ADC_GetValue(&hadc1); hienthi_12bit(AD); } } void hienthi_12bit(unsigned int data) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4, data&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, (data>>1)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6, (data>>2)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7, (data>>3)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8, (data>>4)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9, (data>>5)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10, (data>>6)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11, (data>>7)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12, (data>>8)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, (data>>9)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, (data>>10)&0x001); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15, (data>>11)&0x001); } #25 3.5 Lập trình biến đổi tương tự số ADC #26 Bài tập: Bài tập Sử dụng đọc tín hiệu ADC ADC – Kênh (ADC1_IN1 – PA1) Hiển thị giá trị ADC mã nhị phân D0 ÷ D11 12 LED - kết nối từ PB0 ÷ PB11 Bộ tạo dao động chế độ HSI với Fosc = 8MHz Bài tập Sử dụng đọc tín hiệu ADC ADC – Kênh (ADC2_IN2 – PA2) Hiển thị giá trị ADC mã nhị phân D0 ÷ D11 12 LED - kết nối từ PB0 ÷ PB11 Bộ tạo dao động chế độ HSI với Fosc = 8MHz Bài tập Sử dụng đọc tín hiệu ADC ADC – Kênh (ADC1_IN3 – PA3) Hiển thị giá trị ADC lên Led kết nối với PORT B Bộ tạo dao động chế độ HSI với Fosc = 8MHz Bài tập Sử dụng đọc tín hiệu ADC ADC – Kênh (ADC1_IN4 – PA4) Hiển thị giá trị Volt đầu vào ADC lên Led kết nối với PORT B Bộ tạo dao động chế độ HSI với Fosc = 8MHz ... tương tự số ADC 3.5.3 Sơ đồ khối ADC #6 (2) Các chân ADC ADC 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 ADC (3) ADC Clock - ADC_ CLK điều khiển đồng... kênh ADC tổ chức chuyển đổi theo nhóm: Regular Injected - Một nhóm bao gồm chuỗi chuyển đổi thực kênh theo thứ tự - Ví dụ: ADC_ IN3, ADC_ IN8, ADC_ IN2, ADC_ IN2, ADC_ IN0, ADC_ IN2, ADC_ IN2, ADC_ IN9... - Cho phép ADC 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); #17

Ngày đăng: 03/01/2023, 17:53

Xem thêm:

w