历史上的今天
今天是:2024年10月23日(星期三)
2019年10月23日 | 使用MSP430G2 LaunchPad开发板连接步进电机的方法
2019-10-23 来源:eefocus
在本篇文章中,我们将介绍如何使用MSP430 LaunchPad开发板连接一个步进电机。 MSP-EXP430G2是德州仪器(TI)提供的开发工具,又名LaunchPad,用于学习和练习如何使用他们提供的微控制器。该开发板属于MSP430产品线,我们可以使用它对所有MSP430系列微控制器进行编程。如果您是MSP430的新手,请查看MSP430 LaunchPad的入门教程。
所需的材料
● MSP430 LaunchPad开发板
● 35BYJ46或28-BYJ48步进电机
● ULN2003驱动芯片
● 连接导线
● 面包板
步进电机
步进电机是一种无刷直流电机,可将电脉冲转换为不同的机械运动。步进电机的轴以不连续的步骤旋转。我们可以根据需要获得精确的步数和速度。

我们将使用市场上价格便宜的35BYJ46双极步进电机。它有6根电线,但也有5根电线的。步进电机有2个线圈。每个都有3根电线从中出来。在3根导线中,1根中心抽头,剩下2根导线直接与线圈连接。总共有4根信号线和2根中心抽头,用5-12V电源连接。
如果总共有5根电线从电机出来,则4根电线是信号线,1根电线中心抽到两个线圈。和下图一样。

要检查哪根导线是中心抽头或者哪根是信号线,您必须检查从电机出来的导线的电阻。因此,与中心抽头的电阻相比,连接同一根线圈的那些导线具有高电阻值。
在上图中,如果我们检查了蓝线和黄线的电阻值,它们之间的电阻大于黄线和红线或蓝线和红线之间的值。所以,红色线是中心抽头。
ULN2003步进电机驱动芯片
大多数步进电机只能在驱动模块的帮助下运行。这是因为控制器模块(在我们的情况下是MSP430)无法从其I / O引脚提供足够的电流以使电机运行。因此我们将使用像ULN2003模块这样的外部模块作为步进电机驱动。有许多类型的驱动模块,其中驱动模块的选择根据所用电机的类型而改变。所有驱动器模块的主要原理是为电动机提供足够的电流以使其运行。
在这个项目中,我们将使用ULN2003电机驱动器IC。 IC的引脚图如下:

我们使用4个输入端口和4个输出端口。
电路原理图

在上图中,步进电机的红线没有与IC的PIN5连接,该线必须连接到5V。步进电机的颜色代码可能与电路图中给出的颜色不同。因此,在检查正确的信号线后再连接导线。
我们将使用Energia IDE开发环境编写代码。它与Arduino IDE相同,易于使用。用于驱动步进器的示例代码也可以在Arduino IDE的示例菜单中找到。
代码和说明
在我们开始对MSP430进行编程之前,让我们了解一下程序内部的工作流程。我们将使用4步序列方法,因此将有四个步骤来执行一次完整的旋转。将A、B、C和D看作四个线圈。
在本篇文章中中,我们将编写MSP430步进电机代码。完整的程序可以在本文末尾处给出,下面将解释几段重要的代码。
步进电机每转的步数为32;因此我们在代码行中写入以下内容:
const int STEPS = 32;
接下来,您必须创建一个实例,在该实例中我们指定了连接步进电机的引脚。
Stepper myStepper (STEPS, 6, 7, 8, 9);
由于我们使用的是Stepper库,我们可以使用以下代码行设置电机的速度。对于35BYJ46步进电机,速度范围在0到200之间。
Mystepper.setSpeed(200);
现在,为了使电机向前移动一步,我们可以使用以下行。
myStepper.step(STEPS);
由于我们有32步和64作为齿轮比,我们需要移动2048(32 * 64 = 2048),以完成一次完整的旋转。现在,上传以下代码,然后根据您的需要更改前进的步数。

本篇文章使用的完整代码如下:
#include const int STEPS = 32; // change this to fit the number of steps per revolution // for your motor // initialize the stepper library on pins 6 through 9 or you can use any pins on MSP430: Stepper myStepper(STEPS, 6,7,8,9); void setup() { // set the speed at 200rpm or as you want: myStepper.setSpeed(200); } void loop() { myStepper.step(STEPS); } 本篇文章使用的完整代码如下:
史海拾趣
|
请教一下这个电路的U4A是什么类型的电路呢,怎么分析它呢,VSR/VAR是用电阻分压得到的一个稳定电压,在这起什么作用呢,还有他的输出为什么要接一个R24与C3的RC滤波呢,再接到比较器呢? 还有就是U4C是由单片机控制的上半周锯齿波发生器,这个我明 ...… 查看全部问答> |
|
我最近想实现s3c2440的USB device,哪位高手有经验,帮帮忙! 我最近想实现s3c2440的USB device,不知道有没有高手实现过,给点帮助,谢谢了,不是在Linux下,不带操作系统的。… 查看全部问答> |
|
Bios密码跟登陆密码不是一个,也就是说现在还是能正常使用。但还是挺闹心的,大家帮帮忙想想办法啊! 拿到厂里去的方法就不要说了,这个我也知道,我希望是一个我自己能解决的办法!先谢谢大家了! 我是新手,分不多,大家体谅啊!!… 查看全部问答> |
|
在ce6.0 nleddrvr.dll是如何生成的呢?在$CEROOT\\PUBLIC\\COMMON\\OAK\\DRIVERS\\NLEDDRVR目录生成的是nleddrvr_lib.lib。 SYSGEN_NLED = 1,SOURCE文件中 WINCETARGETFILES=dummy 就生成了?过程是怎样的呢?… 查看全部问答> |
|
在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多**条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师 ...… 查看全部问答> |
|
我想用DAM做USRAT1 发送,在发送下一个数据包之前,首先应该判断上一个数据包是否发送完毕。或者一个DMA通道分时复用IIC和USART通信,需要对上次的传输是否完成进行判断。使用了下面的判断语句:while (DMA_GetFlagStatus(DMA1_FLAG ...… 查看全部问答> |
|
地址宽度21位,是20-0?显示是21-0这个地方有没有问题,以前版本是地址宽度22,才是21~0。 [ 本帖最后由 tianma123 于 2012-4-27 11:20 编辑 ]… 查看全部问答> |




