零基礎STM32單片機編程入門(七)定時器PWM波輸出實戰含源碼視頻

文章目錄

    • 一.概要
    • 二.PWM產生框架圖
    • 三.CubeMX配置一個TIME輸出1KHZ,占空比50%PWM波例程
      • 1.硬件準備
      • 2.創建工程
      • 3.測量波形結果
    • 四.CubeMX工程源代碼下載
    • 五.講解視頻鏈接地址
    • 六.小結

一.概要

脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用單片機數字輸出(1或0)來對外部模擬電路進行控制的一種非常有效的技術。
在這里插入圖片描述
PWM波主要應用場景:
電機控制
PWM信號可以用來控制直流電機的轉速和位置,實現對電機的精確控制。在無刷直流電機(BLDC)和步進電機中,利用PWM調制可以充分發揮電子設備的精確度和能效。

LED燈光調光
PWM信號可用于調控LED燈的亮度。通過改變PWM信號的占空比(on-time和off-time的比值),可以實現對LED燈光的調光操作,達到節能和避免眩光的效果。

電源管理
采用PWM技術的開關穩壓器(如降壓轉換器)在電源管理中具有廣泛的應用。

音頻放大器
在數字音頻放大器中,PWM信號用于控制音頻信號的放大和調制。

混合動力電動汽車(HEV)和電動汽車(EV)
PWM信號用于控制電池充放電和電動機的驅動管理,提高電池的使用性能和壽命。

伺服系統
在伺服系統中,PWM信號用于傳輸伺服電機的控制信號,實現對伺服電機的精確控制。

二.PWM產生框架圖

定時器部分框圖如下,其中PWM相關的主要是基本定時器和PWM輸出控制部分,基本定時器主要控制PWM輸出的頻率,PWM控制部分主要控制PWM輸出的占空比。

在這里插入圖片描述
PWM輸出控制部分信號流向
在這里插入圖片描述
主要寄存器
1.TIMx_CCR1
捕獲比較(值)寄存器(x=1,2,3,4):設置比較值。

2.TIMx_CNT
計數器值與捕獲比較寄存器CCR1進行比較,通過比較結果輸出有效電平和無效電平 。

3.TIMx_ARR
自動重裝載寄存器,計數器(TIMx_CNT)開始計數,直到計數器(TIMx_CNT)達到TIMx_ARR中存放的值后,重新回到0,依次循環 。

在PWM工作模式下,引入一個寄存器CCRx,這個寄存器用于控制PWM輸出波的有效電平長度(占空比),假定定時器工作在向上計數 PWM模式,且當 CNT<CCRx 時,輸出 0,當 CNT>=CCRx 時輸出 1。當 CNT 達到 ARR 值的時候,重新歸零,然后重新向上計數,依次循環。改變 CCRx 的值,就可以改變 PWM 輸出的占空比,改變 ARR 的值,就可以改變 PWM 輸出的頻率。

工作過程如下圖所示
在這里插入圖片描述

三.CubeMX配置一個TIME輸出1KHZ,占空比50%PWM波例程

1.硬件準備

STLINK接STM32F103C8T6小系統板,STLINK接電腦USB口。

在這里插入圖片描述

2.創建工程

打開STM32CubeMX軟件,新建工程
在這里插入圖片描述
Part Number處輸入STM32F103C8,再雙擊就創建新的工程
在這里插入圖片描述
配置下載口引腳
在這里插入圖片描述
配置外部晶振引腳
在這里插入圖片描述
配置系統主頻
在這里插入圖片描述
配置TIM1,1ms定時器,TIM1內部時鐘是72MHZ,72分頻就是1MHZ,計數1000次歸零,計數時間就是1ms,脈沖寬度是500us,根據上述配置,PWM波頻率就是1KHZ,占空比就是50%。
在這里插入圖片描述

配置工程文件名,保存路徑,KEIL5工程輸出方式
在這里插入圖片描述
生成工程
在這里插入圖片描述
用Keil5打開工程
在這里插入圖片描述

增加代碼
在這里插入圖片描述

主要代碼如下

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 */if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)//啟動定時器通道1,PWM輸出{/* PWM generation Error */while(1);}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}void MX_TIM1_Init(void)
{TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};TIM_OC_InitTypeDef sConfigOC = {0};TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};htim1.Instance = TIM1;htim1.Init.Prescaler = 71;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;if (HAL_TIM_Base_Init(&htim1) != HAL_OK){}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK){}if (HAL_TIM_PWM_Init(&htim1) != HAL_OK){}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK){}sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = 500;sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){}sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;sBreakDeadTimeConfig.DeadTime = 0;sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK){}HAL_TIM_MspPostInit(&htim1);}

3.測量波形結果

通過波形接收器測量PA8引腳
在這里插入圖片描述

四.CubeMX工程源代碼下載

鏈接:https://pan.baidu.com/s/1ZOkxY7d7Gz1jXCvHHzF6uA
提取碼:bhf6
如果鏈接失效,可以聯系博主給最新鏈接

程序下載下來之后解壓就行

五.講解視頻鏈接地址

PWM輸出實驗

六.小結

脈沖寬度調制(PWM:Pulse Width Modulation)可以廣泛應用于電機控制、燈光的亮度調節、功率控制等領域,所以在那些領域避免不了需要用到PWM輸出技能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40105.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40105.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40105.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過營銷本地化解鎖全球市場

在一個日益互聯的世界里&#xff0c;企業必須接觸到全球各地的不同受眾。營銷本地化是打開這些全球市場的關鍵。它包括調整營銷材料&#xff0c;使其與不同地區的文化和語言細微差別產生共鳴。以下是有效的營銷本地化如何推動您的全球擴張&#xff0c;并用實際例子來說明每一點…

UrbanGPT: Spatio-Temporal Large Language Models

1.文章信息 本次介紹的文章是2024年arxiv上一篇名為《UrbanGPT: Spatio-Temporal Large Language Models》的文章&#xff0c;UrbanGPT旨在解決城市環境中的時空預測問題&#xff0c;通過大語言模型&#xff08;LLM&#xff09;的強大泛化能力來應對數據稀缺的挑戰。 2.摘要 Ur…

SQLAlchemy批量操作數據

批量插入 session.bulk_insert_mappings(ModelClass, list(dict()))批量更新 session.bulk_update_mappings(ModelClass, list(dict())

Flutter的生命周期方法

Flutter的生命周期執行時機可以分為兩個主要部分&#xff1a;Flutter本身的組件生命周期&#xff08;widget生命周期&#xff09;和平臺相關的應用程序生命周期&#xff08;APP生命周期&#xff09;。 Widget生命周期 Widget生命周期可以細分為三個階段&#xff1a; 初始化階…

centos ssh一鍵升級到9.8版本腳本

背景 前端時間暴露出ssh漏洞&#xff0c;需要將服務器ssh版本&#xff0c;目前ssh版本最新版為9.8&#xff0c;故在服務器測試&#xff0c;準備將所有服務器ssh版本升級。腳本在centos7.6上親測可用。#!/bin/bash #Author Mr zhangECHO_GREEN() {echo -e "\033[32m $1...…

昇思MindSpore學習總結九——FCN語義分割

1、語義分割 圖像語義分割&#xff08;semantic segmentation&#xff09;是圖像處理和機器視覺技術中關于圖像理解的重要一環&#xff0c;AI領域中一個重要分支&#xff0c;常被應用于人臉識別、物體檢測、醫學影像、衛星圖像分析、自動駕駛感知等領域。 語義分割的目的是對圖…

【楚怡杯】職業院校技能大賽 “Python程序開發”賽項樣題三

Python程序開發實訓 &#xff08;時量&#xff1a;240分鐘&#xff09; 中國XX 實訓說明 注意事項 1. 請根據提供的實訓環境&#xff0c;檢查所列的硬件設備、軟件清單、材料清單是否齊全&#xff0c;計算機設備是否能正常使用。 2. 實訓結束前&#xff0c;在實訓平臺提供的…

從數據到智能,英智私有大模型助力企業實現數智化發展

在數字化時代&#xff0c;數據已經成為企業最重要的資源。如何將這些數據轉化為實際的業務價值&#xff0c;是每個企業面臨的重要課題。英智利用業界領先的清洗、訓練和微調技術&#xff0c;對企業數據進行深度挖掘和分析&#xff0c;定制符合企業業務場景的私有大模型&#xf…

篩選有合并單元格的數據

我們經常會使用合并單元格&#xff0c;比如下面表格&#xff0c;因為一個部門中會有不同的員工&#xff0c;就會出現如下表格&#xff1a; 但是當按部門去篩選的時候&#xff0c;會發現并不是我們預期的結果&#xff0c;部門列有空值&#xff0c;每個部門只有第一行數據可以被…

虛幻引擎 快速的色度摳圖 Chroma Key 算法

快就完了 ColorTolerance_PxRange為容差&#xff0c;這里是0-255的輸入&#xff0c;也就是px單位&#xff0c;直接用0-1可以更快 Key為目標顏色

PySide6 實現資源的加載:深入解析與實戰案例

目錄 1. 引言 2. 加載內置資源 3. 使用自定義資源文件&#xff08;.qrc&#xff09; 創建.qrc文件 編譯.qrc文件 加載資源 4. 動態加載UI文件 使用Qt Designer設計UI 加載UI文件 5. 注意事項與最佳實踐 6. 結論 在開發基于PySide6的桌面應用程序時&…

什么是 DDoS 攻擊及如何防護DDOS攻擊

自進入互聯網時代&#xff0c;網絡安全問題就一直困擾著用戶&#xff0c;尤其是DDOS攻擊&#xff0c;一直威脅著用戶的業務安全。而高防IP被廣泛用于增強網絡防護能力。今天我們就來了解下關于DDOS攻擊&#xff0c;以及可以防護DDOS攻擊的高防IP該如何正確選擇使用。 一、什么是…

個人引導頁+音樂炫酷播放器(附加源碼)

個人引導頁音樂炫酷播放器 效果圖部分源碼完整源碼領取下期更新內容 效果圖 部分源碼 //網站動態標題開始 var OriginTitile document.title, titleTime; document.addEventListener("visibilitychange", function() {if (document.hidden) {document.title "…

極客時間 - 《Linux 性能優化實戰》

極客時間 - 《Linux 性能優化實戰》原文鏈接&#xff1a;https://time.geekbang.org/column/intro/100020901 02 | 基礎篇&#xff1a;到底應該怎么理解“平均負載”&#xff1f;在Linux系統中&#xff0c;當一個進程啟動時&#xff0c;操作系統會為該進程申請哪些資源&#x…

Python學習從0開始——Kaggle實踐可視化001

Python學習從0開始——Kaggle實踐可視化001 一、創建和加載數據集二、數據預處理1.按name檢查&#xff0c;處理重復值&#xff08;查重&#xff09;2.查看存在缺失值的列并處理&#xff08;缺失值處理&#xff09;2.1按行或列查看2.2無法推測的數據2.3可由其它列推測的數據 3.拆…

QT實現GIF動圖顯示(小白版,可直接copy使用)

需要你自己提前設置好動圖的位置&#xff0c;本例中存放于"/Users/PLA/PLA/PLA.gif widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QLabel>class Widget : public QWidget {Q_OBJECTpublic:explicit Wid…

mysql數據表時間字段自動存時間

時間字段自動存時間&#xff0c;不用通過插入語句存當前操作時間&#xff1a; created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 創建時間,

深入分析 Android BroadcastReceiver (九)

文章目錄 深入分析 Android BroadcastReceiver (九)1. Android 廣播機制的擴展應用與高級優化1.1 廣播機制的擴展應用1.1.1 示例&#xff1a;有序廣播1.1.2 示例&#xff1a;粘性廣播1.1.3 示例&#xff1a;局部廣播 1.2 廣播機制的高級優化1.2.1 示例&#xff1a;使用 Pending…

空調計費系統是什么,你知道嗎

空調計費系統是一種通過對使用空調的時間和能源消耗進行監測和計量來進行費用計算的系統。它廣泛應用于各種場所&#xff0c;如家庭、辦公室、商場等&#xff0c;為用戶提供了方便、準確的能源使用管理和費用控制。 可實現功能 智能計費&#xff1a;中央空調分戶計費系統通過智…

SOLIDWORKS分期許可(訂閱形式),降低前期的投入成本!

SOLIDWORKS 分期許可使您能夠降低前期軟件成本&#xff0c;同時提供對 SOLIDWORKS 新版本和升級程序的即時訪問&#xff0c;以及在每個期限結束時調整產品的靈活性&#xff0c;幫助您跟上市場需求和競爭壓力的步伐。 目 錄&#xff1a; ★ 1 什么是SOLIDWORKS分期許可 ★ 2 …