嵌入式学习小组
直播中

郑聪

7年用户 191经验值
私信 关注

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

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

回帖(5)

皮金燕

2020-6-8 07:24:41
云汉达人


接线方法请参照这个图,你的图上没有接细分控制,电机转动只能是默认角度了。
举报

范志坚

2020-6-8 07:39:08
云汉达人


细分图

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细分)​
举报

王妍炜

2020-6-8 07:55:38
嗨,您應該是使用常見的小型驅動模塊比較方便,有以下優點

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


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


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++; } 以上採用中斷方式,偵測上升沿,就能輸出轉了多少了,方向可自己再加上去,您先參考這篇思路來做會簡單許多
举报

李凤英

2020-6-8 08:12:59
UNO的串口驱动程序网上太多了。。。基本上不需要你额外多花时间。
按你的原理图,你可以使用TTL转串口模块与PC的USB相连,或者加个电平转换的芯片、、
串口搞不定,接下来的就不用干了。。


PC与UNO之间通过串口连接,可以写个简单的协议,对每条指令(启动、停止、反转、调速、转速查询等)制定帧头帧尾命令号等;
单片机解析指令,然后做相应的动作。、、
举报

更多回帖

发帖
×
20
完善资料,
赚取积分