历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2019年01月09日 | STM32学习笔记——PWM基础知识与720电机驱动

2019-01-09 来源:eefocus

1. 定义

脉冲宽度调制:是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。(百度百科)它是一种对模拟信号电平进行数字编码的方法,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。


**SPWM波形:**脉冲宽度按正弦规律变化而和正弦波等效的 PWM 波形。


在这里插入图片描述


把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。根据冲量相等,效果相同的原理,PWM波形和正弦半波是等效的,如上图。


pwm的频率:指每秒钟信号从高电平到低电平再回到高电平的次数。


**占空比:**输出的PWM中,高电平保持的时间与该 PWM 的时钟周期的时间之比。


在这里插入图片描述

**分辨率:**是占空比最小能达到多少,如8位的PWM:理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)。


PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。


PWM 调制出的交流电压值主要取决于我们所控制的占空比(电压 = 占空比 X 幅值),调制出来的交流电压的波形精度取决于所设定的载波频率。


2. 电机驱动

对于 PWM 波的输出配置,可以参考STM32学习笔记一一PWM 输出


2.1 电路连接:


在这里插入图片描述


2.2 软件实现:

头文件:

#ifndef __MOTOR__H_

#define __MOTOR__H_


#include "system.h"


#define MOTOR1_PWM GPIO_Pin_6


#define MOTOR_PWMMAX 1000


void MOTOR_GPIO_Init(void);

void TIM3_PWM_Init(void);

void MOTOR_Control(int16_t motor1_pwm);


#endif

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


/******************************************************************************************

* 函  数:void MOTOR_GPIO_Init(void)

* 功  能:电机引脚初始化

* 参  数:无

* 返回值:无

* 备  注:TIM3 CH1(PWM1) -> PA6

*******************************************************************************************/

void MOTOR_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);


GPIO_InitStructure.GPIO_Pin = MOTOR1_PWM;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // GPIO复用推挽输出

GPIO_Init(GPIOA,&GPIO_InitStructure);

//GPIO_SetBits(GPIOA,MOTOR1_PWM);

}


/******************************************************************************************

* 函  数:void TIM3_PWM_Init(void)

* 功  能:定时器输出和PWM配置

* 参  数:无

* 返回值:无

* 备  注:TIM3 CH1

*******************************************************************************************/

void TIM3_PWM_Init(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定时器变量

TIM_OCInitTypeDef TIM_OCInitStructure; //输出比较结构体变量


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);


TIM_TimeBaseInitStructure.TIM_Period = 1000-1; //设置自动重装载的周期值;f=72M/1000=72KHz

TIM_TimeBaseInitStructure.TIM_Prescaler = 100; //设置预分频值

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式

TIM_OCInitStructure.TIM_Pulse = 0; //初始化占空比为0

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性高

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OC1Init(TIM3,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在ARR上的预装载寄存器


TIM_Cmd(TIM3,ENABLE);

}


测试:


#include "stm32f10x.h"

#include "led.h"

#include "systick.h"

#include "motor.h"


int main(void)

{

uint8_t dir=1;

uint16_t motor1_pwmval=0;

SysTick_Init();

LED_Init();

MOTOR_GPIO_Init();

TIM3_PWM_Init();


while(1)

{

USER_LED_ON();

delay_ms(500);

USER_LED_OFF();

delay_ms(500);



if(dir)

motor1_pwmval++;

else 

motor1_pwmval--;  

  if(motor1_pwmval>999)

dir=0;

if(motor1_pwmval==0)

dir=1;      

TIM_SetCompare1(TIM3,motor1_pwmval); //设置占空比0-999

}

}



连接好电路,下载程序,可观察到小电机停止–转动–停止循环。


推荐阅读

史海拾趣

Good Sky Electric Co Ltd公司的发展小趣事
Z32A、Z32K、Z3025J型摇臂钻床广泛应用于机械加工领域中的钻孔、扩孔、铰孔、平面及攻螺纹等工序。它们适用于小批生产和在装配、修理车间加工大、重型零件等场景,具有工艺先进、性能可靠、操作维修方便等特点。
Everspin Technologies公司的发展小趣事

Everspin的MRAM和STT-MRAM产品因其独特的数据持久性和非易失性特性,在数据中心和云存储市场中得到了广泛应用。超过1.2亿个MRAM和STT-MRAM产品被部署在这些市场中,为数据中心和云存储提供了高性能、高效率、可靠的系统解决方案。Everspin的产品在这些领域中的成功应用,进一步巩固了其在电子行业中的地位。

E-tec Interconnect Ltd公司的发展小趣事

随着全球对环境保护意识的提高,E-tec也积极响应这一趋势。他们投入资金进行环保设施的建设,采用环保材料和工艺进行生产。同时,E-tec还注重资源的循环利用和节能减排,通过一系列措施降低了生产过程中的能耗和排放。这些努力不仅为公司带来了良好的社会声誉,也促进了公司的可持续发展。

Hei Inc Optoelectronic Division公司的发展小趣事
根据实际应用环境的不同,需要考虑温度、湿度、振动等因素对控制电路的影响,并采取相应的防护措施。
德丰(DEFOND)公司的发展小趣事

德丰电创科技股份有限公司(简称“德丰电创”)自1984年成立以来,从一个东莞的洪梅电器厂逐步发展为一家专业从事开关制造到电子电路模块、机电一体化集成模组等多元化产品的大型港资实业公司。公司凭借多年的产品研发和高端制造经验,以及完善的供应链管理体系,成功在家用电器、电动工具、汽车等多个市场领域占据一席之地。德丰电创的发展历程充满了不断的技术创新和市场扩张,其产品质量和服务得到了全球客户的广泛认可。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

圜达实业于1985年在台湾新北市创立,创始人凭借对电子开关行业的深刻理解和前瞻视野,决定专注于研发制造各类程序开关、触动开关等产品。公司初创时期面临资金短缺、市场竞争激烈等挑战,但创始人凭借坚定的信念和不懈的努力,逐步在市场上站稳脚跟。

问答坊 | AI 解惑

高性能的廉价锂电池充电器电路

这个电路是原来给别人设计的,成本很低,充电效果很好,供一节锂电池充电使用。近几天看到很多朋友制作的简易充电器,效果不尽人意,不是电流限制不好就是电压不准!而这个电路是由一个抵压差恒流电路与一个由TL431组成的抵压差线形稳压电源的结合 ...…

查看全部问答>

电压电流转换电路,问题出在哪???

这是一个电压电流转换电路,在RZ2选通,RZ1 不焊的时候,接入电压电流转换电路,可实际XOA得不到电流,请高手分析下,错误在哪??…

查看全部问答>

《FPGA三国志》(二)CPLD的时代

我在12年前,偶然接触PLD,没有想到自己居然就在这个行当里安身下来。可是这个行业也的确是个飞速发展的行业,十多年过去后,从当初的接近十家主要供应商,到今天已经激烈搏杀后,只有差不多如论坛题目一样的,成为了今天三足鼎立的局面。想来想去, ...…

查看全部问答>

一些公司IC设计方向面试题

一些公司IC设计方向面试题1、我们公司的产品是集成电路,请描述一下你对集成电路的认识,列举一些与集成电路 相关的内容(如讲清楚模拟、数字、双极型、CMOS、MCU、RISC、CISC、DSP、ASIC、FPGA 等的概念)。(仕兰微面试题目) 2、FPGA和ASIC的 ...…

查看全部问答>

香港中文大学-ADS仿真电路

香港中文大学-ADS仿真电路…

查看全部问答>

总线选型请教

我们最近要为工厂开发一设备,每个车间大概有500以上节点,全厂最多可能有5000个节点左右。 节点和服务器通讯比较简单没有大量数据传输。 这种情况用485还是用CAN? 485和CAN成本大概差多少? 谢谢…

查看全部问答>

regedit.exe程序为什么不能运行?

在CE下运行regedit.exe失败,提示找不到REGEDTI或某一个组件?regedit还依赖其他的什么库文件吗?…

查看全部问答>

8位宽、16深度同步FIFO的设计

(1)ALU译码器(2)用LFSR设计一个20分频的简单分频器;(3)FSM设计,设计“101001”的序列检测器;(4)8位宽、16深度同步FIFO的设计4个入门级问题,告诉我编写的代码就OK了。Thx.…

查看全部问答>

请问哪位大神有keil c51的语法文件吗?

最近学习单片机编译器,但是却一直未能找到完整的c51的grammar file 。求大神分享!!(flex&bison描述的最好)预先谢谢大家啦…

查看全部问答>

dspic33fi128gp306 很多io口悬空会烧坏单片机吗?

最近用的别人设计的一个原理图,单片机dspic33fi128gp306 ,好多io口都悬空了。因为时间关系没有进行修改。自己做了个pcb,发现除开最开始的几个板子之一是正常的。其他板子在用icd3烧写程序的时候都是正常的,然后上电运行。立马短路了,vss和vdd ...…

查看全部问答>