使用stm32控制驱动步进电机
使用stm32控制步进电机
简述:根据使用正点原子教程结合csdn资源改过来的,正点原子精英版,控制器选用的是TB6600,电机随便选用的是28的。
一共包括三个文件,.h .c main文件
.h头文件主要是做函数声明一样的东西,.c源文件是主要的配置文件,main文件是主程序,调用已经配置好的资源产生相应的功能。
主要是利用.c文件中的定时器产生pwm波,通过控制器来控制步进电机,在很多的博文和资料中,已经说明,电机转速关联于pwm波的频率,具体不详述。
关于控制器与电机和板子之间的接线,采用的是共阴极接法。P+连接于板子上面的pwm波的输出IO口(A7),控制器共阴极后阴极线连接于
板子的GND。其他接线按照控制器说明书来搞
代码
主要如下:.c文件(下面的代码中文注释乱码了,不知道为啥,不影响)
#include "pwm.h"
void TIM3_PWM_Init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStruct;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_OCInitTypeDef TIM_OCInitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能AFIO和A口GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化IO口//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//重映射,这里没有用,是调试的时候搞得,注释掉了TIM_TimeBaseInitStruct.TIM_Period=arr;TIM_TimeBaseInitStruct.TIM_Prescaler=psc;TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Down;//向下计数TIM_TimeBaseInitStruct.TIM_ClockDivision=0;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);//设置TIM3TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;//pwm2或者1都可以TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;//低电平有效TIM_OC2Init(TIM3,&TIM_OCInitStruct);//通道2TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_Cmd(TIM3,ENABLE);//使能}
.h文件(arr和psc是计算频率的重要参数,频率调节转速
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
void TIM3_PWM_Init(u16 arr,u16 psc);#endif
main文件(下面 的代码中在TIM3__pwm_Init这句话时,就已经可以产生pwm波了,具体频率根据其他资源中的公式可以算出来,不详述,后面while(1)死循环中的是控制电机反转的和锁死的,反转只需要的D+(E+)中转换一个电平就可以了,其他注释掉的文件没用)
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "beep.h"
#include "pwm.h"int main(void){LED_Init();delay_init();LED1=0;TIM3_PWM_Init(899,199);while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_6);//换向delay_ms(500);GPIO_SetBits(GPIOB,GPIO_Pin_6);//再换向delay_ms(500);}
}
记住
添加相应的工程和路径和文件
2021年1月6号添加,关于在运行过程中控制电机停止转动,继续转动:
函数 TIM_SetCompare2(TIMx,y);
这个函数控制电机停止,在我自己的摸索过程中,发现为了一一对应,
需要将OC初始化 函数 中的 (TIM_OCInitStruct.TIM_OCMode)与占空比设置函数TIM_SetCompare2(TIMx,y);两者对应起来,比如采用PWM2模式(TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2),就需要用TIM_SetCompare2(TIMx,y);
相应的PWM1模式(TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1),就需要用TIM_SetCompare2(TIMx,y);
之后将TIM初始化过程中的计数模式函数:TIM_TimeBaseInitStruct.TIM_CounterMode和参数:y对应起来。比如
向下计数(TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Down)时,参数y为arr,可以让电机停转,y为0可以继续转动。
相应的采用向上计数模式(TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up),参数y为0则停止转动,为arr则继续转动。
使用stm32控制驱动步进电机相关推荐
- STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序
STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...
- STM32闭环步进电机驱动器方案,原理图,源码,PCB
STM32闭环步进电机驱动器方案,原理图,源码,PCB id=664404898534&
- 利用stm32控制步进电机 速度加速度控制
因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 利用stm32控制步进电机 尝试用42系步进电机做倒立摆,总结步进 ...
- STM32控制步进电机:工作原理及库函数(标准库) / HAL库控制程序(不定期更新)
STM32控制步进电机:工作原理并附带库函数/HAL库程序 一.步进电机的基本工作原理 1.步进电机工作原理 2.混合式步进电机工作原理 二.步进电机参数解析(后续学习会继续补充此处内容
- 【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)
本篇文章包含的内容 一.步进电机的结构和工作原理 1.1 步进控制系统的组成 1.2 步进电机简介 1.3 步进电机的分类 1.4 步进电机的工作原理 1.4.1 单极性步进电机(5线4相) 1.4. ...
- 基于STM32的步进电机实验
目录 基于STM32的步进电机实验 步进电机介绍 步进电机基础知识 步进电机参数说明 例题说明 基于28BYJ步进电机的介绍 28BYJ步进电机的配置流程 电机工作状态与引脚的关系 四相八拍的正向旋转 ...
- STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数
STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...
- 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享
设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...
- 步进电机c语言源代码 stm32,STM32控制步进电机源代码
单片机源程序如下: #include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "misc. ...
- stm32控制步进电机
本文使用DM542c驱动器驱动. 使用前注意根据实际情况调节拨码开关. 本文不会提到GPIO使能,请自行使能. 一.PWM操作驱动器使步进电机一直转 使能定时器时钟,并配置基本参数.下图以TIM3为例 ...
最新文章
- MariaDB 宣布成立基金会
- asp.net中上传文件实例
- 百万TPS高吞吐、秒级低延迟,阿里​搜索离线平台如何实现?
- HTML5拖放API
- 前端可视化编程:liveReload安装,sublime 3
- 时下最流行前端构建工具Webpack 入门总结
- WebView加载html页面
- python区域找图命令_python读取图片任意范围区域
- Ubuntu安装Gems报错的解决办法
- c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
- 微信小程序启动、更新机制
- 【开200数组解决二叉搜索树的建立、遍历】PAT-L3-016. 二叉搜索树的结构——不用链表来搞定二叉搜索树...
- Centos 添加swap
- Python的hasattr(),getattr(),setattr()
- extjs修改页面的内容关键问题
- 2012年中国40位40岁以下的商界精英榜单
- O2O供应链系统架构设计
- 电脑无线网络(WiFi)密码查看(cmd命令控制符)
- CSS - 语法规则
- C++编写COM组件