使用旋转编码器控制直流减速电机

时间:2018-03-29 04:19:13

标签: arduino arduino-uno

我的旋转编码器和直流减速电机连接到我的Arduino UNO。我想以一定的角度旋转直流电机。就像我现在一样,我编写了一个代码,在旋转它时读取编码器的位置并打印出位置和角度。我还编写了在固定时间内运行直流电机的代码。

我想以一定的角度旋转直流电机。例如,如果我输入90度,我的电机应旋转90度并停止。

  • 我使用引脚2和引脚3作为通道A和B(ENCODER)
  • 我使用引脚9控制直流电机。

我不知道如何处理这个......有什么想法吗?

Option Explicit

Sub CleanUp()

Dim sh As Worksheet
Dim Oppo As Long
Dim CheckLoop As Long
Dim RowCount As Long ' <-- define RowCount as Long
Dim DelRng As Range

Set sh = ThisWorkbook.Sheets("Database")

With sh
    RowCount = .Cells(.Rows.Count, "A").End(xlUp).Row ' get last row with data in column "A"

    For CheckLoop = RowCount To 2 Step -1
        If .Range("C" & CheckLoop).Value = 0 Then ' <== modified this line
            If Not DelRng Is Nothing Then
                Set DelRng = Application.Union(DelRng, .Rows(CheckLoop))
            Else
                Set DelRng = .Rows(CheckLoop)
            End If
        End If
    Next TotalLoop
End With
' if range object is not empty >> delete entire rows at 1-line
If Not DelRng Is Nothing Then DelRng.Delete

End Sub

1 个答案:

答案 0 :(得分:1)

您正确地读取电机电枢的位置,这很好。现在是时候使用PID和闭环了!调谐PID是一个控制器,可帮助您的电机在尽可能最短的时间内以尽可能低的过冲(错误)运行到所需的位置。需要一个控制过程来学习所有这些。您基本上需要一个反馈回路,该回路采用&#34;所需角度&#34;,将其提供给移动电机的控制器。然后,您将获得电机的当前位置,该位置将反馈到系统的原点。你想要的角度&#34;减去&#34;当前角度&#34;每次微控制器越过回路时,你的电机应该移动多少。 以下是反馈循环的样子: enter image description here

这里是学习控制的链接。祝好运! Control Tutorials

编辑2:我应该给你介绍一下PID是什么。 PID控制器由三个不同的组件组成:

  1. 比例
  2. 积分
  3. 衍生物
  4. 每次你得到你想要的角度&#34; - &#34;实际角度&#34;或者&#34; e&#34;如图所示,您将按Kp计时。找到它相对于前一个e的导数并用Kd计算它,并找到误差的积分并用Ki计算它的时间。您可以先忽略Ki和积分,然后在以后需要时添加它。获得Kp e + Kd d(e)/ dt后,此值是您输出到电机的功率百分比。 Kp和Kd和Ki是真正的工程发挥作用的地方。您应该使用系统的传递函数找到它们,并在MatLab或类似软件中对它们进行微调。这些值通常很低(小于1)。这真的取决于你的系统。对于我的运动,它们是Kp = 0.001和Kd = 0.02