為了解決這個問題,外掛一顆小MCU專門處理伺服馬達的控制訊號是最簡單的方式了。所以這篇我將介紹如何使用Arduino環境搭配Attiny84A製作I2C伺服馬達擴充模組。
整個擴充模組的概念如下圖所示:
工作也很單純,只是將Arduino送過來的I2C訊號透過Attiny84A與程式轉成控制訊號,接下來只要按照這個架構,把硬體與軟體搭建起來即可成功。
環境需求:
1. Arduino IDE 1.5以上的版本
2. Attiny84A DIP * 1
3. Arduino Uno一片
4. 杜邦跳線數條
5. 麵包板一片
6. Fablab切好的PCB(也可直接在麵包板上接好)
環境架設步驟:
1. 到Github下載資料,並且將zip檔案解壓縮
2. 將Arduino Uno燒錄Arduino ISP的範例程式(參考這篇的把Arduino變成燒錄器這段),並藉由麵包板將Attiny84A與Arduino的腳位互相連接,連接方式為:
- ATtiny84A Pin 14 接到 Gnd
- ATtiny84A Pin 1 接到 +5V
- ATtiny84A Pin 4 (Reset Pin) 接到 Arduino Pin 10
- ATtiny84A Pin 7 接到 Arduino Pin 11
- ATtiny84A Pin 8 接到 Arduino Pin 12
- ATtiny84A Pin 9 接到 Arduino Pin 13
4. 重新開啟Arduino IDE,設定Tools=>Boards為Attiny84A @ 8Mhz
5. 設定Tools=>Programmer為Arduino as ISP
6. 選擇Tools=>Burn Bootloader,燒錄Attiny84A的Fuse,這樣Attiny就能正確地跑在8Mhz的頻率了。
7. 選擇File=>Sketchbook=>I2C_ServoExp程式
8. 直接將程式upload進Attiny84A
9. 按照...\TinyServo\fabrication\Tiny_Servo_schematic.pdf線路圖接好線路,就可以透過I2C控制Servo motor了。
以上為環境的建立過程,接下來簡單敘述一下要如何對IC下命令,目前IC有支援三個命令,分別為:
1.設定伺服馬達角度,透過Arduino wire.h下命令的範例為:
unsigned int pos = 0; union{ unsigned int u16; unsigned char u8[2]; }u16_u8; u16_u8.u16 = pos; Wire.beginTransmission(0x20); // 傳輸位址為0x20 Wire.write(0x01); // 設定馬達角度0x01 Wire.write(0x07); // 設定第8顆馬達 Wire.write(u16_u8.u8[0]); // 角度設定低位 Wire.write(u16_u8.u8[1]); // 角度設定高位 Wire.endTransmission(); // 停止傳輸
2.設定伺服馬達最低PPM訊號,透過Arduino wire.h下命令的範例為:
unsigned int lowppm = 600; union{ unsigned int u16; unsigned char u8[2]; }u16_u8; u16_u8.u16 = lowppm ; Wire.beginTransmission(0x20); // 傳輸位址為0x20 Wire.write(0x11); // 設定馬達最小PPM 0x11 Wire.write(0x07); // 設定第8顆馬達 Wire.write(u16_u8.u8[0]); // 最小PPM設定低位 Wire.write(u16_u8.u8[1]); // 最小PPM設定高位 Wire.endTransmission(); // 停止傳輸
3.設定伺服馬達最大PPM訊號,透過Arduino wire.h下命令的範例為:
unsigned int highppm = 2400; union{ unsigned int u16; unsigned char u8[2]; }u16_u8; u16_u8.u16 = highppm; Wire.beginTransmission(0x20); // 傳輸位址為0x20 Wire.write(0x12); // 設定馬達最大PPM 0x12 Wire.write(0x07); // 設定第8顆馬達 Wire.write(u16_u8.u8[0]); // 最大PPM設定低位 Wire.write(u16_u8.u8[1]); // 最大PPM設定高位 Wire.endTransmission(); // 停止傳輸這樣主機就可以透過I2C設定Attiny84A腳位的PPM訊號,只要將伺服馬達接上去就會動了。
沒有留言:
張貼留言