• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

UNO驱动电机,怎么通过串口通信,实现电脑控制转速和方向

UNO初学者 2016-11-17 浏览量:1655
想做一个UNO和a4988驱动电机,并且用串口通信,使得电脑能发送信号控制电机转速和方向,或者电机转了多少,和方向能反馈到监视器上,这种程序该怎么写,一个是串口模块,一个是驱动模块,求指导
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:5
  • 接线方法请参照这个图,你的图上没有接细分控制,电机转动只能是默认角度了。

    • 发布于2016-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 细分图

    ms1   ms2    ms3
    L       L        L       整步(没有细分)
    H      L         L      1/2(2细分)
    L      H        L       1/4(4细分)
    H      H        L       1/8(8细分)
    H      H        H      1/16(16细分)

    • 发布于2016-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 嗨,您應該是使用常見的小型驅動模塊比較方便,有以下優點

    1、適合驅動 3~35V, 2A 以下的步進馬達;

    2、只有簡單的步進和方向控制接口;

    3、五個不同的步進模式:全、半、1/4、1/8 和 1/16;

    4、可變電阻可調節最大電流輸出,從而獲得更高的步進率;

    5、自動電流衰減模式檢測/選擇;

    6、過熱關閉電路、欠壓鎖定、交叉電流保護;

    7、接地短路保護和加載短路保護



    原理圖


    但您使用A4988最重要的就是電流調控了,沒調控好可能會燒壞A4988或者輸出電流不穩定,以下是調控方法:


    微調電位器(可變電阻)有三個引腳 : 使用三用電表檢測朝向 A4988 晶片的引腳其電壓則為 Vref,可透過微型電位器(可變電阻)調節電流大小,順時針旋轉是增大電流,逆時針則是減小電流量。

    公式為

    最大電流為 2A 的板子 i = vref /0.8 

    接線圖


    1A, 1B 接一組,2A, 2B 接另一組,一般 1a 2a 都是連接正極,1b 2b 都是連接負極,因為步進馬達各家廠牌規格不盡相同,最好是在接好線之後試跑一下看方向是否正確,假如不對的話,就正負端對調換一下。


    步進模式選擇如下圖表格

    在電源供電方面, 器件(晶片)邏輯電壓 VDD 和 GND 配接 Arduino 的 +5V 電源端,而步進馬達電源 VMOT 和 GND 則會需要另外配接 DC 8~15V; 另外還有關於三個模式選擇端 MS1、MS2、MS3 全部接地就是全步進模式(轉一圈要200個步進值或一個步進 1.8°),如果要求更高的精度,可通過選擇其他的模式,例如如果選擇 1/4 步進模式,那麼當馬達轉一圈就要送 800個 微步才能完成。


    以上都設定準備好了以後,以下是測試的Code

    int dirPin = 8;
    
    int stepperPin = 7;
    
     
    
    void setup()
    
    {
    
    pinMode(dirPin, OUTPUT);
    
    pinMode(stepperPin, OUTPUT);
    
    }
    
     
    
     
    
    void step(boolean dir,int steps)
    
    {
    
    digitalWrite(dirPin,dir);
    
    delay(50);
    
    for(int i=0;i<steps;i ){
    
    digitalWrite(stepperPin, HIGH);
    
    delayMicroseconds(800);
    
    digitalWrite(stepperPin, LOW);
    
    delayMicroseconds(800); }
    
    }
    
     
    
    void loop()
    
    {
    
    step(true,1600);
    
    delay(500);
    
    step(false,1600*5);
    
    delay(500);
    
    }
    確保轉動是順暢,不抖動,再重申一次A4988對於電流控制上相當嚴謹,所以馬達沒調好抖動是常有的事情,個人經驗


    另外根據您的需求,要串口控制,則需要使用到

    String data=Serial.readString();
    然後根據您的需求列舉出當該字串時要做什麼工作

    if(data.compareTo("CLOCKWISE")==0) //順時鐘方向
    ...
    
    else if(data.compareTo("COUNTERCLOCKWISE")==0) //逆時鐘方向
    ...
    
    else if(data.compareTo("SPEEDUP")==0) //加速
    ...
    
    else if(data.compareTo("SPEEDDOWN")==0) //減速
    ...
    具體實現內容就看您的需求囉,這邊只給出框架


    再來是如果只是要顯示在電腦上而非LCD,直接輸出到Seiral即可,用Serial Monitor即可觀看,根據輸入結果方向就已知了,轉了多少,因為步進馬達內部沒有內置霍爾感測,所以您必須在馬達旁架上霍爾感測器,轉軸上或者輪上貼上永久磁鐵,才能進行計數,也很簡單


    volatile unsigned int half_revolutions=0;
    
    void setup()
    {
        attachInterrupt(0, motor, RISING); //霍爾感測到磁場變化,輸出高電位,產生上升沿,使用D2腳位
    }
    
    void loop()
    {
       Serial.println(half_revolutions);
    }
    
    void motor()
    {
       half_revolutions++;
    }
    
    以上採用中斷方式,偵測上升沿,就能輸出轉了多少了,方向可自己再加上去,您先參考這篇思路來做會簡單許多
    

    • 发布于2016-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • UNO的串口驱动程序网上太多了。。。基本上不需要你额外多花时间。

    按你的原理图,你可以使用TTL转串口模块与PC的USB相连,或者加个电平转换的芯片、、

    串口搞不定,接下来的就不用干了。。


    PC与UNO之间通过串口连接,可以写个简单的协议,对每条指令(启动、停止、反转、调速、转速查询等)制定帧头帧尾命令号等;

    单片机解析指令,然后做相应的动作。、、

    • 发布于2016-11-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 会员你好,有了答案要及时选择最佳答案,别忘了哦
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

UNO驱动电机,怎么通过串口通信,实现电脑控制转速和方向