用stm32驱动步进电机(一) ——使用ULN2003芯片

概述

随着嵌入式系统的发展,步进电机的使用开始激增,只要涉及到把物体从一个地方移动到另外一个地方,都少不了步进电机的身影。本教程以stm32为例,使用ULN2003,TB6600电机驱动板,A4988,DRV8825,介绍步进电机的常用驱动方式。

从ULN2003开始

首先从最简单的入手,用ULN2003芯片,来驱动这种淘宝单片机套件中经常见到(但其实并没有什么用处)的5V四相五线步进电机。

长这个样子

用了配套的驱动板,但其实可以直接把ULN2003芯片插面包板上使用

(不知道我这么打广告这家淘宝店给不给钱)

上面提到了四相五线,仔细看有一条红线,即为5V电源线,还有黄、橙、粉、蓝四线,即名字里的四相,每条线都连接了电机内部的一个线圈,转子可以看做是一个磁铁,给四个线圈依次通电,线圈通电产生磁性,使转子旋转。这里有几种信号的输入方法,参考了一个很不错的制作网站中的一个帖子,链接附在这里:howtomechatronics

如上图所示,当给其中一个线圈通电时,对应线圈变为红色,产生磁性,那么怎么才能给线圈通电呢?之前我们提到了五线中还有一条5V的电源线,那么当把某一线圈接地时,电流便会流过线圈,这样,ULN2003的作用就很明显了
——将对应引脚接地。

如下图所示,ULN2003的工作方式是这样的,正视芯片(缺口端朝上),左边最下面的引脚接地,当左边的引脚输入高电平时,右边与它平行的引脚接地,所以我们只要用stm32控制对应的引脚依次为高电平就可以让它转动起来了。

接线如下图所示,用了野火的f103ZET6的核心板&

  • 73
    点赞
  • 529
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
以下是一个基本的STM32利用ULN2003驱动步进电机停止程序: ```c #include "stm32f4xx.h" #define STEPPER_PORT GPIOA #define STEPPER_PIN1 GPIO_Pin_0 #define STEPPER_PIN2 GPIO_Pin_1 #define STEPPER_PIN3 GPIO_Pin_2 #define STEPPER_PIN4 GPIO_Pin_3 void delay(uint32_t count){ while(count--); } void stepper_stop(){ GPIO_ResetBits(STEPPER_PORT, STEPPER_PIN1 | STEPPER_PIN2 | STEPPER_PIN3 | STEPPER_PIN4); } void stepper_step(uint32_t steps){ uint8_t i; for(i = 0; i < steps; i++){ GPIO_SetBits(STEPPER_PORT, STEPPER_PIN1); delay(50000); GPIO_SetBits(STEPPER_PORT, STEPPER_PIN2); delay(50000); GPIO_SetBits(STEPPER_PORT, STEPPER_PIN3); delay(50000); GPIO_SetBits(STEPPER_PORT, STEPPER_PIN4); delay(50000); GPIO_ResetBits(STEPPER_PORT, STEPPER_PIN1 | STEPPER_PIN2 | STEPPER_PIN3 | STEPPER_PIN4); delay(50000); } stepper_stop(); } int main(){ GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = STEPPER_PIN1 | STEPPER_PIN2 | STEPPER_PIN3 | STEPPER_PIN4; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(STEPPER_PORT, &GPIO_InitStruct); stepper_step(1000); while(1); return 0; } ``` 在这个例子中,我们使用STM32F4 Discovery板和ULN2003驱动驱动步进电机。在main函数中,我们初始化GPIO并调用stepper_step函数来驱动步进电机转动1000步,然后进入一个无限循环。stepper_step函数使用四个GPIO引脚(STEPPER_PIN1, STEPPER_PIN2, STEPPER_PIN3和STEPPER_PIN4)来控制步进电机的转动。函数中使用了一个简单的delay函数来控制步进电机的转速。当步进电机完成指定的步数时,stepper_stop函数被调用来停止步进电机的转动,即将所有GPIO引脚重置为低电平。
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值