STM32
登录
直播中
江左盟
8年用户
1375经验值
擅长:电源/新能源
私信
关注
[问答]
基于uln2003芯片的步进电机其控制时序是怎样的
开启该帖子的消息推送
ULN2003
步进电机
芯片
基于uln2003芯片的步进电机其控制时序是怎样的?
基于uln2003芯片的步进电机是如何接线的?
回帖
(1)
齐镭
2021-12-22 15:51:14
选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动威廉希尔官方网站 选用
uln2003芯片的驱动板,其控制时序图如下:
四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA
其A、B、C、D指的是uln2003芯片驱动板的1N1、1N2、1N3、1N4
,波形在上表示有输入信号,波形在下表示无输入信号。
我们采用红牛开发板进行步进电机控制,为了便于接线,我们需要在红牛开发板上焊接两
此外至少需要4根杜邦线,还需提供一个5V的直流电源,接线方式如下:
PC4接IN1
PC5接IN2
PC6接IN3
PC7接IN4
5V电源连接
网友fangyuan和奋斗中写了一个纯.NET MF C
#的控制代码,比较容易理解,但是由于是托管代码,需要虚拟机解释执行,所以运行效率
较低,部分代码如下:
//四相八拍:A->AB->B->BC->C->CD->D->DA
while (true)
{
//A相输出高电平,BCD低
pios[0].Write(high);
pios[1].Write(low);
pios[2].Write(low);
pios[3].Write(low);
Thread.Sleep(sleepTime);
//AB相输出高电平,CD低
pios[0].Write(high);
pios[1].Write(high);
pios[2].Write(low);
pios[3].Write(low);
Thread.Sleep(sleepTime);
… …
}
详细内容请参见fangyuan的博客文章《【.NET MF 学习笔记系列(一)】MF
控制步进电机》。
由于步进电机一般都采用PWM控制,我最初也打算这么做,STM32
系列的芯片的时钟控制器是可以输出4路PWM的,但是研究后我觉得采用uln2003
芯片的驱动板是无法实现PWM控制的。如果硬要采用PWM控制,其中一路的PWM
(占空比)是可以实现的,但是其它三路,无法调整相位,所以目前我无法输出占空比相?
???窍辔徊煌?牟ㄐ巍?
我调整了一下思路,实现了所谓的IO Timer功能,就是采用Timer定时中断,定时处理C
#上层的IO输出要求,底层代码暂且不说了,先说一下封装后的上层接口。
public sealed class IOTimer
{
public static bool Initialize(byte timer, int Compare, int psc, byte[
] pins, byte[] states);
public static bool SetPSC(byte timer, int psc);
public static bool Start(byte timer);
public static bool Stop(byte timer);
public static bool Uninitialize(byte timer);
}
STM32F103芯片有8个定时器,其中timer1和timer8暂且不要用,timer的取值为1~6。
timer1和timer8连接APB2总线,其它定时器连接APB1总线,APB1操作速度限于36MHz,
APB2操作于全速(最高72MHz)。Compare是计数器数值,16位最大65535,psc
预分频器数值,也是16位的,最大为65535,计数器的时钟频率CK_CNT是fCK_PSC/(PSC[15
:1]+1)。
Psc可以实时动态调整。
Pins数组存放要设置的IO的pin脚号,一次最多可以控制8路,states数组存放IO
的输出状态,最多可以有32个状态值,一个字节的每一位控制每一路。
Start就是计时器开始工作,IO此时输出,Stop就是定时器停止工作,IO停止输出。
好了,在实际控制步进电机之前,我们先控制一下LED灯,让它亮一秒,灭3秒(
红牛开发板,输出0灯亮),相关代码如下:
//LED灯控制(定时器timer6)
byte[] pins = new byte[] { (byte)GPIO_NAMES.PF7 };
//亮一秒,灭3秒(红牛开发板,输出0灯亮)
byte[] control_Data = new byte[] { 0x0, 0x1, 0x1, 0x1};
//时钟频率36M 计数60000次,在分频(599+1)次大概一秒触发一次
IOTimer.Initialize(5, 60000, 599, pins, control_Data);
IOTimer.Start(5);
至于控制步进电机,其代码也是非常简单,核心代码如下:
//顺时针旋转
static void Run()
{
IOTimer.Uninitialize(5);
byte[] pins = new byte[] { (byte)GPIO_NAMES.PC4, (byte)GPIO_NAMES.PC5
, (byte)GPIO_NAMES.PC6, (byte)GPIO_NAMES.PC7 };
byte[] control_Data = new byte[] { 0x1, 0x3, 0x2, 0x6, 0x4, 0xC, 0x8,
0x9 };
IOTimer.Initialize(5, 60000, 1, pins, control_Data);
IOTimer.Start(5);
}
//逆时针旋转
static void AntiRun()
{
IOTimer.Uninitialize(5);
byte[] pins = new byte[] { (byte)GPIO_NAMES.PC4, (byte)GPIO_NAMES.PC5
, (byte)GPIO_NAMES.PC6, (byte)GPIO_NAMES.PC7 };
byte[] control_Data = new byte[] { 0x9, 0x8, 0xc, 0x4, 0x6, 0x2, 0x3,
0x1 };
IOTimer.Initialize(5, 60000, 1, pins, control_Data);
IOTimer.Start(5);
}
//速度级别
static void SetV(int value)
{
switch(value)
{
case 1:
IOTimer.SetPSC(5,1); break;
case 2:
IOTimer.SetPSC(5,5); break;
case 3:
IOTimer.SetPSC(5,10); break;
}
}
至于PWM方式控制步进电机的示例,需要等我采购好相关驱动板后,再做探究。
注:该示例程序,红牛开发板需要部署最新的V0.9.7固件。
选用的步进电机的型号为28BYJ-48(或MP28GA,5V,转速比1/64),驱动威廉希尔官方网站 选用
uln2003芯片的驱动板,其控制时序图如下:
四相八拍:A->AB->B ->BC ->C ->CD ->D ->DA
其A、B、C、D指的是uln2003芯片驱动板的1N1、1N2、1N3、1N4
,波形在上表示有输入信号,波形在下表示无输入信号。
我们采用红牛开发板进行步进电机控制,为了便于接线,我们需要在红牛开发板上焊接两
此外至少需要4根杜邦线,还需提供一个5V的直流电源,接线方式如下:
PC4接IN1
PC5接IN2
PC6接IN3
PC7接IN4
5V电源连接
网友fangyuan和奋斗中写了一个纯.NET MF C
#的控制代码,比较容易理解,但是由于是托管代码,需要虚拟机解释执行,所以运行效率
较低,部分代码如下:
//四相八拍:A->AB->B->BC->C->CD->D->DA
while (true)
{
//A相输出高电平,BCD低
pios[0].Write(high);
pios[1].Write(low);
pios[2].Write(low);
pios[3].Write(low);
Thread.Sleep(sleepTime);
//AB相输出高电平,CD低
pios[0].Write(high);
pios[1].Write(high);
pios[2].Write(low);
pios[3].Write(low);
Thread.Sleep(sleepTime);
… …
}
详细内容请参见fangyuan的博客文章《【.NET MF 学习笔记系列(一)】MF
控制步进电机》。
由于步进电机一般都采用PWM控制,我最初也打算这么做,STM32
系列的芯片的时钟控制器是可以输出4路PWM的,但是研究后我觉得采用uln2003
芯片的驱动板是无法实现PWM控制的。如果硬要采用PWM控制,其中一路的PWM
(占空比)是可以实现的,但是其它三路,无法调整相位,所以目前我无法输出占空比相?
???窍辔徊煌?牟ㄐ巍?
我调整了一下思路,实现了所谓的IO Timer功能,就是采用Timer定时中断,定时处理C
#上层的IO输出要求,底层代码暂且不说了,先说一下封装后的上层接口。
public sealed class IOTimer
{
public static bool Initialize(byte timer, int Compare, int psc, byte[
] pins, byte[] states);
public static bool SetPSC(byte timer, int psc);
public static bool Start(byte timer);
public static bool Stop(byte timer);
public static bool Uninitialize(byte timer);
}
STM32F103芯片有8个定时器,其中timer1和timer8暂且不要用,timer的取值为1~6。
timer1和timer8连接APB2总线,其它定时器连接APB1总线,APB1操作速度限于36MHz,
APB2操作于全速(最高72MHz)。Compare是计数器数值,16位最大65535,psc
预分频器数值,也是16位的,最大为65535,计数器的时钟频率CK_CNT是fCK_PSC/(PSC[15
:1]+1)。
Psc可以实时动态调整。
Pins数组存放要设置的IO的pin脚号,一次最多可以控制8路,states数组存放IO
的输出状态,最多可以有32个状态值,一个字节的每一位控制每一路。
Start就是计时器开始工作,IO此时输出,Stop就是定时器停止工作,IO停止输出。
好了,在实际控制步进电机之前,我们先控制一下LED灯,让它亮一秒,灭3秒(
红牛开发板,输出0灯亮),相关代码如下:
//LED灯控制(定时器timer6)
byte[] pins = new byte[] { (byte)GPIO_NAMES.PF7 };
//亮一秒,灭3秒(红牛开发板,输出0灯亮)
byte[] control_Data = new byte[] { 0x0, 0x1, 0x1, 0x1};
//时钟频率36M 计数60000次,在分频(599+1)次大概一秒触发一次
IOTimer.Initialize(5, 60000, 599, pins, control_Data);
IOTimer.Start(5);
至于控制步进电机,其代码也是非常简单,核心代码如下:
//顺时针旋转
static void Run()
{
IOTimer.Uninitialize(5);
byte[] pins = new byte[] { (byte)GPIO_NAMES.PC4, (byte)GPIO_NAMES.PC5
, (byte)GPIO_NAMES.PC6, (byte)GPIO_NAMES.PC7 };
byte[] control_Data = new byte[] { 0x1, 0x3, 0x2, 0x6, 0x4, 0xC, 0x8,
0x9 };
IOTimer.Initialize(5, 60000, 1, pins, control_Data);
IOTimer.Start(5);
}
//逆时针旋转
static void AntiRun()
{
IOTimer.Uninitialize(5);
byte[] pins = new byte[] { (byte)GPIO_NAMES.PC4, (byte)GPIO_NAMES.PC5
, (byte)GPIO_NAMES.PC6, (byte)GPIO_NAMES.PC7 };
byte[] control_Data = new byte[] { 0x9, 0x8, 0xc, 0x4, 0x6, 0x2, 0x3,
0x1 };
IOTimer.Initialize(5, 60000, 1, pins, control_Data);
IOTimer.Start(5);
}
//速度级别
static void SetV(int value)
{
switch(value)
{
case 1:
IOTimer.SetPSC(5,1); break;
case 2:
IOTimer.SetPSC(5,5); break;
case 3:
IOTimer.SetPSC(5,10); break;
}
}
至于PWM方式控制步进电机的示例,需要等我采购好相关驱动板后,再做探究。
注:该示例程序,红牛开发板需要部署最新的V0.9.7固件。
举报
更多回帖
rotate(-90deg);
回复
相关问答
ULN2003
步进电机
芯片
如何使用
ULN2003
芯片
驱动
步进
电机
?
2021-10-18
3421
怎样
去设计一种基于
ULN2003
芯片
的
步进
电机
驱动威廉希尔官方网站
2021-10-14
2737
ULN2003
带2个继电器和
步进
电机
的供电疑问。
2021-09-24
4031
请问STM32如何
控制
ULN2003
驱动
步进
电机
28BYJ-48?
2021-10-15
1748
如何实现arduino驱动
uln2003
操作
步进
电机
?
2021-10-28
1292
急急急,求 基于AVR的智能窗帘
控制
系统(
步进
电机
ULN2003
)
2015-05-13
2996
如何使用
ULN2003
驱动五线四相减速
步进
电机
?
2021-10-18
2844
上位机通过串口
控制
步进
电机
问题
2015-04-24
12186
如何使用
ULN2003
驱动28BYJ-48
步进
电机
?
2021-10-18
1638
请问
怎样
通过USART串口去调试
ULN2003
驱动
步进
电机
?
2021-06-30
725
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分