使用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控制驱动步进电机相关推荐

  1. STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序

    STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...

  2. STM32闭环步进电机驱动器方案,原理图,源码,PCB

    STM32闭环步进电机驱动器方案,原理图,源码,PCB id=664404898534&

  3. 利用stm32控制步进电机 速度加速度控制

    因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 利用stm32控制步进电机 尝试用42系步进电机做倒立摆,总结步进 ...

  4. STM32控制步进电机:工作原理及库函数(标准库) / HAL库控制程序(不定期更新)

    STM32控制步进电机:工作原理并附带库函数/HAL库程序 一.步进电机的基本工作原理 1.步进电机工作原理 2.混合式步进电机工作原理 二.步进电机参数解析(后续学习会继续补充此处内容

  5. 【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)

    本篇文章包含的内容 一.步进电机的结构和工作原理 1.1 步进控制系统的组成 1.2 步进电机简介 1.3 步进电机的分类 1.4 步进电机的工作原理 1.4.1 单极性步进电机(5线4相) 1.4. ...

  6. 基于STM32的步进电机实验

    目录 基于STM32的步进电机实验 步进电机介绍 步进电机基础知识 步进电机参数说明 例题说明 基于28BYJ步进电机的介绍 28BYJ步进电机的配置流程 电机工作状态与引脚的关系 四相八拍的正向旋转 ...

  7. STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...

  8. 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

    设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...

  9. 步进电机c语言源代码 stm32,STM32控制步进电机源代码

    单片机源程序如下: #include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "misc. ...

  10. stm32控制步进电机

    本文使用DM542c驱动器驱动. 使用前注意根据实际情况调节拨码开关. 本文不会提到GPIO使能,请自行使能. 一.PWM操作驱动器使步进电机一直转 使能定时器时钟,并配置基本参数.下图以TIM3为例 ...

最新文章

  1. MariaDB 宣布成立基金会
  2. asp.net中上传文件实例
  3. 百万TPS高吞吐、秒级低延迟,阿里​搜索离线平台如何实现?
  4. HTML5拖放API
  5. 前端可视化编程:liveReload安装,sublime 3
  6. 时下最流行前端构建工具Webpack 入门总结
  7. WebView加载html页面
  8. python区域找图命令_python读取图片任意范围区域
  9. Ubuntu安装Gems报错的解决办法
  10. c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
  11. 微信小程序启动、更新机制
  12. 【开200数组解决二叉搜索树的建立、遍历】PAT-L3-016. 二叉搜索树的结构——不用链表来搞定二叉搜索树...
  13. Centos 添加swap
  14. Python的hasattr(),getattr(),setattr()
  15. extjs修改页面的内容关键问题
  16. 2012年中国40位40岁以下的商界精英榜单
  17. O2O供应链系统架构设计
  18. 电脑无线网络(WiFi)密码查看(cmd命令控制符)
  19. CSS - 语法规则
  20. C++编写COM组件

热门文章

  1. 在线生成android ios icon,一键生成Android/Android-HD/IOS 多尺寸ICON
  2. 前端实现ICON图标生成器
  3. react 实现展示公司层级,选择人员的功能
  4. html中title属性和alt属性的区别
  5. 药品质量检测方法:电感耦合等离子体质谱仪
  6. 可能是最详细的Win10+黑苹果双系统安装教程(For Dell 7580)
  7. 三角色:程序员、技术主管与架构师
  8. 4款微信公众号编辑器,哪个最好用?
  9. UNDERSTANDING JINJA - 理解Jinja使用语法
  10. word替换向下箭头符号