2023-03-23
12kg舵機(jī)的驅(qū)動(dòng),
● bug?1線串口復(fù)用了Tx和Rx,
? ? debug 使用 2線串口轉(zhuǎn)1線串口的轉(zhuǎn)接板。
●??bug 舵機(jī) I/O 和Pc I/O,復(fù)用了arduino 的串口
? ? debug,使用虛擬串口?
#include <SoftwareSerial.h>
SoftwareSerial roboSerial(10, 11);? ? ? ? ? //定義虛擬串口名為serial,rx為10號(hào)端口,tx為11號(hào)端口
2kg,3kg舵機(jī)的驅(qū)動(dòng),
12kg舵機(jī)的轉(zhuǎn)接板和虛擬串口驅(qū)動(dòng) 能夠很好的運(yùn)行,但是2kg,3kg舵機(jī)不能運(yùn)行
●?bug??2線串口轉(zhuǎn)1線串口的轉(zhuǎn)接板 的頻寬不夠,劣化了信號(hào)
? ? debug? 購(gòu)買(mǎi)新的轉(zhuǎn)接板,或更換舊板上的芯片?? 電容?? 電阻??
●?bug 舵機(jī) I/O 和Pc I/O,復(fù)用了arduino 的虛擬串口,虛擬串口的頻寬不夠,劣化了信號(hào)
? ? debug,使用? Arduino Leonardo板,有2個(gè)串口。USB--Serial。pin0(RX)和pin1(TX)--Serial1
例如:
void setup() {
? Serial.begin(9600);? ? ? ? ? ? ??//設(shè)置PC串口 通信波特率
? Serial1.begin(9600);? ? ? ? ???//設(shè)置設(shè)備串口 通信波特率
? Serial.println("Hello Word");
? Serial1.println("TX:001");? //向數(shù)字引腳0、1所連接的設(shè)備發(fā)送數(shù)據(jù)"TX:001"
}
void loop() {
}
Leonardo 板子的缺陷
// bug , 上傳本程序,運(yùn)行正常。 打開(kāi)PCarduino軟件的串口監(jiān)視器,再關(guān)閉串口監(jiān)視器后,舵機(jī)異常,舵機(jī)表現(xiàn)為一跳一跳的分段快速轉(zhuǎn)動(dòng)。
? ? // debug 這是 Leonardo 板子獨(dú)有的問(wèn)題,打開(kāi)再關(guān)閉串口監(jiān)視器后, Leonardo的運(yùn)行速度大幅降低。?
? ? // debug 原因是:Leonardo 和 PC 之間的鏈接與 Uno 或 Mega 之間的鏈接工作方式不同,如果 PC 不接受數(shù)據(jù),它的輸出緩沖區(qū)可能會(huì)填滿并阻塞(https://forum.arduino.cc/t/serial-print-on-leonardo-very-slow-after-disconnection-from-serial/483017)。
? ? // debug? 通過(guò)? Serial.println(USB_EP_SIZE);可知 leonardo 板子,usb的串口buffer size =64。(https://forum.arduino.cc/t/serial-print-on-leonardo-very-slow-after-disconnection-from-serial/483017/8)?
// debug 程序最后的 delay(2); 改成delay(20); 打開(kāi)再關(guān)閉PC arduinoIDE軟件的串口監(jiān)視器后,經(jīng)過(guò)更長(zhǎng)時(shí)間,舵機(jī)才開(kāi)始一跳一跳的分段快速轉(zhuǎn)動(dòng)。說(shuō)明PC串口有某種緩存。
?// debug 如果串口連接尚未建立,打印/寫(xiě)入基本上會(huì)被忽略;當(dāng)再次關(guān)閉串口時(shí),問(wèn)題就來(lái)了。 (https://forum.arduino.cc/t/serial-monitor-causes-lagging/954328/2)