수중 추진기를 제어하기 위해 Raspberry Pi 4B를 사용하여 ESC에 PWM 신호를 보내려면 어떻게 해야 합니까?
일에 Fengyukun 님이 게시
ESC 사용: APISQUEEN 24V 100A ESC
1: ESC 잠금 해제
중립 정지 신호는 잠금 해제 신호입니다.
50Hz 신호를 사용할 때 신호 주기는 20ms입니다.
명령어의 백분율은 PWM 신호의 실제 듀티 사이클이 아닌 PWM 제어 펄스 폭의 백분율을 나타냅니다(여기서는 오해하기 쉽습니다).
그러면 중립 정지 신호는 다음과 같습니다.
75% 듀티 사이클, 7.5% 실제 듀티 사이클: 1.5ms(1.475ms ~ 1.525ms);
수입돼지
수입시기
PI = pigpio.PI() # pigpio 객체 생성
LED_PIN = 18 #LED가 연결된 GPIO 포트를 정의합니다.
PWM_FREQUENCY = 50 #PWM 주파수 정의(Hz)
PWM_범위 = 1000
PWM 듀티 사이클을 정의합니다. 값 범위는 0(2) 55입니다.
π. set_mode(LED_PIN, pigpio.OUTPUT) #GPIO 포트를 출력 모드로 설정
π. set_PWM_주파수(LED_PIN, PWM_FREQUENCY) #PWM 주파수 설정
π. set_PWM_range(LED_PIN, PWM_range) #설정범위 1000
π. set_pwm_duty 사이클(LED_PIN, 75) #PWM 듀티 사이클 75/1000= 7.5% 설정
Time.sleep(3) #성공적으로 잠금 해제하려면 3초 지연
2. ESC 제어
듀티 사이클 75%: 실제 듀티 사이클이 7.5% ~ 1.5ms(1.475ms ~ 1.525ms 사이)일 때 중지합니다.
듀티 사이클 50%-75%: 실제 듀티 사이클 5%-7.5%, 1ms-1.5ms 역방향;
듀티 사이클 100%: 실제 듀티 사이클 7.5%-10% 1.5ms -2ms 앞으로
π. set_PWM_dutycycle(LED_PIN, 100)
#전진: 7.5% ~ 10% 듀티 사이클이 높을수록 전진 속도가 빨라집니다.
시간.수면(15)
π. set_PWM_dutycycle (LED_PIN 60)
#역방향: 듀티 사이클이 5%에 가까울수록 역방향 속도가 빨라집니다.
시간.수면(5)
π. set_PWM_dutycycle(LED_PIN, 75)
#듀티 사이클
시간.수면(5)
3. 디버깅
디버깅하는 동안 오실로스코프를 사용하여 파형이 올바른지 확인할 수 있습니다.
예를 들어 아래 그림은 제가 보내기 시작한 PWM 정지 신호입니다.
전압 진폭은 3.3V, 주기는 20ms, 실제 듀티 사이클은 7.5%로 모두 정확합니다.
하지만 파형에 노이즈와 혼란이 너무 많기 때문에 여전히 ESC 잠금을 해제할 수 없습니다.
![](https://cdn.shopify.com/s/files/1/0621/5493/2452/files/5_0147a315-bab3-433b-8dde-186472c0ee31_1024x1024.png?v=1700411310)
처음에는 RPi를 사용했습니다. GPIO 라이브러리를 사용한 다음 문제를 해결하기 위해 하드웨어 PWM 신호를 보내는 대신 pigpio 라이브러리를 사용했습니다.
4. 샘플 코드:
수입돼지
수입시기
PI = pigpio.PI() # pigpio 객체 생성
LED_PIN = 18 #LED가 연결되는 GPIO 포트를 정의합니다.
PWM_FREQUENCY = 50 #PWM 주파수 정의(Hz)
PWM_범위 = 1000
PWM 듀티 사이클을 정의합니다. 값 범위는 0(2) 55입니다.
π. set_mode(LED_PIN, pigpio.OUTPUT) #GPIO 포트를 출력 모드로 설정
π. set_PWM_주파수(LED_PIN, PWM_FREQUENCY) #PWM 주파수 설정
π. set_PWM_range(LED_PIN, PWM_range) #설정범위 1000
π. set_pwm_duty Cycle (LED_PIN, 75) #PWM 듀티 사이클 75/1000= 7.5% 설정
Time.sleep(3) #성공적으로 잠금 해제하려면 3초 지연
π. set_PWM_dutycycle(LED_PIN, 100)
#정방향 회전 7.5%-10% 듀티 사이클, 듀티 사이클이 클수록 전진 속도가 빨라집니다.
시간.수면(15)
π. set_PWM_dutycycle (LED_PIN 60)
듀티 사이클이 5%에 가까울수록 반전 속도가 빨라집니다.
시간.수면(5)
π. set_PWM_dutycycle(LED_PIN, 75)
#듀티 사이클
시간.수면(5)