DEV Community

Minwook Je
Minwook Je

Posted on

Motors

PWM

pulse signal

There are multiple protocol how to interpret PWM signal itself.

DC Motor

  • Direct Current
  • Using PWM

Can

  1. Motor itself: voltage -> rotate -> power
  2. Direction control with H-Bridge (정방향, 반대 방향 모터 방향 2개)

Can't

  1. Angle control
  2. Stop with exact angle (angle 유지 못함)

PWM interpret

MCU (micro controller unit) can't send consecutive voltage (only turn on or turn off).

  • averaged voltage + duty cycle 사용 = 연속적인 voltage 표현
  • duty cycle: 1주기 동안 ON 비율
  • voltage가 연속적으로 표현 됨으로써, motor speed 조절가능

Servo Motor

e.g, MG996R, DSSERVO

Servo = DC motor + 기어 + 컨트롤러

Servo는 각도제어가 가능한 DC 모터, 단 jitter가 발생.

Servo는 pulse가 ON된 상태로 얼마나 유지되었는지의 width로 데이터를 읽는다.

|■■———|-------------------| (1.0 ms → 0도)
|■■■——|------------------| (1.5 ms → 90도)
|■■■■—|-------------------| (2.0 ms → 180도)
Enter fullscreen mode Exit fullscreen mode

jitter란? "가만히 있어도 부르르 떨거나, ±1~2도 미세하게 흔들리는 현상"

jitter가 발생하는 이유?

1. PWM 신호 불안정
50hz(20ms) 주기마다 하나의 펄스(명령)을 받는데, 이 명령이 각도를 준다. 서보는 펄스폭 1.500ms를 받아야 90°에 간다고 치자. 그런데 MCU가
1.500ms → 1.505ms → 1.495ms → 1.505ms …
이렇게 조금씩 흔들리면 서보는, "어? 90도였다가 → 91도? → 89도?" 이렇게 오해해서 미세하게 계속 조정 = 떨림(jitter) 발생.

2. 전원 불안정

전류 부족 → 순간적으로 힘이 약해짐 → 다시 보정 → 떨림

Can

  1. Angle 변경
  2. Angle 유지

PWM Slice

https://pico.implrust.com/core-concepts/pwm/pwm-in-rp2350.html

The RP2350 has a PWM peripheral with 12 PWM generators called slices. Each slice contains two output channels (A and B), giving you a total of 24 PWM output channels.

RP2040, RP2350에는 PWM을 만들기 위한 전용 하드웨어 블록들이 있는데, 이 블록 하나를 PWM Slice라고 부른다.

Slice = 독립적인 PWM 엔진 하나, Channel은 같은 slice에서 tick을 공유하는 output 채널. 즉 RP2350은 24개의 PWM을 output할 수 있다.

Top comments (0)