stm32之測量占空比

#include "tim4.h"void TIM4_Init(void)
{// 開啟時鐘RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使用 TIM4 的 GPIOB 時鐘// 配置 PB6 為浮空輸入 CNF 01 MODE 00GPIOB->CRL &= ~GPIO_CRL_MODE6;GPIOB->CRL &= ~GPIO_CRL_CNF6_1;GPIOB->CRL |= GPIO_CRL_CNF6_0; // 浮空輸入// 定時器時基部分// 預分頻71TIM4->PSC = 71;// 自動重裝載值 1000TIM4->ARR = 65535; // 65535 是最大值,計數到這個值后會重裝載// 向上計數TIM4->CR1 &= ~TIM_CR1_DIR;// TI1輸入選擇直通TIM4->CR2 &= ~TIM_CR2_TI1S; // 輸入濾波器TIM4->CCMR1 &= ~TIM_CCMR1_IC1F; // 無濾波// 配置邊沿檢測器極性上升沿觸發TIM4->CCER &= ~TIM_CCER_CC1P;// 配置邊沿檢測器極性下降沿觸發TIM4->CCER |= TIM_CCER_CC2P;// 選擇通道1的輸入映射為TI1 01TIM4->CCMR1 &= ~TIM_CCMR1_CC1S; // 清除 CC1S 位TIM4->CCMR1 |= TIM_CCMR1_CC1S_0; // 選擇通道2的輸入映射為TI1 10TIM4->CCMR1 |= TIM_CCMR1_CC2S; // 清除 CC2S 位TIM4->CCMR1 &= ~TIM_CCMR1_CC2S_0;// 預分頻器TIM4->CCMR1 &= ~TIM_CCMR1_IC1PSC; // 無預分頻TIM4->CCMR1 &= ~TIM_CCMR1_IC2PSC; // 無預分頻// 配置觸發輸入信號101TIM4->SMCR |= TIM_SMCR_TS; // 清除 TS 位TIM4->SMCR &= ~TIM_SMCR_TS_1; // 選擇觸發輸入為 TI1// 配置從模式為復位模式100TIM4->SMCR &= ~TIM_SMCR_SMS; // 清除 SMS 位TIM4->SMCR |= TIM_SMCR_SMS_2; // 設置為復位模式// 通道1輸入捕獲使能TIM4->CCER |= TIM_CCER_CC1E;// 通道2輸入捕獲使能TIM4->CCER |= TIM_CCER_CC2E;
}void TIM4_START(void)
{TIM4->CR1 |= TIM_CR1_CEN; // 啟動定時器
}void TIM4_STOP(void)
{TIM4->CR1 &= ~TIM_CR1_CEN;
}// 獲取 輸入 周期為ms
double TIM4_GETPWMCYCLE(void)
{return TIM4->CCR1 / 1000.0; // 假設計數器時鐘為 1MHz
}double TIM4_GETPWMFREQ(void)
{return 1000000.0 / TIM4->CCR1;
}double TIM4_GetDutyCycle(void)
{return (TIM4->CCR2 * 1.0) / TIM4->CCR1; // 假設 CCR2 是捕獲的高電平時間
}

在這里插入圖片描述

定時器 TIM4 被配置為從模式復位模式(TIM_SMCR_SMS = 100),并且觸發輸入選擇為 TI1(TIM_SMCR_TS 設置為 101)。

1. 復位模式的觸發機制

  • 在復位模式下,計數器 (CNT) 會在檢測到指定的觸發輸入事件時立即清零。
  • TIM_SMCR_TS 被設置為 101,表示觸發輸入源是 TI1 的邊沿(上升沿或下降沿取決于 TIM_CCER_CC1PTIM_CCER_CC2P 的極性配置)。
  • TIM_CCER_CC1P = 0(上升沿觸發),TIM_CCER_CC2P = 1(下降沿觸發):
    • 通道 1 (CC1) 捕獲 TI1 的上升沿。
    • 通道 2 (CC2) 捕獲 TI1 的下降沿。

2. 代碼中的配置

  • 觸發輸入 TI1TIM_SMCR_TS = 101 選擇 TI1 作為觸發源。TI1 是輸入 PWM 信號的濾波和映射后的信號。
  • 復位模式TIM_SMCR_SMS = 100 計數器會在 TI1 的上升沿觸發時復位。
  • CNT 行為:計數器從 0 開始計數,當 TI1 檢測到上升沿時,CNT 會立即清零。

3. 高電平與復位的關系

  • PWM 信號的高電平是從上升沿開始到下降沿結束。
  • 在你的配置中,復位是由 TI1 的上升沿觸發的(因為 TIM_CCER_CC1P = 0 選擇上升沿)。這意味著:
    • 當 PWM 信號從低電平跳到高電平(上升沿發生)時,計數器 (CNT) 會被復位。
    • 復位發生在高電平的開始時刻,而不是整個高電平期間。
  • 之后,CNT 會從 0 開始計數,直到下一次觸發或達到 ARR。

4. 代碼中的捕獲邏輯

  • TIM4->CCR1 捕獲上升沿時間(高電平開始)。
  • TIM4->CCR2 捕獲下降沿時間(高電平結束)。
  • 由于 CNT 在每次上升沿復位,CCR1 總是記錄 0(或很小的值),CCR2 記錄高電平持續時間。

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

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

相關文章

工廠模式 - Flutter中的UI組件工廠,按需生產各種“產品

想要動態創建不同風格的按鈕?想一鍵切換整個主題?工廠模式就是你的"生產流水線"! 想象一下這個場景: 你決定擴大奶茶店業務,推出兩個品牌系列: 經典系列:傳統珍珠奶茶,紅…

基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 論壇設計與實現7000字論文

基于 SpringBootVue.jsElementUI 的 Cosplay 論壇設計與實現 摘要 本論文設計并實現了一個基于 SpringBoot、Vue.js 和 ElementUI 的 Cosplay 論壇平臺。該平臺旨在為 Cosplay 愛好者提供一個集作品展示、交流互動、活動組織于一體的綜合性社區。論文首先分析了 Cosplay 論壇…

超標量處理器11-Alpha21264 處理器

1. 簡介 21264處理器是一款4-way,亂序執行的超標量處理器,采用0.35um的CMOS工藝,工作電壓是2.2V, 工作頻率是466-667MHz; 處理器能支持60條指令,也即ROB的深度是60; Load/Store指令也采取亂序執行, 總共7級流水。I-CACHE和D-CACH…

Spring 中 Bean 的生命周期

一、什么是 Bean 生命周期? Spring 中的 Bean 生命周期是指一個 Bean 從 被容器創建到 最終銷毀 所經歷的一系列過程。 它體現了 Spring IOC 容器在管理 Bean 實例時所執行的各個鉤子流程,包括初始化、依賴注入、增強處理、銷毀等多個環節。 二、Bean 生…

C++ 中 std::string 與 QString 的深度剖析

在 C 編程領域,std::string 和 QString 是兩種廣泛應用的字符串類型,它們在設計理念、功能特性以及適用場景上都呈現出鮮明的特點。本文將從多個維度對這兩種字符串類型進行深度剖析,并詳細闡述它們之間的相互轉化方法。 std::string 是 C 標…

不止于“修補”:我如何用Adobe AI重塑設計與視頻敘事流程

最近我深度體驗了一把來自英國Parvis School of Economics and Music的Adobe正版教育訂閱,在把玩PhotoShop、Premiere Pro這些“老伙計”的新功能時,的確挖到了一些寶藏,覺得非常有必要與大家說道說道。首先得聊聊這個訂閱給我的直觀感受&…

重頭開始學ROS(5)---阿克曼底盤的URDF建模與Gazebo控制(使用Xacro優化)

阿克曼底盤的URDF建模與Gazebo控制(使用Xacro優化) 阿克曼底盤建模 建模 我們使用后輪驅動,前輪轉向的阿克曼底盤模型。 那么對于后輪只需進行正常的continous joint連接即可 對于前輪,有兩個自由度,旋轉和轉向&…

RabbitMq中啟用NIO

? 所屬類 com.rabbitmq.client.ConnectionFactory🧠 使用背景 RabbitMQ Java 客戶端默認使用傳統的 阻塞 I/O (java.net.Socket) 實現。如果你希望: 更好地控制 線程數獲得更好的 并發性能降低 每個連接的線程占用在高并發連接或消費者數量較多的系統…

[Dify]-基礎篇2- 如何注冊并快速上手 Dify 平臺

在生成式 AI 應用開發新時代,如何快速搭建一個高效、可維護、易上線的 AI 工具,是每位開發者關注的核心。Dify,正是為此而生的一站式平臺。本篇將以新手視角,帶你從注冊賬號、配置環境,到構建應用、部署上線,手把手完成你的第一個 AI 項目。 注冊并設置工作環境 1. 賬號…

Java面試寶典:基礎七

153. 如何實現對象克隆? 答: 對象克隆有兩種主要方式: 淺克隆:實現Cloneable接口并重寫Object.clone() class Person implements Cloneable {String name;Car car; // 引用類型@Override

spring-security原理與應用系列:requestMatchers和authorizeRequests

目錄 簡單示例 WebSecurityConfig requestMatchers ???????requestMatchers ???????antMatchers ???????chainRequestMatchers ???????setMatchers ???????requestMatcher ???????WebSecurity ???????performBuild…

Bessel位勢方程求解步驟

問題 考慮偏微分方程(PDE): ? Δ u u f , x ∈ R n , -\Delta u u f, \quad x \in \mathbb{R}^n, ?Δuuf,x∈Rn, 其中 f ∈ L 2 ( R n ) f \in L^2(\mathbb{R}^n) f∈L2(Rn)。這是一個線性橢圓型方程,稱為 Bessel 位勢方…

if __name__ == ‘__main__‘:

基本概念 if __name__ __main__: 是一個條件判斷語句,用于確定當前模塊是作為主程序運行,還是被其他模塊導入。 __name__ 變量 __name__ 是Python的一個內置變量,表示當前模塊的名稱當一個模塊被直接運行時,__name__ 的值會被…

淺談Apache HttpClient的相關配置和使用

Apache HttpClient是由Apache軟件基金會維護的一款開源HTTP客戶端庫,對比最基礎的 HttpURLConnection 而言,它的優勢時支持連接池管理,攔截器(Interceptor)機制,同步/異步請求支持等能力。 在使用這個組件時&#xff…

【Teensy】在ArduinoIDE中配置Teensy4.1

1.文件——首選項 在其他開發板管理器地址這里添加: https://www.pjrc.com/teensy/package_teensy_index.json 點擊確定! 2.安裝Teensy(for Arduino IDE…) 按照圖中1,2,3操作!可以選擇上一個版本(不使用最…

企業自建云概念解讀|私有云、專有云、混合云、分布式云、企業云

隨著云計算技術逐漸成熟,越來越多的企業開始在本地數據中心自行搭建云平臺,滿足數據合規、業務性能與連續性、節約成本等多方面的需求。不過,面對多種多樣的自建云產品,不少用戶會有類似的疑問:自建云等于私有云嗎&…

反彈 Shell 升級為全交互終端的兩種高效方法

目錄 ?? 升級反彈 Shell 為全交互終端:兩種高效方法 ??? 方法 1:利用 Python pty.spawn 創建偽終端 ?? 操作步驟

Hyper-YOLO: When Visual Object Detection Meets Hypergraph Computation論文精讀(逐段解析)

Hyper-YOLO: When Visual Object Detection Meets Hypergraph Computation論文精讀(逐段解析) 論文地址:https://arxiv.org/abs/2408.04804 CVPR 2024 Yifan Feng, Jiangang Huang, Shaoyi Du, Senior Member, IEEE, Shihui Ying, Jun-Hai Y…

Windows 下配置多個 GitHub 賬號的 SSH Key

Windows 下配置多個 GitHub 賬號的 SSH Key 假設你有以下兩個 SSH key 文件: 第一個賬號:id_rsa(默認)第二個賬號:id_rsa_github ? 步驟:在 Windows 上配置多個 GitHub 賬號 SSH Key 1?? 打開 SSH 配…

技術選型:時序數據庫(三)

IoTDB vs InfluxDB vs TDengine 時序數據庫橫評對比。 從 架構設計、性能、功能、生態、適用場景 等維度,對三款時序數據庫進行深度對比,助您精準選型。 一、核心架構對比 數據庫 存儲模型 數據模型 擴展性 Apache IoTDB 分層存儲(TsFi…