Skip to main content

STM32F103C8T6, #5 PWM

PWM là viết tắt của Pulse Width Modulation, trong tiếng việt gọi là Điều Rộng Xung hay Băm Xung. Đây là một phương pháp làm thay đổi điện áp trung bình ra tải. Bạn có thể hiểu như thế này, dòng điện DC 3.3V sẽ liên tục được tắt đi rồi mở lại với tần số khá cao. Gọi khoảng thời gian mà nguồn 3.3V bị ngắt là Toff, khoảng thời gian mà nguồn 3.3V được cấp là Ton, thì hiệu điện thế trung bình xuất ra tải sẽ là (Ton/Toff)*3.3V

PWM được ứng dụng trong các bộ nguồn xung, điều khiển động cơ,...

Để thử nghiệm PWM hoạt động như thế nào trên STM32F103C8T6, chúng ta thực hiện theo các bước sau

1. Trong STM32CubeMX, chọn các channel của TIM1 là PWM Generation

2. Thiết lập period là 65536-1

3. Hàm HAL_TIM_PWM_Start(&htimx, TIM_CHANNEL_X); dùng để khởi động bộ băm xung. Thanh ghi TIMx->CCRx dùng để thay đổi tỉ lệ Ton/Toff. Trong trường hợp của chúng ta thì tỉ lệ này là = x/65536.

Mã nguồn có thể tải về từ đây https://drive.google.com/open?id=1Ww21m2-vrAPob51kklVMkdpoDKY_pYIR.

Comments

Popular posts from this blog

STM32F103C8T6, #6 SPI

SPI là một chuẩn giao tiếp do Motorola đưa ra, được dùng chủ yếu để giao tiếp tầm gần giữa các module trong cùng một hệ thống. SPI có thể truyền dữ liệu hai chiều tại cùng một thời điểm. Đây là một giao thức master/slave, có nghĩa là sẽ có duy nhất một trạm đóng vai trò là master và một hoặc nhiều trạm đóng vai trò là slave. Chỉ master được phép điều khiển việc truyền nhận. SPI có 4 dây là clock, dây gửi dữ liệu, dây nhận dữ liệu, và dây chọn slave (trong trường hợp có nhiều slave kết nối vào master). Nguyên lý hoạt động là cứ 1 xung clock thì chip sẽ đọc giá trị tại dây data. SCK - dây clock MISO - master in, slave out MOSI - master out, slave in SS - slave select SPI được sử dụng khá phổ biến, chẳng hạn trong chip NRF24L01 hoặc trong các loại màn hình LCD, OLED, TFT. Bài viết này sẽ hướng dẫn bạn cách viết code 1 chương trình SPI đơn giản giao tiếp giữa hai board SM32F103C8T6. Master trên cổng spi1, slave trên cổng spi2, master sẽ định kỳ cứ 2s gửi 1 byte dữ liệu xuống sla...

STM32F103C8T6, #2 GPIO

GPIO là viết tắt của General Purpose Input Output, hiểu nôm na là cổng nhập / xuất. Nhập có nghĩa là đọc tín hiệu vào, với chân digital thì tùy vào mức vôn gần với 0V hay gần với 3.3V mà sẽ trả về trạng thái là CAO hay THẤP. Ứng dụng để đọc trạng thái đầu vào, ví dụ đọc trạng thái của nút nhấn chẳng hạn. Xuất có nghĩa là đưa tín hiệu ra, với chân digital thì ví dụ nếu lệnh xuất ra tín hiệu mức CAO lúc đó đo vôn ở chân tín hiệu là ~3.3V, nếu xuất ra tín hiệu mức THẤP thì đo vôn là ~0V. Ứng dụng để điều khiển các thiết bị ngoại vi, chẳng hạn để bật tắt đèn hay bật tắt một thiết bị nào đó khác. Như vậy Digital GPIO có hai mức là CAO hoặc THẤP, hay 1 hoặc 0 tùy theo cách gọi. Một số lưu ý khi thiết kế mạch cho digital IO: - Khi cấp nguồn, vi điều khiển sẽ cần một khoảng thời gian (tuy rất ngắn) để khởi động. Khi đó các chân IO sẽ ở trạng thái điện áp không xác định. Hiện tượng này có thể xảy ra chẳng hạn khi vừa cấp nguồn vào vi điều khiển thì bóng đèn chớp 1 cái. Để giải quyết v...

STM32F103C8T6, #4 Timer

Timer là bộ định thời, cứ sau một khoảng thời gian định trước thì bộ định thời sẽ phát ra một sự kiện để bạn có thể thực hiện các tính toán định kỳ theo ý muốn. Cách sử dụng timer trong STM32F103C8T6 1. Chọn TIM1, SYS/Debug là Serial Wire, bật USART như hình dưới 2. Bên tab configuration chọn TIM1 và thiết lập Prescale là (4000-1) tức là 3999, viết 4000-1 thì dễ hiểu hơn (xem phần công thức tính phía dưới để biết tại sao). Thiết lập Counter Period là 2000-1. 3. Bật trigger cho UART và Timer 4. Công thức tính khoảng thời gian mà timer lặp lại như sau: Update_event = TIM_CLK / ((PSC+1)*(ARR+1)*(RCR+1)) Trong đó TIM_CLK là tần số xung của timer, trong ví dụ ở hình dưới thì clock này là 8MHz. PSC là Prescale ở bước trên 4000-1 ARR là autoreload register, là Counter Period ở hình trên, giá trị là 2000-1 RCR là repetition counter, như hình trên thì giá trị là 0 Như vậy với thiết lập chúng ta đang có thì 8000000/(4000*2000*1) = 1s. Nghĩa là cứ 1s thì timer sẽ trigger ...