1. Introduction

2. Driver and Motors

Steering No steer, By 2 wheel(1 left, 1 right)
Throttle I2C→(pca9685 0x40 → TB6612FNG)(=MotorHat B) → DC motor
Note 2 motors(1 left, 1 right)

motorhat에는 두 모터만 연결할 수 있어 2 motor만 지원합니다.

<aside> 💡 3장에서 RCCar parameter를 아래와 같이 motorhat2wheel로 선택해주세요.

</aside>

./jetRccarParam.sh motorhat2wheel

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

if left_motor_speed > 0:
    #rear motor
    #1st L298N, Motorhat B
    self.controller.pwm.set_pwm(self.controller.channel+ 5,0,left_pulse)
    self.controller.pwm.set_pwm(self.controller.channel+ 4,0,0)
    self.controller.pwm.set_pwm(self.controller.channel+ 3,0,4095)
else:
    #front motor
    #1st L298N, Motorhat B
    self.controller.pwm.set_pwm(self.controller.channel+ 5,0,-left_pulse)
    self.controller.pwm.set_pwm(self.controller.channel+ 3,0,0)
    self.controller.pwm.set_pwm(self.controller.channel+ 4,0,4095)

if right_motor_speed > 0:
    #rear motor
    #1st L298N, MotorHat A
    self.controller.pwm.set_pwm(self.controller.channel+ 0,0,right_pulse)
    self.controller.pwm.set_pwm(self.controller.channel+ 1,0,4095)
    self.controller.pwm.set_pwm(self.controller.channel+ 2,0,0)
else:
    #front motor
    #1st L298N, MotorHat A
    self.controller.pwm.set_pwm(self.controller.channel+ 0,0,-right_pulse)
    self.controller.pwm.set_pwm(self.controller.channel+ 1,0,0)
    self.controller.pwm.set_pwm(self.controller.channel+ 2,0,4095)