시중에 파는 저가 RC car를 개조할 경우 대부분 이 경우에 해당합니다. 다만 고가의 RC car는 ESC를 지원하므로 이 방식이 아닙니다.
Steering | I2C→(pca9685 0x40 → TB6612FNG)(=MotorHat A)→ DC motor |
---|---|
Throttle | I2C→(pca9685 0x40 → TB6612FNG)(=MotorHat B) → DC motor |
motorhat에는 두 모터만 연결할 수 있어 2 motor만 지원합니다.
<aside> 💡 3장에서 RCCar parameter를 아래와 같이 motorhatSteer로 선택해주세요.
</aside>
./jetRccarParam.sh motorhatSteer
0x40이 PCA9685 주소입니다.
zeta@zeta-nano:~$ sudo i2cdetect -r -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --
Jetson↔PCA9685 연결은 아래와 같습니다. 전체 블록도에서 이 그림은 생략합니다.
나머지 블록도를 그려보면 아래와 같습니다.
아래 위치에 이 프로젝트에 사용한 MotorHat에 관한 회로도가있습니다. 이걸 참고하여 코드를 아래 trottle 코드를 작성하였습니다.
https://www.waveshare.com/w/upload/a/ab/Motor_Driver_HAT_Schematic.pdf
class PWMThrottleHat:
:
if throttle > 0:
# MotorHat B
self.controller.pwm.set_pwm(self.controller.channel+ 5,0,pulse)
self.controller.pwm.set_pwm(self.controller.channel+ 4,0,0)
self.controller.pwm.set_pwm(self.controller.channel+ 3,0,4095)
else:
# MotorHat B
self.controller.pwm.set_pwm(self.controller.channel+ 5,0,-pulse)
self.controller.pwm.set_pwm(self.controller.channel+ 4,0,4095)
self.controller.pwm.set_pwm(self.controller.channel+ 3,0,0)