【嵌入式必读】【一文彻底理解】步进电机驱动算法——梯形加减速运动算法原理

这篇具有很好参考价值的文章主要介绍了【嵌入式必读】【一文彻底理解】步进电机驱动算法——梯形加减速运动算法原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


关于梯形加速度,我打算写2篇文章来描述整个实现流程。本章我们从原理的角度详细分析一下,梯形加速度是怎么实现的,下一篇文章我们一步步看看代码如何实现。
我们先来看看最终效果。

步进电机梯形加速度

关于代码实现,请大家看我这篇文章,所有代码均经过验证,可以直接拿来用。https://blog.csdn.net/yingzhefengyuzou/article/details/132199922?spm=1001.2014.3001.5502

一、 使用加减速的理由

为什么要使用加减速呢?步进电机有一个很重要的技术参数:空载启动频率,也就是在没有负载的情况下能够正常启动的最大脉冲频率,如果脉冲频率大于该值,步进电机则不能够正常启动,发生丢步或者堵转的情况;或者也可以理解为由于步进脉冲变化过快,转子由于惯性的作用跟不上电信号的变化。所以要使用加减速来解决启动频率低的问题,在启动时使用较低的脉冲频率,然后逐渐的加快频率。

二、 梯形加减速算法特点

运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32

梯形加减速一共分为三个阶段,OA 加速部分、AB 匀速部分 和 BC 减速部分。 在 OA 加速过程中,由低于步进电机的启动频率开始启动(模型中由 0 启动),以固定的加速度增加速度到目标值;在 AB 匀速过程中,以最大速度匀速运动; 在 BC 减速部分中,以加速度不变的速度递减到 0; 这种算法是一种在加速过程和减速过程中加速度不变的匀变速控制算法,由于速度变化的曲线有折点,所以在启动、停止、匀速段中很容易产生冲击和振动。

三、 算法基础

步进电机的转动需要控制器发送脉冲,如果控制器以恒定速度发送脉冲,那么步进电机就以恒定速度转动;如果控制器以加速度发送脉冲,那么步进电机就以加速度运动;所以只要改变脉冲的频率 就可以改变速度的变化,也就是说调整脉冲之间的时间间隔就可以改变速度。
运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32

上图为步进电机与时间的示意图,其中

  • t 0 t_0 t0 表示第1个脉冲发送时刻
  • t 1 t_1 t1 表示第2个脉冲发送时刻
  • t 2 t_2 t2 表示第3个脉冲发送时刻
  • t t t_t tt 表示定时器的计数周期
  • C 0 C_0 C0 表示定时器从 t 0 t_0 t0 ~ t 1 t_1 t1 时刻的定时器计数值
  • C 1 C_1 C1 表示定时器从 t 1 t_1 t1 ~ t 2 t_2 t2 时刻的定时器计数值
  • Δ t 1 Δt_1 Δt1 Δ t 2 Δt_2 Δt2表示两个脉冲之间的间隔时间

以 stm32 的高级定时器 8 为例,使用定时器PWM输出模式给控制器发送脉冲。高级定时器 8 的时钟频率为 168MHZ, 如果将分频值设置为 5,那么定时器的时钟频率则为: f t f_t ft=168/(5+1)=28MHZ, 相当于计数 28M 次正好为一秒,周期与频率为倒 数关系,所以分频值为 5 的定时器 8 的计数周期 t t = 1 / f t t_t = 1/f_t tt=1/ft; C 0 C_0 C0 C 1 C_1 C1的值即为ARR寄存器的值,所以我们在固定的定时器频率下,只需要改变ARR的值,即可改变电机的速度。

四、 梯形算法要求的变量

我们通过控制定时器输出PWM波形来描绘上述梯形,至少需要知道以下变量:

  1. 在加速阶段:
  • 加速初始PWM频率,即我们要求的ARR寄存器的值 C 0 C_0 C0
  • 加速度accel
  • 加速阶段总的脉冲数
  1. 匀速阶段
  • 匀速所用的脉冲数
  1. 减速阶段
  • 减速初始频率(也是匀速运动的速度)
  • 减速度decel
  • 减速所用的脉冲
    一般情况下,电机加速度accel、减速度decel和总步数(即总脉冲数)是给定的,我们需要通过这3个变量推导出剩余的变量。知道以上变量,再推导出每步的定时器频率,结合脉冲数即可绘制完整的梯形图。

五、 加减速算法推导过程

1. 电机转过的角度θ的计算:

电机转过的角度θ等于脉冲数乘以步距角

θ = n ∗ α (1) \boxed{θ = n * α} \tag{1} θ=nα(1)

其中:n表示驱动电机的脉冲数,α表示电机的步距角

2. 电机由速度0匀加速运动,转过θ所用的时间 t n t_n tn​:

由匀加速直线运动公式:

S = ν 0 t + 1 2 a t 2 (2) \boxed{S =ν_0 t+{1\over2} at^2} \tag{2} S=ν0t+21at2(2)

可推导出,电机转过的角度θ:

θ = ω 0 t + 1 2 ω ˊ t n 2 (3) \boxed{θ = ω_0 t+{1\over2}ώt_n^2} \tag{3} θ=ω0t+21ωˊtn2(3)

其中:θ为转过的角度 , ω 0 ω_0 ω0为初角速度,ώ为加角速度, t n t_n tn为所用的时间

当初角速度 ω 0 = 0 ω_0 = 0 ω0=0时,电机转过θ所用的时间 t n t_n tn

t n = 2 θ ω ˊ (4) \boxed{t_n = \sqrt{2θ\over{ώ}}} \tag{4} tn=ωˊ2θ (4)

3.求相邻脉冲时间间隔Δt:

时间间隔Δt:

Δ t = C n ∗ t t (5) \boxed{Δt = C_n*t_t} \tag{5} Δt=Cntt(5)

其中: C n C_n Cn表示定时器计数器相邻两脉冲间的计数值, t t t_t tt表示定时器的时钟周期,定时器频率的倒数
假设相邻两脉冲间转过的角度分别用 θ t θ_t θt θ t − 1 θ_{t-1} θt1表示,所用时间用 t n t_n tn t n − 1 t_{n-1} tn1表示,则Δt根据公式(4)也可以表示为

Δ t = t n – t n − 1 = 2 θ t ω ˊ − 2 θ t − 1 ω ˊ \boxed{Δt = t_n – t_{n-1}\\ = \sqrt{2θ_t\over{ώ}} - \sqrt{2θ_{t-1}\over{ώ}} } Δt=tntn1=ωˊ2θt ωˊ2θt1

上式中n表示转过 θ t − 1 θ_{t-1} θt1角度时,所用的脉冲数
Δ t = t n – t n − 1 = 2 θ t ω ˊ − 2 θ t − 1 ω ˊ \begin{aligned} Δt &= t_n – t_{n-1} \\ &= \sqrt{2θ_t\over{ώ}} - \sqrt{2θ_{t-1}\over{ώ}} \end{aligned} Δt=tntn1=ωˊ2θt ωˊ2θt1
上式中 θ t θ_t θt θ t − 1 θ_{t-1} θt1根据公式(1)可得出: θ t = ( n + 1 ) α , θ t − 1 = n α θ_t = (n+1) α, θ_t-1 = nα θt=(n+1)α,θt1=nα,则带入最终可得到公式(6)

Δ t = 2 α ω ˊ ( n + 1 − n ) (6) \boxed{Δt = \sqrt{2α\overώ} (\sqrt{n+1}- \sqrt{n})}\tag{6} Δt=ωˊ2α (n+1 n )(6)

上式中n表示转过 θ t − 1 θ_{t-1} θt1角度时,所用的脉冲数
此处计算时,让 θ t = ( n + 1 ) α , θ t − 1 = n α , θ_t = (n+1) α, θ_{t-1} = nα, θt=(n+1)α,θt1=nα而不是 θ t = n α θ_t = nα θt=nα, θ t − 1 = ( n − 1 ) α θ_{t-1} = (n-1)α θt1=n1α,是因为Δt是两脉冲之间的时间间隔, θ t − 1 θ_{t-1} θt1的脉冲数n最小也应该等于1,所以在n为正整数的情况下,采用 θ t = ( n + 1 ) α θ_t = (n+1) α θt=(n+1)α, θ t − 1 = n α θ_{t-1} = nα θt1=nα更符合实际情况。

4、 求第1个周期内计数器的值

第1个周期内计数器的值,即电机匀加速运动时的初始值,加速初始PWM频率。
根据公式(5)和(6)可求得:
C 0 = Δ t 0 t t = 2 α ω ˊ ( n + 1 − n ) / t t \begin{aligned} C_0 &= {Δt_0\over{t_t}} \\ &= \sqrt{2α\over{ώ}}(\sqrt{n+1} - \sqrt{n})/t_t \end{aligned} C0=ttΔt0=ωˊ2α (n+1 n )/tt
由上得出:

C 0 = 2 α ω ˊ t t (7) \begin{aligned} \boxed{C_0 = {\sqrt{2α\over{ώ}}\over{t_t}}}\tag{7} \end{aligned} C0=ttωˊ2α (7)

用公式(7)求第1个周期内计数器的值

求第n个周期内计数器的值:
C n = Δ t n t t = 2 α ω ˊ ( n + 1 − n ) / t t \begin{aligned} C_n &= {Δt_n\over{t_t}} \\ &= \sqrt{2α\over{ώ}}(\sqrt{n+1} - \sqrt{n})/t_t \end{aligned} Cn=ttΔtn=ωˊ2α (n+1 n )/tt
由上得出:
C n = Δ t n t t = 2 α ω ˊ ( n + 1 − n ) / t t = 2 α ω ˊ t t ( n + 1 − n ) \begin{aligned} Cn &= {Δt_n\over{t_t}}\\ &= \sqrt{2α\over{ώ}}(\sqrt{n+1} - \sqrt{n})/t_t\\ &={\sqrt{2α\over{ώ}}\over{t_t}}(\sqrt{n+1} - \sqrt{n}) \end{aligned} Cn=ttΔtn=ωˊ2α (n+1 n )/tt=ttωˊ2α (n+1 n )
其中根据公式(7) 2 α ω ˊ / t t = C 0 {\sqrt{2α\over{ώ}}/t_t} = C_0 ωˊ2α /tt=C0 可得出:

C n = C 0 ( n + 1 − n ) (8) \begin{aligned} \boxed{C_n =C_0({\sqrt{n+1}-\sqrt{n}})}\tag{8} \end{aligned} Cn=C0(n+1 n )(8)

由于计算的过程中需要进行开方运算,微控制器的计算能力有限,因此在此使用泰勒公式进行泰勒级数逐级逼近的方法。在这里主要是用的是泰勒公式的特例——麦克劳林公式;具体如下:
1 ± 1 n = 1 ± 1 2 n − 1 8 n 2 + o 1 n 3 \sqrt{1±{1\over{n}}} = 1 ± {1\over{2n}} - {1\over{8n^2}}+o{1\over{n^3}} 1±n1 =1±2n18n21+on31
为构造与麦克劳林相同的公式将 n-1 ,并且与公式 (9) 做比值处理,并进行化简计算,具体如下图 所示:
运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32

公式推导一共分为以下 5 个步骤推导:
A. 将 C n C_n Cn C n − 1 C_{n-1} Cn1 利用公式8求比值;
B. 分子分母提出 C 0 C_0 C0 和$ \sqrt{n}$, 并将其约掉;
C. 整理化简根号下的内容;
D. 将麦克劳林公式带入;
E. 忽略无穷下余项,化简求得; 将其化简为关于 C n C_n Cn 的式子如下:
c n c n − 1 = 4 n − 1 4 n + 1 C n = c n − 1 ( 4 n + 1 − 2 ) 4 n + 1 \begin{aligned} {c_n\over{c_{n-1}}} &= {{4n-1}\over{4n+1}}\\ C_n &= {c_{n-1} (4n+1-2)\over{4n+1}}\\ \end{aligned} cn1cnCn=4n+14n1=4n+1cn1(4n+12)
化简后得出:

C n = C n − 1 − 2 ∗ C n − 1 4 n + 1 (9) \begin{aligned} \boxed{C_n = C_{n-1} - 2*{C_{n-1}\over{4n+1}} } \tag{9} \end{aligned} Cn=Cn124n+1Cn1(9)

通过公式(7)和公式(9),即可推到出每个周期内的计时器的值,及每步的频率。经过化简的公式(9)有一定的误差,其得出的结果比公式(8)快。所以我们对公式(7)乘以0.676加以校正。

C 0 = 0.676 ∗ 2 α ω ˊ t t (10) \begin{aligned} \boxed{C_0= 0.676 *{\sqrt{2α\over{ώ}}\over{t_t}}} \tag{10} \end{aligned} C0=0.676ttωˊ2α (10)
通过公式(9)和公式(10)我们可以求出:

  • 加速初始PWM频率,即我们要求的ARR寄存器的值 C 0 C_0 C0
  • 电机加速阶段每一步的PWM频率,即ARR寄存器的值C

知道寄存器ARR的值后,我们就可以控制电机加速了,但是我们不知道电机应该加速到什么时候,即电机加速多少步以后开始匀速运行,多少步以后开始减速运行,接下来我们继续推导以上变量。

5、 推导脉冲数和加速度成反比。

在电机由速度零匀加速或匀减速到速度零的运动情况下,由 θ = 1 / 2 ω ˊ t n 2 θ=1/2 ώt_n^2 θ=1/2ωˊtn2 θ = n α θ=nα θ=nα可推出:
n α = 1 2 ω ˊ t n 2 nα = {1\over2} ώt_n^2 nα=21ωˊtn2
由速度 ω n = ω ˊ t n ω_n = ώt_n ωn=ωˊtn带入上式可得:
n α = 1 2 ω ˊ ( ω n ω ˊ ) 2 nα = {1\over2} ώ({ω_n \over{ώ}})^2 nα=21ωˊ(ωˊωn)2
转化一下后:

n ω ˊ = ω n 2 2 α (11) \begin{aligned} \boxed{n ώ = {ω_n^2\over{2α}} } \tag{11} \end{aligned} nωˊ=2αωn2(11)

公式(11)中,ω_n为最大速度,α为步距角,由此看出在最大速度和步距角不变的情况下,脉冲与加速度成反比。

6、在一个电机匀加速到一定速度,再匀减速的情况下,如下图:

运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32

由公式(11)可得:

n 1 ω ˊ 1 = n 2 ω ˊ 2 (12) \begin{aligned} \boxed{n_1 ώ_1 = n_2 ώ_2} \tag{12} \end{aligned} n1ωˊ1=n2ωˊ2(12)

两边同时加 n 1 ω ˊ 2 n_1ώ_2 n1ωˊ2得:
n 1 ω ˊ 1 + n 1 ω ˊ 2 = n 2 ω ˊ 2 + n 1 ω ˊ 2 n 1 ( ω ˊ 1 + ω ˊ 2 ) = ω ˊ 2 ( n 2 + n 1 ) \begin{aligned} n_1 ώ_1 + n_1 ώ_2 &= n_2 ώ_2 + n_1 ώ_2\\ n_1(ώ_1 + ώ_2)&= ώ_2 (n_2 + n_1 ) \end{aligned} n1ωˊ1+n1ωˊ2n1ωˊ1+ωˊ2=n2ωˊ2+n1ωˊ2=ωˊ2n2+n1
化简得出:

n 1 = ω ˊ 2 n 1 + n 2 ω ˊ 1 + ω ˊ 2 (13) \begin{aligned} \boxed{{n_1 = ώ_2 {n_1 + n_2\over{ώ_1 + ώ_2}} } }\tag{13} \end{aligned} n1=ωˊ2ωˊ1+ωˊ2n1+n2(13)

7、求加减速步数

对于步进电机加减速阶段来说,由于已经设定好了步进电机加速度、减速度、最大速度和总运行步数,所以说一共分为2种情况:

(1)电机能够加速到给定的最大速度,匀速运行一段时间后,再减速到0

运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32

S = ν t 2 – ν 0 2 2 a S = {ν_t^2 –ν_0^2\over{2a}} S=2aνt2ν02得到加速阶段的步数:

a c c e l _ s t e p = s p e e d 2 2 ω ˊ 1 ∗ α (14) \begin{aligned} \boxed{accel\_step={speed^2\over{2ώ_1 * α}}}\tag{14} \end{aligned} accel_step=2ωˊ1αspeed2(14)

A. 由公式(13)得到:

a c c e l _ l i m = n 1 = ω ˊ 2 ∗ t o t a l _ s t e p ω ˊ 1 + ω ˊ 2 (15) \begin{aligned} \boxed{accel\_lim = n_1 = ώ_2*{ total\_step\over{ώ_1+ ώ_2}}}\tag{15} \end{aligned} accel_lim=n1=ωˊ2ωˊ1+ωˊ2total_step(15)

B. 由公式(12)得出

d e c e l s t e p = − a c c e l _ s t e p ∗ ω ˊ 1 ω ˊ 2 (16) \boxed{decel_step = - accel\_step*{ώ_1\over{ώ_2}}}\tag{16} decelstep=accel_stepωˊ2ωˊ1(16)

负号是因为减速过程,带入公式(9)时用。带入公式(9)时, n 0 n_0 n0应为decel_step,其后每一步加1,直到停止。

(2)由于运动距离过短,电机无法加速到最大速度即开始减速:

运动控制梯形加减速算法,嵌入式,算法,嵌入式硬件,单片机,stm32
加速阶段的步数由公式(15)计算,减速步数如下:

d e c e l s t e p = − ( t o t a l s t e p − a c c e l l i m ) (17) \boxed{decel_step = - ( total_step - accel_lim)}\tag{17} decelstep=(totalstepaccellim)(17)

负号是因为减速过程,带入公式(9)时用

通过以上推导,我们求出了梯形算法要求的所有变量。

六、 算法优化

由于算法在计算过程中涉及到一些浮点型运算,大量的浮点型运算会使得效率大大降低,为了使得计算速度得到更好的优化,我们做如下优化:

  1. 对于加减速的每一步来说,都需要重新计算下一步的时间,计算的过程中可能会出现除不尽的项式,为了更有利的加减速,可以采用加速向上取整,减速向下取整的原则来做运算,也可以采用余数累计的方法,在这里使用的是将余数累计的方法来提高间隔时间的精度和准确性。

    C n = C n − 1 − 2 C n − 1 + R e s t 4 n + 1 (18) \begin{aligned} \boxed{C_n = C_{n-1}-{2C_{n-1} + Rest\over{4n+1}}}\tag{18} \\ \end{aligned} Cn=Cn14n+12Cn1+Rest(18)

    余数公式:

    N e w _ R e s t = ( 2 C n − 1 + R e s t ) ( m o d ( 4 ∗ n + 1 ) ) (19) \begin{aligned} \boxed{New\_Rest =(2C_{n-1}+ Rest)(mod(4* n +1))} \tag{19} \end{aligned} New_Rest=(2Cn1+Rest)(mod(4n+1))(19)

    上式中,mod就是取余数的意思,即C语言中的%。
  2. 令:速度扩大100倍
    加速度扩大100倍
    扩大后的速度和加速度还用原来的字母表示
    则$C_0 = 0.676f_t\sqrt{2α/ώ} $ 加速度扩大100倍以后,变为:
    C 0 = 0.676 ∗ f t ∗ ( 2 ∗ 1 0 2 ∗ α ) / ω ˊ = 0.676 ∗ f t ∗ 1 0 − 2 ∗ 2 α ∗ 1 0 10 ω ˊ ∗ 1 0 − 2 \begin{aligned} C_0 &= 0.676*f_t*\sqrt{(2*10^2*α)/ώ}\\ &= 0.676 *f_t*10^{-2}*\sqrt{{2α*10^{10}\over{ώ}}}*10^{-2} \end{aligned} C0=0.676ft(2102α)/ωˊ =0.676ft102ωˊ2α1010 102
    令:
    T 1 _ F Q E Q = 0.676 ∗ f t ∗ 1 0 − 2 A _ S Q = 2 α ∗ 1 0 10 \begin{aligned} T1\_FQEQ &=0.676 *f_t*10^{-2}\\ A\_SQ &= 2α*10^{10} \end{aligned} T1_FQEQA_SQ=0.676ft102=2α1010
    则:

    C 0 = T 1 _ F Q E Q A _ S Q ω ˊ / 100 (20) \begin{aligned} \boxed{C_0 = T1\_FQEQ\sqrt{A\_SQ\over{ώ}}/100}\tag{20} \end{aligned} C0=T1_FQEQωˊA_SQ /100(20)

    公式(14)中,速度和加速度扩大100后,变化为:

    A c c e l _ s t e p = s p e e d 2 200 ω ˊ 1 α (21) \begin{aligned} \boxed{Accel\_step = {speed^2\over{200ώ_1 α}}}\tag{21} \end{aligned} Accel_step=200ωˊ1αspeed2(21)

    其他公式的加速度和速度相应放大100倍后,公式不发生变化

七、总结

在给定步距角α、定时器频率 f t f_t ft、加速度 ω ˊ 1 ώ_1 ωˊ1、减速度 ω ˊ 2 ώ_2 ωˊ2和最大速度speed以及总步数total_step的情况下,电机的加减速计算步骤如下:

1、 令:速度扩大100倍

加、减速度扩大100倍,
T 1 _ F Q E Q = 0.676 ∗ f t ∗ 1 0 − 2 A _ S Q = 2 α ∗ 1 0 10 \begin{aligned} T1\_FQEQ &=0.676 *f_t*10^{-2}\\ A\_SQ &= 2α*10^{10} \end{aligned} T1_FQEQA_SQ=0.676ft102=2α1010

2、计算Accel_step、accel_lim和decal_step:

下列公式分别计算:
a c c e l _ s t e p = s p e e d 2 200 ω ˊ 1 α a c c e l _ l i m = ω ˊ 2 ∗ t o t a l _ s t e p ω ˊ 1 + ω ˊ 2 \begin{aligned} accel\_step &= {speed^2\over{200ώ_1 α}}\\ accel\_lim &= ώ_2*{ total\_step\over{ώ_1+ ώ_2}}\\ \end{aligned} accel_stepaccel_lim=200ωˊ1αspeed2=ωˊ2ωˊ1+ωˊ2total_step
如果计算出的accel_step < accel_lim,则
d e c e l _ s t e p = − a c c e l _ s t e p ∗ ω ˊ 1 ω ˊ 2 \begin{aligned} decel\_step &= - accel\_step*{ώ_1\over{ώ_2}} \end{aligned} decel_step=accel_stepωˊ2ωˊ1

否则
d e c e l _ s t e p = − ( t o t a l _ s t e p − a c c e l _ l i m ) \begin{aligned} decel\_step &= - ( total\_step - accel\_lim) \end{aligned} decel_step=(total_stepaccel_lim)

3、 求出加速阶段的第一步的计时器的值:

由公式(20)
C 0 = T 1 _ F Q E Q A _ S Q ω ˊ / 100 \begin{aligned} C_0 = T1\_FQEQ\sqrt{A\_SQ\over{ώ}}/100 \end{aligned} C0=T1_FQEQωˊA_SQ /100
求出电机加速阶段的第一步的计时器的值。

4、求计数器的值

(1)加速阶段:

C n = C n − 1 − 2 C n − 1 + R e s t 4 n + 1 N e w _ R e s t = ( 2 C n − 1 + R e s t ) ( m o d ( 4 ∗ n + 1 ) ) \begin{aligned} C_n &= C_{n-1}-{2C_{n-1} + Rest\over{4n+1}}\\ New\_Rest &=(2C_{n-1}+ Rest)(mod(4* n +1)) \end{aligned} CnNew_Rest=Cn14n+12Cn1+Rest=(2Cn1+Rest)(mod(4n+1))
求出每步的计时器的计数值

(2) 匀速阶段:

已加速阶段的最大速度匀速运行

(3)减速阶段:

C n = C n − 1 − 2 C n − 1 + R e s t 4 n + 1 N e w R e s t = ( 2 C n − 1 + R e s t ) ( m o d ( 4 ∗ n + 1 ) ) \begin{aligned} C_n &= C_{n-1}-{2C_{n-1} + Rest\over{4n+1}}\\ New_Rest &=(2C_{n-1}+ Rest)(mod(4* n +1)) \end{aligned} CnNewRest=Cn14n+12Cn1+Rest=(2Cn1+Rest)(mod(4n+1))
求出每步的计时器的计数值,其中n的值decal_step,其值为负值。其后每一步计算Cn, decal_step加1,直到为0。文章来源地址https://www.toymoban.com/news/detail-664610.html

到了这里,关于【嵌入式必读】【一文彻底理解】步进电机驱动算法——梯形加减速运动算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ToBeWritten之理解嵌入式Web HTTP协议

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球 感谢大家一直以来对我CSDN博客的关注和支持,但

    2023年04月16日
    浏览(24)
  • FPGA嵌入式开发一些Xilinx SDK库函数的理解

    最近在测试AXI Quad SPI这个IP核的端口时序,搭建BD后导出到硬件,在SDK中导入xspi_intr_example.c的源文件,在师兄的帮助下,浅浅研究了一下代码。 首先,需要修改源程序中的错误,参照CSDN文章:ZYNQ中断示例修改 做出以下修改: 此外,还要对中断驱动实例名称进行修改: 以下

    2024年02月12日
    浏览(39)
  • 【C语言】嵌入式C语言项目管理利器:深入理解Makefile的应用与实践

    目录 一、makedile的概述 1、案例引入 2、makefile  3、Makefile优点 二、makefile的语法规则  1、语法规则 2、简单实战 三、makefile的变量 1、自定义变量 2、系统环境变量 3、预定义变量 4、高级makefile gcc a.c b.c c.c ‐o main 如果只修改了b.c 使用gcc编译 需要对所有文件重新编译。makefi

    2024年02月15日
    浏览(40)
  • 嵌入式2. 深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出)

    目录 前言 GPIO是什么 GPIO的八大模式 输入模式 浮空输入 上拉输入 下拉输入 模拟输入 输出模式 开漏输出 推挽输出 复用开漏输出 复用推挽输出 GPIO的输出速率 学习了这么久的单片机,说来羞愧,直到写这篇文章之前,我都没有仔细去理解GPIO的八种使用模式,之前只是傻傻的

    2024年02月04日
    浏览(29)
  • [ vscode + clangd + gcc + gdb + cmake] 一文带你构造C/C++开发环境 #支持嵌入式开发 #超详细 #小白

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:本节讲解了为什么需要配置这样一套开发环境,可以跳过 本文力求通俗、详细的讲解 C程序开发 环境配置。深入浅出的讲解以及大量的图片对小白更友好。看完本文你将得到一套 vscode + gcc + gdb

    2024年02月20日
    浏览(35)
  • 【蓝桥杯】一文解决蓝桥杯嵌入式开发板(STM32G431RBT6)LCD与LED显示冲突问题,并讲述LCD翻转显示

       不知道大家在开发过程中有没有碰到: LCD与LED同时(宏观上的同时)点亮时产生的LED状态紊乱问题 。 LCD与LED显示冲突现象图   为了解决上述问题,小编给出了以下三种解决方案: 方案一:    每次LCD显示完成数据后,关闭所有LED一次。   但是 使用该方法比较麻烦,

    2023年04月12日
    浏览(40)
  • 嵌入式操作系统(嵌入式学习)

    嵌入式操作系统是一种专门设计和优化用于嵌入式系统的操作系统。它是在资源受限的嵌入式设备上运行的操作系统,如微控制器、嵌入式处理器和系统芯片等。 嵌入式操作系统的主要目标是提供对硬件资源的有效管理和对应用程序的调度,以实现系统的可靠性、实时性和效

    2024年02月10日
    浏览(42)
  • 嵌入式系统>嵌入式硬件知识

    AI芯片的特点包括 :新型计算范式AI芯片的关键特征: 1、新型的计算范式 AI 计算既不脱离传统计算,也具有新的计算特质,如处理的内容往往是非结构化数据(视频、图片等)。处理的过程通常需要很大的计算量,基本的计算主要是线性代数运算,而控制流程则相对简单。

    2024年02月08日
    浏览(41)
  • 关于嵌入式开发的一些信息汇总:嵌入式C开发人员、嵌入式系统Linux

    这篇文章是关于嵌入式开发的一些基本信息,供想入行的人参考。有一些作者本人的想法,以及来自外网的大拿的文章翻译而来,原文链接在此Learning Linux for embedded systems,再次感谢,支持原创。 普通C开发人员和嵌入式C开发人员之间的 基本区别在于 ,因为嵌入式C程序被设

    2024年02月03日
    浏览(45)
  • 适合嵌入式开发的GUI(嵌入式学习)

    嵌入式开发中的GUI(图形用户界面)是指在嵌入式系统中实现图形化的用户界面,以便用户可以通过触摸屏、按钮、鼠标或其他输入设备与系统进行交互。 以下是一些常见的嵌入式GUI开发方法: 轻量级GUI库:一些轻量级的GUI库适用于嵌入式系统,例如uGFX、LittlevGL、Nanogui等。

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包