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

Slide vi dieu khien nang cao timer va PWMpdf

60 7 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

• STM32F103C8T6 có 2 bộ Watchdog Timer, 1 bộ SysTick Timer, 4 bộ Timer (Timer 1,Timer 2, Timer 3, Timer 4 ) mỗi 1 bộ là 1 bộ đếmtimer 16 bit. 1 bộ Timer 1 – Advancedcontrol timer thuộc khối clock APB2.  3 bộ Timer 2,3,4 – Generalpurpose timers thuộc khối clock APB1.

Bài Lập trình ARM 3.3 Lập trình với Timer 3.4 Lập trình với điều chế độ rộng xung PWM #1 3.3 Lập trình với Timer #2 3.3.1 Giới thiệu • STM32F103C8T6 có Watchdog Timer, SysTick Timer, Timer (Timer 1,Timer 2, Timer 3, Timer ) đếm/timer 16 bit  Timer – Advanced-control timer thuộc khối clock APB2  Timer 2,3,4 – General-purpose timers thuộc khối clock APB1 3.3 Lập trình với Timer 3.3.1 Giới thiệu • Tính định thời #3 3.3 Lập trình với Timer 3.3.1 Giới thiệu • Timer - Advanced-control timer (TIM1) • Tạo kênh PWM để điều khiển động pha • Tạo dead-times PWM • Có chức giống Timer thơng thường • Có thể thiết lập kênh độc lập thực chức năng: • Input capture • Output compare • Tạo xung, tạo xung PWM • Tạo yêu cầu DMA • Timer 2,3,4 - General-purpose timers (TIMx) • 16-bit auto-reload up/down counter • 16-bit prescaler • kênh độc lập: input capture/output compare • Tạo xung, tạo xung PWM • Tạo u cầu DMA • Đọc ENCODER, đọc tín hiệu từ cảm biến HALL #4 3.3 Lập trình với Timer 3.3.2 Sơ đồ khối Timer - TIM1 - Khối nguồn xung Khối đầu vào Khối PSC Khối đếm Khối Capture/Compare Khối đầu Sơ đồ khối Timer Hình 52 trang 294 Datasheet #5 3.3 Lập trình với Timer 3.3.2 Sơ đồ khối Timer – TIM2, TIM3, TIM4 - Khối nguồn xung Khối đầu vào Khối PSC Khối đếm Khối Capture/Compare Khối đầu Sơ đồ khối Timer 2,3,4 Hình 100 trang 367 Datasheet #6 3.3 Lập trình với Timer 3.3.3 Chế độ tạo xung thơng thường - Khối nguồn xung - Khối PSC - Khối đếm Nguồn xung - Nguồn xung từ bên : ETR TI1FP1, TI2FP2 - Nguồn xung từ tạo dao động hệ thống RCC - CK_INT Sơ đồ khối Timer 1,2,3,4 chế độ tạo xung #7 3.3 Lập trình với Timer 3.3.3 Chế độ tạo xung thơng thường #8 (1) Tạo xung sử dụng nguồn xung từ tạo dao động – CK_INT Cần tác động ghi - Counter register (TIMx_CNT) - Prescaler register (TIMx_PSC) - Auto-reload register (TIMx_ARR) Sơ đồ tạo xung từ tạo dao động RCC 3.3 Lập trình với Timer 3.3.3 Chế độ tạo xung thông thường (1) Tạo xung sử dụng nguồn xung từ tạo dao động – CK_INT Công thức tạo xung : (Prescaler + 1)(Period + 1) - Fout: tần số đầu (Hz) Fclk: tần số đầu vào Timer (Hz) Prescaler: giá trị nạp vào chia tần Timer (0 ÷ 65535) Period: giá trị nạp vào đếm Timer (0 ÷ 65535) #9 3.3 Lập trình với Timer 3.3.3 Chế độ tạo xung thông thường (1) Tạo xung sử dụng nguồn xung từ tạo dao động – CK_INT Ví dụ :Tạo xung Fout có tần số 1KHz, với Fclk=8MHz, Prescaler =0; (Prescaler + 1)(Period + 1) - Fout = 1000(Hz) - Fclk = 8000000(Hz) - Prescaler = - Period = (Prescaler + 1) - = 7999 #10 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (2) Tạo xung PWM sử dụng nguồn xung từ tạo dao động – CK_INT Công thức tạo độ rộng phần dương Ton : D Period+1 *100% - D: tỉ lệ xung dương so với chu kì - Ton: Chu kì xung phần dương xung PWM (Pulse) - Period: giá trị nạp đếm Timer (0 ÷ 65535) #46 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (3) Các hàm sử dụng thư viện HAL • HAL_TIM_PWM_Init • HAL_TIM_PWM_ConfigChannel • HAL_TIM_PWM_DeInit • HAL_TIM_PWM_Init • HAL_TIM_PWM_MspInit • HAL_TIM_SetCompare • HAL_TIM_PWM_MspDeInit • HAL_TIM_PWM_Start • HAL_TIM_PWM_Stop • HAL_TIM_PWM_Start_IT • HAL_TIM_PWM_Stop_IT • HAL_TIM_PWM_Start_DMA • HAL_TIM_PWM_Stop_DMA #47 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM #48 (4) Các bước lập trình tạo xung PWM 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 - Cho phép GPIO – AFIO tương ứng hoạt động hàm: HAL_RCC_GPIOx_CLK_ENABLE(); Bước Thiết lập thông số tạo xung PWM - Lựa chọn tần số cho Timer - Lựa chọn hệ số chia tần: Prescaler ; - Lựa chọn chế độ đếm: Counter Mode = Up; - Nạp giá trị cho ghi đếm: Counter Period - Nạp giá trị thiết lập độ rộng xung Ton: Pulse - Khởi tạo kênh PWM: HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); - Thiết lập lại độ rộng xung Ton: HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,DutyCycle); 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B1 Cấu hình nguồn xung Timer - Timer – APB2 - Timer 2,3,4 – APB1 #49 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B2 Cấu hình Timer - Lựa chọn Timer - Thiết lập chế độ hoạt động - Lựa chọn nguồn xung #50 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B2 Cấu hình Timer - Lựa chọn nguồn xung từ tạo dao động - Lựa chọn kênh đầu PWM - Thiết lập Prescaler, Counter Mode, Period, Pulse #51 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B2 Cấu hình Timer - Lựa chọn nguồn xung từ tạo dao động : Clock Source –> Internal Clock #52 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B2 Cấu hình Timer - Lựa chọn kênh PWM: Channel –> PWM Generation CH1 #53 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (5) Các bước lập trình tạo xung PWM STM CUBE B2 Cấu hình Timer - Thiết lập Prescaler, Counter Mode, Counter Period, Pulse #54 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM #55 (5) Các bước lập trình tạo xung PWM 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.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM #56 (5) Các bước lập trình tạo xung PWM STM CUBE – Khung chương trình Timer – PWM CH1 #include "main.h" TIM_HandleTypeDef htim1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM1_Init(); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); while (1) { HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,20); } } // Thiết lập Prescaler, CounterMode, Period, Pulse htim1.Instance = TIM1; htim1.Init.Prescaler = 799; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 99; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; //**************************************// sConfigOC.Pulse = 0; 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (6) Ví dụ Ví dụ 1: Sử dụng Timer tạo xung PWM có tần số Fpwm = 1KHz kênh – PA8 với Ton= 20%Tpwm Bộ tạo dao động chế độ HSI với Fosc = 8MHz #57 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM (6) Ví dụ 𝐹𝑝𝑤𝑚 = Fclk (Prescaler + 1)(Period + 1) Ton D = Period+1 *100% Fpwm = 1KHz Ton= 20% Tpwm Fclk=Fosc = 8MHz  (Prescaler+1)(Period + 1) = Fclk/Fpwm = 8000 - Thiết lập Prescaler = 7;  Period = 999; D= 20 ;  Ton = 200 #58 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM #59 Code ví dụ #include "main.h" TIM_HandleTypeDef htim1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM1_Init(); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); while (1) { // HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,20); } } // Thiết lập Prescaler, CounterMode, Period, Pulse htim1.Instance = TIM1; htim1.Init.Prescaler = 7; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; //**************************************// sConfigOC.Pulse = 200; 3.4 Lập trình với Bộ điều chế độ rộng xung 3.4.3 Tạo xung PWM #60 Bài tập: Bài tâp Lập trình điều khiển đèn LED1 – PA8 sáng luân phiên mức tăng dần (lặp lại) xung PWM - TIM1CH1 Bài tập Sử dụng nút UP, DOWN để tăng giảm mức sáng cho led LED2 – PA9 Bài tập Sử dụng Timer 1, lập trình tạo đồng thời xung PWM có tần số 1KHz, với độ rộng Ton 10%, 30%, 70%, 90% kênh CH1, CH2, CH3, CH4 ...3.3 Lập trình với Timer #2 3.3.1 Giới thiệu • STM32F103C8T6 có Watchdog Timer, SysTick Timer, Timer (Timer 1 ,Timer 2, Timer 3, Timer ) đếm /timer 16 bit  Timer – Advanced-control timer thuộc khối... • STM32F103C8T6 có Timer (Timer 1 ,Timer 2, Timer 3, Timer ) Timer tạo kênh PWM 16 bit  Timer – Advanced-control timer thuộc khối clock APB2  Timer 2,3,4 – General-purpose timers thuộc khối clock... xung Timer - Timer – APB2 - Timer 2,3,4 – APB1 #30 3.3 Lập trình với Timer 3.3.4 Chế độ đếm (4) Các bước lập trình đếm xung với Timer STM CUBE B2 Thiết lập thông số cho Timer - Lựa chọn Timer

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

Xem thêm:

w