小屋創作

日誌2017-06-26 22:00

arduino Stepper motor control

作者:貓貓風 ฅ●ω●ฅ

.













馬達控制根據需求可以成為一個設備中很核心的一個功能

主要分為兩種 步進馬達 與 伺服馬達,這篇主要介紹步進馬達的接法和使用

馬達的原理基本都雷同,主要是接收脈波(pulse)來決定要移動多少距離,詳細就不在此說明

以下為接線圖



圖源: http://atceiling.blogspot.tw/2013/04/arduino.html

驅動是使用 積體電路(ULN2003A) 來進行增壓

以下程式功能為從PC端送出要移動的距離 ,以數值的正負來決定移動方向

如果移動完成則會返回 INP到位訊號,接著可以進行下一個目標的移動

被控端


  1. #include <Stepper.h>  
  2. Stepper stepper(96, 11, 10, 9, 8);  
  3. //定義11, 10, 9, 8為輸出腳位   
  4. void setup()  
  5. {  
  6. Serial.begin(9600);  
  7. stepper.setSpeed(60); // 將馬達的速度設定  
  8. }  
  9. void loop()  
  10. {  
  11.     Serial.println("NO COMMAND");  
  12.     String s = "";  
  13.     //接收字元組成字串  
  14.     while (Serial.available()) {  
  15.         char c = Serial.read();  
  16.         if(c!='\n'){  
  17.             s += c;  
  18.         }  
  19.         delay(5);  
  20.     }  
  21.     int move = 0;  
  22.     move = s.toInt();  
  23.     if(move!=0)  
  24.     {  
  25.       Serial.println("Moving");  
  26.     }  
  27.     stepper.step(move);//開始移動  
  28.     if(move!=0)  
  29.     {  
  30.       Serial.println("INP");  
  31.     }  
  32.     delay(1000);    
  33. }  

控制端


  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.IO.Ports;  
  10. using System.Threading;  
  11.   
  12. namespace motor_control  
  13. {  
  14.     public partial class Form1 : Form  
  15.     {  
  16.         public Form1()  
  17.         {  
  18.             InitializeComponent();  
  19.         }  
  20.   
  21.         private void Form1_Load(object sender, EventArgs e)  
  22.         {  
  23.             serialPort1.BaudRate = 9600;  
  24.             serialPort1.Parity = Parity.None;  
  25.             serialPort1.DataBits = 8;  
  26.             serialPort1.StopBits = StopBits.One;  
  27.             serialPort1.Encoding = Encoding.GetEncoding("UTF-8");
  28.             label1.Text = "PC狀態:尚未連線";  
  29.             serialPort1.PortName = "COM3";  
  30.         }  
  31.   
  32.         private void button1_Click(object sender, EventArgs e)  
  33.         {  
  34.             try  
  35.             {  
  36.                 serialPort1.Open();  
  37.                 Thread.Sleep(1000);  
  38.                 //timer1.Enabled = true;  
  39.                 button1.Enabled = false;  
  40.                 label1.Text = "PC狀態:連線中";  
  41.                 timer1.Enabled = true;  
  42.             }  
  43.             catch  
  44.             {  
  45.                 label1.Text = "PC狀態:Comport open fail";  
  46.             }  
  47.         }  
  48.   
  49.         private void button2_Click(object sender, EventArgs e)  
  50.         {  
  51.             string data = "";  
  52.             data = textBox1.Text;  
  53.             serialPort1.Write(data);  
  54.         }  
  55.   
  56.         private void timer1_Tick(object sender, EventArgs e)  
  57.         {  
  58.             string info =  serialPort1.ReadLine();  
  59.             label2.Text = info;  
  60.   
  61.         }  
  62.     }  
  63. }  

執行畫面

Step1: 建立連線



Step2: 送出移動距離,馬達開始移動



Step3: 移動到指定位置,回應到位訊號給控制端



硬體動作如以下影片所示


9

5

LINE 分享

相關創作

C# MongoDB Atlas 雲端資料庫建置與教學

碧藍航線 自動戰鬥腳本 v2.2.0 定向摺疊 - v2

碧藍航線 自動戰鬥腳本 v2.2.1 破曉冰華

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】