vx:嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484170&idx=1&sn=3fa68d0fbf30cf614e8779abf38c3e2b&chksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1f&token=1923877603&lang=zh_CN#rdhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484170&idx=1&sn=3fa68d0fbf30cf614e8779abf38c3e2b&chksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1f&token=1923877603&lang=zh_CN#rd

具体功能实现

接通电源后,电机开始正转,转够一圈后,电机开始反转,同时在OLED上会显示forward和reverse分别表示正反转

STM32F103RCT6原理图

器件

STM32F103RCT6,OLED屏,十根杜邦线 ,ULN2003步进电机拓展版,28BYJ-48步进电机

正反转展示图

正转展示图

此时,OLED屏上显示forward,电机正转

反转展示图

此时,OLED上显示reverse,电机反转

03

知识介绍

驱动电机的方法

①1相励磁法:

每一瞬间只有一个线圈相通,其它休息。

优点:简单,耗电低,精确性良好。

缺点:力矩小,振动大,每次励磁信号走的角度都是标称角度。

1相励磁法  A->B->C->D

②2相励磁法:

每一瞬间有两个线圈导通。

优点:力矩大,震动小。

缺点:每励磁信号走的角度都是标称角度。

2相励磁法  AB->BC->CD->DA

③1-2相励磁法:

1相和2相交替导通。

优点)精度较高,运转平滑,每送一个励磁信号转动1/2标称角度,称为半步驱动。(前两种称为4相4拍,这一种称为4相8拍)

1-2相励磁法  A-->AB-->B->BC->C-->CD->D-->DA

正转和反转代码(1-2相励磁法)

逆时针:

u8 phasecw[8] =

{0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};

//1000,1100,0100,0110,0010,0011,0001,1001

顺时针:

u8 phaseccw[8]=

{0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};

// 顺时针

//1001,0001,0011,0010,0110,0100,1100,1000

上图是ULN2003步进电机驱动模块,可以看到上面的标号分别是A,B,C,D,因此代码我们可以按这个顺序来理解。

比如:AB是1100,BC是0110,CD是0011等

ULN2003电机驱动模块

上图为驱动模块原理图

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

步进电机采用五线四相直流电速电机

其中:电压为5V,步进角度为5.625°,减速比为1/64,所以步距角为5.625/64=0.087°

意思就是,电机内部的转自转过5.626°,但是由于减速64倍所以外部的轴只转动0.087°。所需脉冲是360/0.087=4096个,由于采用四相八拍驱动,因此八个脉冲为一个周期,所以外部转动一周需要4096/8=512个周期。

04

主函数代码(C语言)KEIL5实现

main.c(主函数代码)#include "stm32f10x.h"#include "delay.h"#include "step.h"#include "OLED.h"int main(void){Step_Motor_GPIO_Init();delay_init();OLED_Init();OLED_ShowString(1,1,"direction:");while(1){motorNcircle(1,true);//n为步进电机转动的圈数,position为正转或者反转delay_ms(20);motorNcircle(1,false);//n为步进电机转动的圈数,position为正转或者反转}}//step.c(电机驱动函数)#include "OLED.h"#include "stdbool.h"#include "sys.h"#include "delay.h"#include "step.h"u8 phasecw[8] ={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};// 逆时针//1000,1100,0100,0110,0010,0011,0001,1001u8 phaseccw[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};// 顺时针//1001,0001,0011,0010,0110,0100,1100,1000//引脚初始化void Step_Motor_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5;GPIO_Init(GPIOB,&GPIO_InitStructure);  }//引脚映射void SetMotor(unsigned char InputData){if(InputData&0x01){GPIO_SetBits(GPIOB,GPIO_Pin_5);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_5);}if(InputData&0x02){GPIO_SetBits(GPIOB,GPIO_Pin_6);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_6);}if(InputData&0x04){GPIO_SetBits(GPIOB,GPIO_Pin_7);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_7);}if(InputData&0x08){GPIO_SetBits(GPIOB,GPIO_Pin_8);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_8);}}//步距角5.625 360/5.625=64 减速比1/64//故64*64个脉冲转一圈//n圈数//position 方向void motorNcircle(int n,bool position)//n为步进电机转动的圈数,position为正转或者反转{int i,j,k=0;for(j=0;j<n;j++){for(i=0;i<64*5.625;i++){for(k=0;k<8;k++){if(1 == position){OLED_ShowString(2,1,"forward");SetMotor(phasecw[k]);}else{OLED_ShowString(2,1,"reverse");SetMotor(phaseccw[k]);}delay_ms(1);}}}}

工程文件请在前面vx处领取~

问题解答

Q

为什么stm32需要接ULN2003才能驱动?

A

因为stm32的电流还达不到步进电机所需的最小电流,而ULN2003可以增大stm32的电流,提高驱动能力

设计分享 | STM32F103RCT6利用ULN2003驱动步进电机正反转相关推荐

  1. 【Proteus仿真】Arduino+uln2003驱动步进电机+单按键启保停正反转控制

    [Proteus仿真]Arduino+uln2003驱动步进电机+单按键启保停正反转控制 Proteus仿真 功能实现 采用外部中断来获取按键信息 程序代码 #define LED ( 13 )#de ...

  2. 【Proteus仿真】Arduino UNO利用Stepper库实现uln2003驱动步进电机转动

    [Proteus仿真]Arduino UNO利用Stepper库实现uln2003驱动步进电机转动 Proteus仿真 Proteus说明 Proteus软件里面的步进电机的步距角默认是90,和代码中 ...

  3. 【Proteus仿真】Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制

    [Proteus仿真]Arduino UNO+uln2003驱动步进电机+按键启保停正反转控制 Proteus仿真演示 功能说明 正反转采用2和3 引脚外部中断,3和4引脚调节加减速. 示例程序代码 ...

  4. K_A07_002 基于 STM32等单片机驱动ULN2003模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 步进电机驱动时序 反向输出 对应程序: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+ULN2003模块 1.2 ...

  5. VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制

    VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制 Proteus仿真演示 基于51单片机,步进电机采用8节拍控制 VSM Studio代码 /* Main.c file g ...

  6. 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门

    ** 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速 ** 分享一个萌新入门小工程 一.原件连接: 第一种直接用51开发板 第二种用最小单元加unl2003驱动 二.开发板电路 ...

  7. STM32+ULN2003驱动步进电机

    选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动电路选用uln2003芯片的驱动板,其控制时序图如下: 四相八拍:A->AB->B ->BC -& ...

  8. K_A07_005 基于 STM32等单片机驱动 DRV8833 模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 步进电机驱动时序 对应程序: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+DRV8833模块 1.2.STM3 ...

  9. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 SETP时序 对应程序: 细分说明 程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+DRV8825模块 1. ...

  10. 单片机软件常用设计分享(二)驱动设计之LED灯显示设计

    单片机软件常用设计分享(二)驱动设计之LED灯显示设计 前言 <驱动设计–LED灯显示驱动> 一.LED灯工作方式 1.常亮 2.常灭 3.闪烁 4.间歇性闪烁 二.LED灯驱动数据结构 ...

最新文章

  1. selenium之窗口操作
  2. 关于养花---感叹一把
  3. js下拉 selenium_如何使用Python / Selenium webdriver处理Angularjs / Javascript下拉列表?
  4. centos7 转换为lvm_[转] centos7 调整XFS格式的LVM大小
  5. xshell vim 不能粘贴_编辑器之神——vim的入门指南
  6. undefined reference to
  7. 前端学习(1337):mongoDB文档查询
  8. ISA Server 2004 0x80004005错误
  9. 国家测绘局制定的测绘与地理信息行业标准统计 (20110706)
  10. TCP/UDP的区别
  11. 北方工业大学计算机科学与技术复试分数线,北方工业大学计算机学院 2016 年硕士生复试结果.pdf...
  12. 标准化建站开拓者王征,教你搭建一个有用的品牌官网
  13. mongodb分组统计
  14. gst 测试摄像头命令
  15. [知乎]山东:一枚神奇独一的“三棱锥”
  16. 【论文合集】2022年12月医学影像期刊论文合集
  17. 上海大学计算机专硕学制,上海大学一月专硕在职读研学制详解
  18. RN系列之五十三解决Android上图片圆角的终级解决方案
  19. 【python】RuntimeError: Set changed size during iteration 问题解决
  20. MOD8ID加密芯片的使用以及示例讲解

热门文章

  1. reimage许可证密钥_2019年7月24日,绝对真实的许可证密钥
  2. python连接oracle报错:DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: “
  3. 计算机ps基础知识大全,全国计算机ps一级考试题型
  4. Windows XP_修改登录背景图案
  5. vue 点击取消按钮关闭页面_vue 点击按钮弹窗,点击关闭按钮关闭弹窗。
  6. 阿里开源自研语音识别模型DFSMN
  7. PS换照片底色(三种方式)
  8. modelica变量初始值的定义
  9. webpack ——自定义Loader,将i18n英文单词首字母转大写
  10. 解决 微信小程序 input错位