步进电机如何复位

采用软件设置和定位随机原点,然后,进行复位的方法

STM32控制步进推杆电机通过精准控制脉冲进行复位  https://blog.csdn.net/weixin_47337929/article/details/128033934

说明:

1. 方法一,初始化时,无需检查全程的步数。缺点:?必须保证在运行过程中,不会出现失步,这样才能实现吧?

步进电机的前进与后退的步数,是可以被记录下来的,通过这些记录,是可以将任意一个位置定义为参考点的,以此来达到准确复位的目的。

但是,可能只有在可以随时设置原点的应用场景才能适用吧?
否则,在堵转、清洁时被用手转动了的等等原因,造成失步之后,还能成功复位,回到原点吗?

2. 方法二,初始化时,需要检查全程的步数。初始化采用覆盖全程移动的方法:即每次启动机器,都要检查原点,并且需要知道全程移动的准确步数。这种方法,可能并不适用于有些场景?
在初始化的过程中,将首先移动到终端,然后,再返回到始端,根据所获得的全程准确步数,也是可以准确返回到设置的任意原点处;同时,也可以判断是否堵转?失步。

缺点:批量时,需要解决每台产品的全程步数可能存在的差异;这需要从设计上、以及生成工艺上来获得保证。

解决:?或者,设计一个出厂时的初始化模式,以此来确定当前机器准确的全程总步数。

  

简评:任何一种方法,都有其不足之处,任何一种场景中的应用,也许都能找到一种、或几种最佳的实现方法?

参考:

  https://www.bilibili.com/video/BV1aH4y1B7er/?spm_id_from=333.337.search-card.all.click

  https://www.bilibili.com/video/BV1EN411C7ET/

  https://www.wendangwang.com/doc/6b7a5499376c1835d435b7138fcbe3b9a0ef6e0b

步进电机如何复位

  https://zhidao.baidu.com/question/2084185077502660788.html

1、直接归零法。该方法是指在零位处进行安装一个停止的挡块,然后通过令步进电机向零位的方向驱动足够大的角度,当步进电机从新回到零位时,被挡块挡住,电机停止位置即零位。这种电机归零的方法简单,但是当在电机被挡块挡住的时候,仍然会驱动步进电机执行一个归零的动作,因此不仅会对步进电机和传动机构造成伤害,还会产生剧烈的抖动和较大的噪声。

2、传感器法。该方法在零位处安装霍尔开关、光电二极管等位置传感器,当步进电机回到零位时,传感器给出检测信号,控制电路检测到该信号时,令电机停在零点位置。这种归零方法准确、可靠,但是增加了电路的复杂性,对安装有一定的要求。

3、采用带停转检测的专用电机驱动芯片。这种芯片在电机停转时,能够立测到电机处于停转状态,从而确定零点位置。但这种方法通用性差,对步进电机各绕组的电流相位有一定的要求,并且这种方法不能在微步驱动方式下使用。

4、通过调整脉宽调制信号的占空比,构造出振幅按一定规律衰减的正弦驱动电流。将该电流以一定的相位差加在步进电机的各绕组上,就能让步进电机以微步方式驱动,而且其转矩按期望的规律衰减。此方法应用于步进电机归零过程,可以使电机以恒定转速且转矩逐渐减弱的方式回到零位,有效地保护了电机和传动机构。该方法无需硬件电路,但能使电机归零可靠,电机运行平稳。因此具有广泛的应用领域。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步进电机是一种常见的电机类型,可以通过控制电流来精确地控制它的运动。在 Verilog 中,我们可以使用状态机来实现步进电机的控制。 以下是一个简单的 Verilog 模块,用于控制一个四相步进电机: ``` module stepper ( input clk, input reset, output reg [3:0] phase ); // 定义状态机枚举 typedef enum {PHASE_0, PHASE_1, PHASE_2, PHASE_3} phase_t; // 定义状态寄存器和下一个状态变量 reg [1:0] state, next_state; // 定义步进电机相位模式 parameter [3:0] PHASES = 4'b0001, 4'b0010, 4'b0100, 4'b1000; // 初始化状态和相位 initial begin state = PHASE_0; phase = PHASES[PHASE_0]; end // 定义状态转移逻辑 always @ (posedge clk) begin if (reset) begin state <= PHASE_0; end else begin state <= next_state; end end // 定义下一个状态逻辑 always @ (*) begin case (state) PHASE_0: next_state = PHASE_1; PHASE_1: next_state = PHASE_2; PHASE_2: next_state = PHASE_3; PHASE_3: next_state = PHASE_0; endcase end // 定义相位逻辑 always @ (*) begin phase = PHASES[state]; end endmodule ``` 在这个模块中,我们定义了一个状态机,控制步进电机的四个相位。我们使用一个状态寄存器和一个下一个状态变量来实现状态转移逻辑,并使用一个相位变量来存储当前的相位模式。 我们还定义了一个枚举类型来表示每个相位,以及一个参数来存储所有可能的相位模式。在初始化时,我们将状态设置为 PHASE_0,并将相位设置为对应的相位模式。 在时钟上升沿触发的状态转移逻辑中,我们检查复位信号并将状态设置为 PHASE_0,否则将状态设置为下一个状态变量。在下一个状态逻辑中,我们使用一个 case 语句来定义每个状态的下一个状态。 最后,在相位逻辑中,我们将相位设置为当前状态对应的相位模式。 这个模块可以通过连接到适当的电路来控制步进电机的运动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值