datasheet

STM32学习笔记——PWM基础知识与720电机驱动

2019-01-09来源: eefocus 关键字:STM32  PWM  电机驱动

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

}

}



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


关键字:STM32  PWM  电机驱动

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2019/ic-news010942846.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32程序移植技巧总结
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32学习笔记一一FLASH 模拟 EEPROM

1. 简述STM32 本身没有自带 EEPROM,但是 STM32 具有在应用编程(IAP:In Application Programming)功能,可以把它的 FLASH 当成 EEPROM 来使用。不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。MiniSTM32 开发板选择的 STM32F103RCT6 的 FLASH 容量为 256K 字节,属于大容量产品,闪存模块组织如下图:1.1 主存储器:该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。**注意:**小容量和中容量产品则每页
发表于 2019-01-09
STM32学习笔记一一FLASH 模拟 EEPROM

STM32学习笔记一一HEX文件和BIN文件格式

1. 引言今天看串口的 IAP ,平时我们通过 JTAG 等工具下载的都是 HEX 文件,都没有思考一下 HEX 的文件组成。而串口 IAP 下载的是 BIN 文件,刚好在这里区分学习一下。我们平时烧写 HEX 文件是不需要设置地址信息的,因为已经包含在文件里面,而使用 BIN 烧写,需要在程序中指定地址。2. 简述Intel hex 文件是记录文本行的 ASCII 文本文件,在 Intel HEX 文件中,每一行是一个 HEX 记录,由十六进制数组成的机器码或者数据常量。Intel HEX 文件经常被用于将程序或数据传输存储到 ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。2.1 HEX文件HEX 文件是包括
发表于 2019-01-09
STM32学习笔记一一HEX文件和BIN文件格式

STM32学习笔记一一串口 IAP

(Bootloader 程序)必须通过其它手段,如 JTAG 或 ISP 烧入;第二部分代码(APP 程序)可以使用第一部分代码 IAP 功能烧入,也可以和第一部分代码一起烧入,以后需要程序更新时再通过第一部分 IAP代码更新。他们存放在 STM32 FLASH 的不同地址范围,一般从最低地址区开始存放 Bootloader,紧跟其后的就是 APP 程序。2 .STM32程序流程2.1 STM32 正常的程序运行流程下图为 STM32 正常的程序运行流程:STM32 的内部闪存(FLASH)地址起始于 0x08000000,一般情况下,程序文件就从此地址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张
发表于 2019-01-09
STM32学习笔记一一串口 IAP

STM32学习笔记一一待机唤醒

1. 简述1.1 低功耗模式:在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如:等待某个外部事件时,常见的按键唤醒。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。1.2 STM32F10X系列的低功耗模式STM32F10xxx有三种低功耗模式:–模式– –特点—睡眠模式 Cortex-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行停止模式 所有的时钟都已停止待机模式 1.8V电源关闭在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需 2uA 左右的电流。停机模式
发表于 2019-01-09
STM32学习笔记一一待机唤醒

STM32学习笔记一一红外遥控

}2.2 中断捕获u8 RmtSta=0;u16 Dval;u32 RmtRec=0;u8 RmtCnt=0;void TIM5_IRQHandler(void){ if(TIM_GetITStatus(TIM5,TIM_IT_Update)!= RESET) { if(RmtSta&0x80)//数据接收到标志位 { RmtSta &= ~0x10;//取消上升沿捕获标记 if((RmtSta&0x0F)==0x00) RmtSta |= 1<<6; if((RmtSta&0x0F)<14) RmtSta++; else { RmtSt
发表于 2019-01-09
STM32学习笔记一一红外遥控

stm32按键轮循点灯

、stm32f10x_it.c二、这是我的流程图三、代码编写1.main.C/*****************************************************************************Copyright: (C)2018 武汉凌云嵌入式实验室 www.emblinux.com*Author:luoyiran  QQ: 969303624*Description: 本例在奋斗STM32 V5开发板上调通过;*按键      灯*KEY1-PC5  LED1-PB5*KEY2-PC2  LED2-PD6*KEY3-PC3 
发表于 2019-01-09
stm32按键轮循点灯

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">