PWM控制电机速度的基本原理
发布日期: 2024-04-07 | 作者:产品中心
做STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速。分享本文了解如何通过PWM实现对电机速度的控制。
PWM中有一个较为重要的概念,占空比:是一个脉冲周期内有效电平在整个周期所占的比例。
为了实现IO口上电压的持续性变化,能调节PWM的占空比。这也能够使外设的功率进行持续性变化,最终控制直流电机转速的快慢。如何调节PWM波形的输出就是重点。相关推荐:STM32中PWM的配置与应用详解。
上图中的ARR是我们给定时器的一个预装载值,CCRx的上下变化是产生PWM波的关键。我们假设ARR大于CCRx的部分输出为高电平(即t1-t2、t3-t4、t5-t6),ARR小于CCRx的部分输出为低电平(即0-t1、t2-t3、t4-t5),则改变CCRx的值就能改变输出PWM的占空比。因此,想要控制PWM的输出波形,重要的就是如何设置ARR与CCRx这两个寄存器的值了。
产生定时中断是定时器的用法之一,与定时器用来进行PWM输出和输入捕获相比,定时器中断更容易理解、掌握。
使用通用定时器进行中断的原理,其实和开发板Systick定时器进行中断延时很相似(Stm32入门——Systick定时器),即:用psc(预分频系数)设置好定时器时钟后,arr(预装载值)在每个时钟周期内减1,当arr减为0时触发中断然后进入中断处理程序进行中断处理。以下代码为例:
解释一下上面这行代码,由于定时器3(TIM3)是挂在APB1上的外设,所以要打开APB1,这里的预分频器值psc是来设置TIM3的时钟频率的,如果系统时钟(SYSTICK)频率为72MHz、psc为7199,则TIM3的时钟频率就为:
10KHz是什 么意思呢?就是一秒钟会产生10K个周期,那么一个周期的时间长度就是1/10KHz,如果你想将定时器中断的时间间隔设置为0.5秒,那么你将arr设置为5000即可,因为arr每减1就需要一个周期的时间,减5000次就经过了5000*(1/10KHz)=0.5秒。
再解释下上面这一行,设置允许更新中断,即arr减到0以后能触发更新中断,还有别的类型的中断。
看上面这行代码,中断优先级有抢占优先级和响应(即子优先级)优先级两种,抢占优先级即:若程序1正在使用CPU,这时如果程序2要求使用CPU,并且程序2的抢占优先级高,则CPU被程序2抢占;若两者抢占优先级相同,则就算程序2的响应优先级高于程序1,CPU也不能被抢占;若程序1正在使用CPU,程序2和程序3的抢占优先级等于或低于程序1,且程序2的响应优先级高于程序三,则待CPU空出后,程序2先运行,程序3最后运行。TIM3_IRQn是指定将要运行的中断处理程序号。“组2”是设置中断优先级分组的,是因为寄存器提供了四位来设置优先级,组2代表的是前两位给抢占优先级,后两位给响应优先级。
前面介绍完中断,再说一下PWM工作原理。与之相类似的文章:浅析PWM控制电机转速的原理。
假设上图中ARR大于CCRx时输出为高电平,ARR小于CCRx时输出为低电平,但在实际运用中可能并非如此,有很大的可能是相反的情况——ARR大于CCRx时输出为低电平,ARR小于CCRx时输出为高电平,至于到底是哪种情况,还要看PWM是哪种模式、有效电平又设置的是何种极性了。
模式1:ARR小于CCRx时输出为“有效”电平,ARR大于CCRx时输出为“无效”电平。
模式2:ARR小于CCRx时输出为“无效”电平,ARR大于CCRx时输出为“有效”电平。
这里说的是“有效”和“无效”,而不是“高”和“低”,也就是说有效电平可高可低,并非一定就是高电平。PWM模式、效电平极性,需要程序员自己配置相关的寄存器来实现。通过下面的代码来讲解。
上一小节讲过关于定时器参数的设置。使用定时器1的通道1来输出一路PWM波,这里的899设置的就是ARR的值,至于那个0是用来设置TIM1的频率的,不分频就代表TIM1的时钟频率和系统时钟相同,这里假设为72MHz。
这三行是用来设置PWM输出模式和设置通道的,通道是什么呢?简单地讲就是输出PWM波的GPIO口,代码一开始不是设置了PA8这个GPIO口嘛,这个PA8就是通道1。使用通道的话要先进行输入输出方向、通道使能的设置。
这行代码是用来设置“有效电平”极性的,根据手册,当TIM1->
CCER[1]这位置1时,有效电平为低电平,置0时有效电平为高电平,而默认情况下置0。
这行代码是用来使能ARPE,ARPE是什么呢,就是当它被置1时,你自己设置的CCRx会立即生效,如果它被置为0,那么你自己设置的CCRx值不会立即生效(可能之前ARPE已经有值了),而是当之前设置的CCRx生效后才会使用你最新设置的CCRx值。
上面的代码里没有对CCRx进行设置,是因为CCRx常常是一个变化的值,你可以在主函数中用一个for循环+if判断语句对它进行++或–的操作,进而达到连续改变CCRx值得目的,例如:
PWM波的周期是由定时器时钟频率和预装载值两者决定的,预装载值就是ARR。
预装载值PSC设置为899,那么,当定时器的当前值val从0增加到899时,一共经过了900个时钟周期,这900个时钟周期会产生一个PWM波形,也就是说900个定时器时钟周期才相当于一个PWM周期,那么PWM的频率就为72MHz/900=80KHz,周期为1/80KHz。
1 引言 开关电源体积小、重量轻、变换效率高, 因此大范围的应用于各种电子设备中。它体积小、重量轻、功率因数高,具有较高的工作效率,但结构过于复杂使它的应用受到一定的限制。下面就这样的一个问题提出一个可行的解决办法。 2 开关电源电流PWM控制的基础原理 电流控制的PWM技术是一种新颖的控制技术,1967年由美国BOSE公司提出。该技术有不同路线方案来实现,其共同特点是:利用电感电流的反馈直接去控制功率开关的占空比,以实现峰值电流对电压反馈的跟踪。下面我们就通过一系列分析利用电流控制的PWM降压变换器来了解这一技术的基础原理。 图1给出了电流控制的PWM降压变换器的基本组成。 图1电流控制的PWM降压变换器的基本组成 从
一. 简述STM32中的看门狗系统 STM32F10xxx内置两个看门狗,一个是IWDG(独立看门狗),一个是WWDG(窗口看门狗),两个看 门狗设备(可用来检测和解决由软件错误引起的故障。 当计数器达到给定的超时值时,IWDG会产生系统复位。而WWDG会触发中断。这篇文章主要讲解一下IWDG。 二. 关于 独立看门狗IWDG 1. 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟出现故障它也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 2. IWDG主要性能 自由运行的递减计数器 时钟由独立的RC振荡器提供(可在
今天学完STM32的SysTick时钟,(24位递减计数器)现在总结如下: 首先SysTick时钟包含一下四个寄存器 (1),STK_CSR 地址为0xE000E010 ----控制寄存器 STK_CSR中有以下四位具有意义,使用的时候需要配置 (1),第0位:SysTick使能位(0-关闭功能,1-开启功能) (2),第1位:SysTick中断使能位(0-关闭中断,1-开启中断) (3),第2位:SysTick时钟源选择(0-使用HCLK/8作为时钟(8分频),1-使用HCLK作为时钟) (4),第16位:SysTick技术比较标志(如果计数到达0,则该位为1,否则为零)
独立看门狗Iwdg 有独立时钟(内部低速时钟LSI---40KHz),所以不受系统硬件影响的系统故障探测器。大多数都用在监视硬件错误。 窗口看门狗wwdg 时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了,大多数都用在监视软件错误。 一,独立看门狗 看门狗定时时限= IWDG_SetReload()的值 / 看门狗时钟频率 看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数 1.STM32 独立看门狗IWDG的时限定为280微秒。这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微小的变化。 /* IWDG timeout equal to 280 ms (the timeout may varies
什么是端口复用? STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO若能复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 例如: 串口1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。 复用功能的配置: 以下端口复用配置过程以PA9,PA10配置为串口1为例GPIO端口时钟使能。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 复用外设时钟使能。比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟
的端口复用和重映射 /
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就不难得知,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可大致分为几个区: 栈区(stack) 堆区(Heap) 全局区(static) 文字常亮区程序代码区 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 普通单片机与STM32单片机中堆栈的区别 普通单片机启动时,不需要用b
单片机堆栈 /
STM32 CAN模块使用详解.重点介绍以STM32F103E系列芯片为基础介绍CAN 总线的使用方法。CAN 总线在控制领域使用的十分普遍,如今大多数CPU芯片外围都扩展CAN接口。 1. 硬件基础 CAN总线工作需要两根数据线,RX和TX,即为输入总线和输出总线。一般CPU与外界通信需要接一个驱动芯片(这点很像UART接口),常用的CAN芯片主要有:SN65VHD230、PCA82C250T等,本系统使用SN65VHD230作为CAN接口芯片。而CPU提供的CAN接口为CAN_L和CAN_H。 2. 软件设计 在进行软件设计时,我们第一步来看这样的一个结构体: typedef struct { uint32_t StdId;
STM32F1xx官方资料: 《STM32中文参考手册V10》-第14章 通用定时器 通用定时器输入捕获概述 输入捕获的工作原理 在通用定时器框图中,主要涉及到最顶上的一部分(计数时钟的选择)、中间部分(时基单元)、左下部分(输入捕获)这三个部分。这里主要讲解一下左下部分(输入捕获),其他两个部分可以借鉴文章:【STM32】通用定时器的基础原理(实例:定时器中断)。 输入捕获模式可拿来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6、TIM7,其他的定时器都有输入捕获的功能。下面以一个简单的脉冲输入为例,简单地讲述一下输入捕获用于测量脉冲宽度的工作原理: 先设置输入捕获为上升沿检测,记录
】通用定时器的输入捕获(实例:输入捕获) /
及其控制 (寇宝泉,程树康编著)
FOC控制管理系统设计
使用STM32 Nucleo撬开针对物联网的ARM mbed IDE之门
【下载】LAT1396 STM32CubeIDE实用技巧之STM32H7双核调试的配置
【下载】LAT1343 STM32H5 USBD Classic驱动 CDC移植
【下载】LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤
【直播】4月11日,STM32Trust如何帮助新产品设计提升信息安全保护能力
【线日,基于Buildroot制作STM32MP13启动镜像-深圳/厦门/西安/郑州/苏州
【新品】STM32U0新一代超低功耗入门级MCU,助力终端产品省电,安全,BOM成本低
【新品】 STM32H7R/S基于Cortex-M7,运行频率高达600 MHz,板载闪存型MCU 拥有高速的外部存储
【新品】STM32WBA54/55 支持BLE5.4、IEEE 802.15.4通信协议、Zigbee®、Thread和Matter协议
【新品】STM32MP2 最高配备双核Arm® Cortex®-A35和Cortex®-M33的STM32MP2系列微处理器
【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性
12 1 概述实时时钟RealTimeClock(简称RTC),实时时钟芯片是日常生活中应用最为广泛的消费类电子科技类产品之一。它为人们提供精确的实时时间, ...
16 3 5 自身地址寄存器1:I2Cx_OAR76543210ADDMODE-ADD[9:8]ADD[7:1]ADD0Bit 15:寻址模式(从模式)0:7位从地址(不响 ...
一、前言在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了尽最大可能避免这种情况的出现,后期的MCU都集成了看门狗 ...
01前言在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我们节省了很多硬件和时间成本,可以更直观的看 ...
第一步:具体配置如下图:第二步:能够准确的通过自身需要在NVIC 中断控制器中配置中断响应优先级。这里的配置办法能够参考前面几章!第三步:代 ...
站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程
上一篇:直流电动机的基本原理