Arduion讀取SBUS并驅(qū)動(dòng)舵機(jī)電調(diào)
????? ? 在學(xué)習(xí)和使用SBUS之前需要先搭建出一個(gè)反向電路用于給SBUS信號(hào)反向這樣才能變成MCU可以解析的串行數(shù)據(jù)。
????????

?????????使用Arduino讀?。樱拢眨訋?kù)推薦用Bolder Flight Systems SBUS使用簡(jiǎn)單方便。
????????該庫(kù)也能用于輸出SBUS數(shù)據(jù)具體看庫(kù)中的示例。
????????控制舵機(jī)輸出一般使用Servo庫(kù)如果所用開(kāi)發(fā)板芯片主頻較高或硬件資源豐富直接獲取SBUS數(shù)值之后將數(shù)值通過(guò)Servo.writeMicroseconds(us)函數(shù)就能完成對(duì)舵機(jī)的控制但實(shí)際上如果控制芯片性能不夠就會(huì)出現(xiàn)Servo與Serial庫(kù)共同搶占時(shí)鐘資源的情況,結(jié)果就是舵機(jī)抖動(dòng)非常大無(wú)法正常運(yùn)行程序。
????????網(wǎng)上針對(duì)這個(gè)問(wèn)題使用了這個(gè)函數(shù)解決。
????????但是會(huì)搶占LOOP中的運(yùn)行時(shí)間,下面代碼程序可以優(yōu)化這個(gè)過(guò)程。
????????首先大部分舵機(jī)都是只能接收工作在50Hz下高電平在0.5ms-2.5ms之間的PWM波,實(shí)際上舵機(jī)對(duì)接收的PWM頻率并不敏感大致控制在50HZ上下就行,只要程序能夠精準(zhǔn)輸出0.5ms-2.5ms的高電平即可。
????? ? 直接使用還是會(huì)不可避免的出現(xiàn)一些輕微抖動(dòng)但是總體效果優(yōu)于Servo庫(kù)。
????????上面的程序所使用的通道數(shù)據(jù)為SBUS直接解析出來(lái)的數(shù)據(jù),中位點(diǎn)數(shù)據(jù)為992想要轉(zhuǎn)換為500-2500就需要加508,油門(mén)數(shù)據(jù)則需要專(zhuān)門(mén)處理,因?yàn)殡娬{(diào)的接收范圍在1000-2000之間,所以直接將原始數(shù)據(jù)右移一位+1004就能保證電調(diào)接收到有效的PWM數(shù)據(jù)。