Untitled

1. Introduction

시중에 파는 저가 RC car를 개조할 경우 대부분 이 경우에 해당합니다. 다만 고가의 RC car는 ESC를 지원하므로 이 방식이 아닙니다.

2. Driver and Motors

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

3. I2C address check

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 -- -- -- -- -- -- --

4. Circuit Diagram

Jetson↔PCA9685 연결은 아래와 같습니다. 전체 블록도에서 이 그림은 생략합니다.

Untitled

나머지 블록도를 그려보면 아래와 같습니다.

Untitled

아래 위치에 이 프로젝트에 사용한 MotorHat에 관한 회로도가있습니다. 이걸 참고하여 코드를 아래 trottle 코드를 작성하였습니다.

https://www.waveshare.com/w/upload/a/ab/Motor_Driver_HAT_Schematic.pdf

Untitled

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)