.
馬達控制根據需求可以成為一個設備中很核心的一個功能
主要分為兩種 步進馬達 與 伺服馬達,這篇主要介紹步進馬達的接法和使用
馬達的原理基本都雷同,主要是接收脈波(pulse)來決定要移動多少距離,詳細就不在此說明
以下為接線圖
圖源: http://atceiling.blogspot.tw/2013/04/arduino.html
驅動是使用 積體電路(ULN2003A) 來進行增壓
以下程式功能為從PC端送出要移動的距離 ,以數值的正負來決定移動方向
如果移動完成則會返回 INP到位訊號,接著可以進行下一個目標的移動
被控端
- #include <Stepper.h>
- Stepper stepper(96, 11, 10, 9, 8);
- //定義11, 10, 9, 8為輸出腳位
- void setup()
- {
- Serial.begin(9600);
- stepper.setSpeed(60); // 將馬達的速度設定
- }
- void loop()
- {
- Serial.println("NO COMMAND");
- String s = "";
- //接收字元組成字串
- while (Serial.available()) {
- char c = Serial.read();
- if(c!='\n'){
- s += c;
- }
- delay(5);
- }
- int move = 0;
- move = s.toInt();
- if(move!=0)
- {
- Serial.println("Moving");
- }
- stepper.step(move);//開始移動
- if(move!=0)
- {
- Serial.println("INP");
- }
- delay(1000);
- }
控制端
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.IO.Ports;
- using System.Threading;
-
- namespace motor_control
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
- serialPort1.BaudRate = 9600;
- serialPort1.Parity = Parity.None;
- serialPort1.DataBits = 8;
- serialPort1.StopBits = StopBits.One;
- serialPort1.Encoding = Encoding.GetEncoding("UTF-8");
- label1.Text = "PC狀態:尚未連線";
- serialPort1.PortName = "COM3";
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- try
- {
- serialPort1.Open();
- Thread.Sleep(1000);
- //timer1.Enabled = true;
- button1.Enabled = false;
- label1.Text = "PC狀態:連線中";
- timer1.Enabled = true;
- }
- catch
- {
- label1.Text = "PC狀態:Comport open fail";
- }
- }
-
- private void button2_Click(object sender, EventArgs e)
- {
- string data = "";
- data = textBox1.Text;
- serialPort1.Write(data);
- }
-
- private void timer1_Tick(object sender, EventArgs e)
- {
- string info = serialPort1.ReadLine();
- label2.Text = info;
-
- }
- }
- }
執行畫面
Step1: 建立連線
Step2: 送出移動距離,馬達開始移動
Step3: 移動到指定位置,回應到位訊號給控制端
硬體動作如以下影片所示