stm32定时器输出比较----驱动步进电机

定时器输出比较理论

  • OC(Output Compare)输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能 

输出比较功能非常重要,主要用来输出PWM波形, PWM波形是驱动电机的必要条件,可以用来做智能车,机器人等项目

定时器配置

引脚配置,步进电机的驱动、方向、脉冲

/*** @brief  配置TIM复用输出PWM时用到的I/O* @param  无* @retval 无*/
static void Stepper_GPIO_Config(void) 
{GPIO_InitTypeDef GPIO_InitStruct;/*开启Motor相关的GPIO外设时钟*/MOTOR_DIR_GPIO_CLK_ENABLE();MOTOR_PUL_GPIO_CLK_ENABLE();MOTOR_EN_GPIO_CLK_ENABLE();/*选择要控制的GPIO引脚*/															   GPIO_InitStruct.Pin = MOTOR_DIR_PIN;	/*设置引脚的输出类型为推挽输出*/GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull =GPIO_PULLUP;/*设置引脚速率为高速 */   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/*Motor 方向引脚 初始化*/HAL_GPIO_Init(MOTOR_DIR_GPIO_PORT, &GPIO_InitStruct);	/*Motor 使能引脚 初始化*/GPIO_InitStruct.Pin = MOTOR_EN_PIN;	HAL_GPIO_Init(MOTOR_EN_GPIO_PORT, &GPIO_InitStruct);	/* 定时器通道1功能引脚IO初始化 *//*设置输出类型*/GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;/*设置引脚速率 */ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/*设置复用*/GPIO_InitStruct.Pull =GPIO_PULLUP;/*选择要控制的GPIO引脚*/	GPIO_InitStruct.Pin = MOTOR_PUL_PIN;/*Motor 脉冲引脚 初始化*/HAL_GPIO_Init(MOTOR_PUL_PORT, &GPIO_InitStruct);			
}

定时器初始化和输出比较模式(翻转模式)配置

初始化

void TIM_PWMOUTPUT_Config(void)
{TIM_OC_InitTypeDef  TIM_OCInitStructure;  	/*使能定时器*/MOTOR_PUL_CLK_ENABLE();TIM_StepperHandle.Instance = MOTOR_PUL_TIM;    /* 累计 TIM_Period个后产生一个更新或者中断*/		///当定时器从0计数到TIM_PERIOD-1,即为TIM_PERIOD次,为一个定时周期TIM_StepperHandle.Init.Period = TIM_PERIOD-1; //定时器时钟源TIMxCLK = 2 * PCLK1  //				PCLK1 = HCLK / 2 //				=> TIMxCLK=HCLK/2=SystemCoreClock/2*2=72MHz// 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=100KHzTIM_StepperHandle.Init.Prescaler = TIM_PRESCALER-1;/*计数方式*/TIM_StepperHandle.Init.CounterMode = TIM_COUNTERMODE_UP;            /*采样时钟分频*/	TIM_StepperHandle.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;   TIM_StepperHandle.Init.RepetitionCounter = 0 ;  		/*初始化定时器*/HAL_TIM_OC_Init(&TIM_StepperHandle);/*PWM模式配置--这里配置为输出比较模式*/TIM_OCInitStructure.OCMode = TIM_OCMODE_TOGGLE; /*比较输出的计数值*/TIM_OCInitStructure.Pulse = OC_Pulse_num;/*当定时器计数值小于CCR1_Val时为高电平*/TIM_OCInitStructure.OCPolarity = TIM_OCPOLARITY_HIGH;          /*设置互补通道输出的极性*/TIM_OCInitStructure.OCNPolarity = TIM_OCNPOLARITY_LOW; /*快速模式设置*/TIM_OCInitStructure.OCFastMode = TIM_OCFAST_DISABLE;   /*空闲电平*/TIM_OCInitStructure.OCIdleState = TIM_OCIDLESTATE_RESET;  /*互补通道设置*/TIM_OCInitStructure.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_OC_ConfigChannel(&TIM_StepperHandle, &TIM_OCInitStructure, MOTOR_PUL_CHANNEL_x);/* 确定定时器 */HAL_TIM_Base_Start(&TIM_StepperHandle);/* 启动比较输出并使能中断 */HAL_TIM_OC_Start_IT(&TIM_StepperHandle,MOTOR_PUL_CHANNEL_x);/*使能比较通道*/TIM_CCxChannelCmd(MOTOR_PUL_TIM,MOTOR_PUL_CHANNEL_x,TIM_CCx_ENABLE);}

定时器_回调函数_全部如下

/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions*  @brief   TIM Callbacks functions* @{*/
/* Callback in non blocking modes (Interrupt and DMA) *************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);
void HA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495148.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NLP 17、NLP的基础——分词】

我始终相信,世间所有的安排都有它的道理;失之东隅,收之桑榆 —— 24.12.20 一、中文分词的介绍 1.为什么讲分词? ① 分词是一个被长期研究的任务,通过了解分词算法的发展,可以看到NLP的研究历程 ② 分词…

Rust 在前端基建中的使用

摘要 随着前端技术的不断发展,前端基础设施(前端基建)的建设已成为提升开发效率、保障产品质量的关键环节。然而,在应对复杂业务场景与高性能需求时,传统的前端技术栈逐渐暴露出诸多不足。近年来,Rust语言…

谷歌浏览器的网络连接问题解决方案

在数字化时代,网络浏览器已成为日常工作和生活中不可或缺的工具。谷歌浏览器以其快速、稳定和丰富的功能深受用户喜爱。然而,就像其他软件一样,谷歌浏览器也可能遇到网络连接问题,这可能由多种因素引起。本文将为您提供一系列解决…

【Unity3D】Particle粒子特效或3D物体显示在UGUI上的方案

目录 一、RawImage Camera RenderTexture方式 (1)扩展知识:实现射线检测RawImage内的3D物体 (2)扩展知识:实现粒子特效显示RawImage上 二、UI摄像机 Canvas(Screen Space - Camera模式)方式 &#…

14-zookeeper环境搭建

0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg&#xff0…

精准提升:从94.5%到99.4%——目标检测调优全纪录

🚀 目标检测模型调优过程记录 在进行目标检测模型的训练过程中,我们面对了许多挑战与迭代。从初始模型的训练结果到最终的调优优化,每一步的实验和调整都有其独特的思路和收获。本文记录了我在优化目标检测模型的过程中进行的几次尝试&#…

贪心算法(三)

目录 一、k次取反后最大化的数组和 二、优势洗牌 三、最长回文串 四、增减字符串匹配 一、k次取反后最大化的数组和 k次取反后最大化的数组和 贪心策略&#xff1a; 解题代码&#xff1a; class Solution { public:int largestSumAfterKNegations(vector<int>&am…

基于Springboot的在线问卷调查系统【附源码】

基于Springboot的在线问卷调查系统 效果如下&#xff1a; 系统主页面 问卷列表页面 个人中心页面 系统登陆页面 管理员主页面 问卷管理页面 研究背景 随着互联网技术的飞速发展&#xff0c;传统的问卷调查方式因其时间和地点的限制&#xff0c;难以高效地收集到足够的数据。…

Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验

一、引言 随着人工智能技术的不断进步&#xff0c;传统的教学方式已经逐渐向智能化、互动化转变。在众多英语测试题型中&#xff0c;选择题作为一种高效的方式被广泛应用于各类培训与考试中。为了帮助学生高效学习与自测&#xff0c;本篇文章将采用Python编写一款基于 Python …

《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案

《三角洲行动》游戏运行时提示“缺失kernel32.dll”&#xff1a;问题解析与解决方案 作为软件开发领域的一名从业者&#xff0c;我深知电脑游戏运行过程中可能遇到的各种挑战&#xff0c;尤其是文件丢失、文件损坏以及系统报错等问题。今天&#xff0c;我将以经典游戏《三角洲…

【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理

文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…

AtCoder Beginner Contest 385(A~F)题解

A - Equally 思路&#xff1a;由题可知最多只能分成三组&#xff0c;我们只需要判断是否三个数都相等&#xff0c;或者两个数相加等于另外一个数即可 #include<bits/stdc.h> using namespace std; #define int long long int n; string s; int a,b,c; signed main() {ci…

STM32串口第一次接收数据时第一个字节丢失的问题

解决方法&#xff1a;开启中断之前&#xff0c;先清除标志位【1】。 串口清除标志位&#xff1a; __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定时器清除标志位&#xff1a; __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…

Unity3d 基于UGUI和VideoPlayer 实现一个多功能视频播放器功能(含源码)

前言 随着Unity3d引擎在数字沙盘、智慧工厂、数字孪生等场景的广泛应用&#xff0c;视频已成为系统程序中展示时&#xff0c;不可或缺的一部分。在 Unity3d 中&#xff0c;我们可以通过强大的 VideoPlayer 组件和灵活的 UGUI 系统&#xff0c;将视频播放功能无缝集成到用户界面…

第22天:信息收集-Web应用各语言框架安全组件联动系统数据特征人工分析识别项目

#知识点 1、信息收集-Web应用-开发框架-识别安全 2、信息收集-Web应用-安全组件-特征分析 一、ICO图标&#xff1a; 1、某个应用系统的标示&#xff0c;如若依系统有自己特点的图标&#xff1b;一旦该系统出问题&#xff0c;使用该系统的网站都会受到影响&#xff1b; 2、某个公…

我的 2024 年终总结

2024 年&#xff0c;我离开了待了两年的互联网公司&#xff0c;来到了一家聚焦教育机器人和激光切割机的公司&#xff0c;没错&#xff0c;是一家硬件公司&#xff0c;从未接触过的领域&#xff0c;但这还不是我今年最重要的里程碑事件 5 月份的时候&#xff0c;正式提出了离职…

acme ssl证书自动续签 nginx

参考 github 官方操作 &#xff0c;acme操作说明 说下我的操作 安装 acme.sh curl https://get.acme.sh | sh source ~/.bashrc 2.注册 acme.sh --register-account -m 123qq.com 如果你在配置 acme.sh 时选择了其他 CA&#xff08;如 Let’s Encrypt&#xff09;&#xff…

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏&#xff0c;写的好值得推荐&#xff0c;我整理的有所删减&#xff0c;推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…

简单了解函数递归

函数递归 一 了解函数递归二 深入理解函数递归的思想三 函数递归的优缺点 一 了解函数递归 首先&#xff0c;我们通过一个简单的代码来理解函数递归。 #include<stdio.h> int Func() {return Func(n1); } int main() {int n 5;Func(n);return 0; }这个就是函数递归&am…

QT的前景与互联网岗位发展

qt是用来干什么的 --》桌面应用开发&#xff08;做电脑的应用程序&#xff0c;面对客户端&#xff09;。 主要用于开发跨平台的应用程序和用户界面&#xff08;UI&#xff09;。它是一个全面的C库集合&#xff0c;提供了构建软件应用所需的各种工具和功能。 客户端开发的重…