STM32——用PWM控制电机
最近在研究电机,于是想写一篇文章来记录我的学习历程。下面是用PWM来驱动电机,涉及的电机驱动是L298N。
大概的思路:初始化连接电机的IO口,配置定时器的PWM模式,配置电机IO口的电平。
代码如下:
#include "moto.c"void MOTO_GPIO_Init(void)
{ /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*开启GPIO的外设时钟*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13; /*选择要控制的GPIO引脚*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*设置引脚速率为50MHz */ GPIO_Init(GPIOB, &GPIO_InitStructure); /*调用库函数,初始化GPIO*/ }//电机模式
void MOTO_Mode(char state)
{if(state == GO)//电机前进{GPIO_SetBits(GPIOB,GPIO_Pin_13);GPIO_ResetBits(GPIOB,GPIO_Pin_12);}if(state == BACK)//电机后退{GPIO_SetBits(GPIOB,GPIO_Pin_12);GPIO_ResetBits(GPIOB,GPIO_Pin_13);}if(state == STOP)//停转{GPIO_ResetBits(GPIOB,GPIO_Pin_12);GPIO_ResetBits(GPIOB,GPIO_Pin_13);}} void Car_Go(void)
{MOTO_Mode(GO);
}
#include "timer.h"void MOTO_PWM_Init(u16 arr, u16 psc)
{TIM_OCInitTypeDef TIM_OCInitSructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);TIM_TimeBaseStructure.TIM_Period = arr; //自动重新装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler = psc; //时钟分频系数TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //对外部时钟进行采样的时钟分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //参数初始化//TIM_ClearFlag(TIM3, TIM_FLAG_Update);//TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//配置pwm输出端口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//设置通道3 pwm参数TIM_OCInitSructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitSructure.TIM_OutputState= TIM_OutputState_Enable;TIM_OCInitSructure.TIM_Pulse = 2300; //设置比较值,控制占空比TIM_OCInitSructure.TIM_OCPolarity = TIM_OCPolarity_High;//当定时器计数值小于CCR1_Val时为高电平TIM_OC3Init(TIM3, &TIM_OCInitSructure);//参数初始化TIM_OC3PolarityConfig(TIM3, TIM_OCPreload_Enable);//开始输出pwmTIM_ARRPreloadConfig(TIM3, ENABLE);//启动自动重装TIM_Cmd(TIM3, ENABLE);//启动定时 }
main函数
#include "stm32f10x.h"
#include "moto.h"
#include "timer.h"
#include "sys.h"
#include "delay.h"int main()
{MOTO_GPIO_Init(); //初始化IOMOTO_PWM_Init(3599,0);//配置周期和预分频值delay_init();while(1){ Car_Go(); }}
若觉得这篇文章写得不错,可以点个赞嗷~
附源码PWM控制电机
下篇文章准备写用PID控制电机!想要的话可以关注哦!
STM32——用PWM控制电机相关推荐
- stm32电机控制定时器1_STM32通过PWM控制电机速度
做STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速.分享本文了解如何通过PWM实现对电机速度的控制. PWM控制电机速度的基本原理 PWM(Pulse Width Modulat ...
- 用电位器通过STC12C2052AD单片机片内AD和PWM控制电机无极变速
51CTO提醒您,请勿滥发广告! 用电位器通过STC12C2052AD单片机片内AD和PWM控制电机无极变速 http://51CTO提醒您,请勿滥发广告!/bbs/forum.php?mod=vie ...
- STM32 PWM控制电机寄存器配置
脉冲宽度调制PWM,实现对电机速度的控制. 1.PWM输出原理 假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值).当 CNT<CCRx ...
- STM32循迹小车系列教程(一)—— 使用PWM控制电机
本章节主要讲解直流减速电机控制原理,电机驱动电路,以及如何使用PWM控制直流减速电机 前言 1.软件准备:STM32CubeMx.Keil5_ MDK 2.硬件准备:STM32F103C8T6核心板. ...
- STM32通过PWM控制ESC30C电调
最近在搞一个水下推进器,这东西的控制其实跟四旋翼的螺旋桨控制差不多.但我也是第一次用STM32板子来控制电调驱动桨叶旋转,因此踩了很多坑.网上找了很多资料,但是很多都写的不是很清楚,这边稍微记录一下怎 ...
- 树莓派用c语言pwm控制电机,树莓派学习笔记之PWM控制直流电机转速
树莓派控制PWM控制电机转速 一.硬件 树莓派 12V直流电机 L298N电机驱动器 220V转12V变压器 二.连线 树莓派与L298N需要共地 L298N驱动模块 树莓派接线 三.树莓派pytho ...
- 定时器输出PWM控制电机(程序)
电机控制程序的三方面要点: 一.定时器的输出通道设置 二.电机频率的设定 三.占空比输入函数的设计 对于电机来说,转速与转向是最重要的表现.这里的程序是针对四个直流无刷电机来编写的. 控制四个电机,是 ...
- STM32用pwm开环控制电机如何接线(有图解)
使用STM32F103pwm控制电机 上一期我们讲了STM32F103pwm控制电机 ,这一期我教大家如何接线 传送门:https://blog.csdn.net/qq_52945606/articl ...
- (学习)基于STM32的PWM控制直流电机转速(CubeMX+HAL库)
使用到的各元件: 1.12V电源一个 2.单片机:STM32F103C8T6 3.直流电机4个 4.电机驱动模块:L298N 5.降压模块两个 6:杜邦线若干 对于直流电机的转动控制如下表 两边电平 ...
最新文章
- python使用matplotlib可视化subplots绘制子图、自定义几行几列子图,如果M行N列,那么最终包含M*N个子图、在指定的子图中添加可视化结果
- Oracle10g OEM乱码解决
- 单链表的逆序java_java 实现单链表的逆序
- CentOS安装libpcap
- 找出现实中符合这三种模式的互联网产品
- Coursera自动驾驶课程第10讲:Feedforward Neural Networks
- 偷梁换柱 | 无备份情况下的数据恢复实践
- winform 图片集合
- python进阶22再识单例模式
- 测试面经|从测试螺丝钉到大厂测试开发,三点成长心得和面试经验
- 最简单例子图解JVM内存分配和回收(转)
- 【转】移动前端工作的那些事---前端制作篇之框架篇--jqMobi框架
- 贪吃蛇代码--c语言版 visual c++6.0打开
- win10wifi多了数字_Win10 技巧:如何修改有线 / WiFi 网络优先级?
- 采样准则(时间采样与采样频率)的选取
- 互联网思维之用户思维
- 暴力电脑锁机生成器(加机械硬盘锁)
- 【MOOC】计算机网络与通信技术笔记(北交)(2)物理层
- python什么字体好看_七个不一样的Python代码写法,让你写出一手漂亮的代码
- 20191009 3. 史上最全的USB-PD充电协议,包含PD协议波形图
热门文章
- Glide 源码解析之监听生命周期
- js事件冒泡和传播详细解释
- window7_64安装STAF
- Composer中的ThingWorx模型定义—可视化
- 为什么VS2019的解决方案资源管理器中的文件名和文件夹名里的下划线不显示?
- Could not publish server configuration for Apache Tomcat v7.0.22 at localhos
- 图表示学习之时序的事件和节点动态
- So Different You Are
- The word 'jsp' is not correctly spelled. Eclipse 拼写检查出错处理办法
- HDU 5755 Gambler Bo(数论)