믹서 레퍼런스

스틱과 자이로에서 선 위의 µs까지: 선택 가능한 모든 믹서의 완전한 기하 — 날개 축, 러더 블렌드, 엘레본, 트림과 클램프.

이 페이지는 src/lib/Ornithopter/Ornithopter.cpp의 믹서 계층과 OrnithopterConfig.h의 프로파일 시스템을 문서화합니다. 주변 아키텍처는 아키텍처 문서 ; 펄스 타이밍과 트림 범위는 서보 커널 문서를 참조하세요.

서보 기능 태그

모든 믹서의 모든 출력은 ServoFunc 태그로 인덱싱된 _f[]에 기록되는 µs 값입니다. 태그는 운송 수단 — 신호가 무엇을 의미하는지 말하지 어디에 배선되는지는 말하지 않습니다:

태그 이름 의미
0 SF_NONE 예약됨 — 기능 없음(첫 PWM 슬롯은 BOOT와 I2C용으로 비어 있음)
1 / 2 SF_LEFT_WING / SF_RIGHT_WING 전방 플래핑 날개(파형 커널)
3 SF_RUDDER 헤드/크레스트 러더(파형) 또는 핀 러더(기어박스) — 요 + 롤 블렌드
4 SF_MOTOR 브러시리스 ESC 스로틀(기어박스 커널 전용)
5 / 6 SF_VTAIL_LEFT / SF_VTAIL_RIGHT V-테일 면, 엘레본 혼합(기어박스 커널)
7 SF_ELEVATOR 전통적인 별도 엘리베이터(기어박스 프로파일 6/7)
8 / 9 SF_BACK_LEFT_WING / SF_BACK_RIGHT_WING 4-날개 기체의 후방 날개 쌍(전방 쌍의 미러, 자체 트림)

런타임 프로파일funcMap을 제공합니다: PWM 출력 인덱스 → ServoFunc을 매핑하는 배열. 처음 세 슬롯(PWM 1…3)은 항상 SF_NONE — BOOT 스트랩과 I2C 버스에 속하므로 — 실제 서보 함수는 PWM 인덱스 3에서 시작합니다(펌웨어 주석이 명시: 인덱스 3 = CH4, 4 = CH5, 5 = CH6).

여덟 가지 믹서 프로필

8개의 믹서 프로파일이 있습니다. 프로파일 0–2는 파형 커널(플래핑 날개)을, 프로파일 3–7은 기어박스 커널(모터 + 테일)을 구동합니다:

# 프로파일 커널 서보 funcMap (PWM 3 · 4 · 5)
0 SERVO_2WING 파형 2 왼쪽 날개 · 오른쪽 날개 · —
1 SERVO_2WING_1RUD 파형 3 왼쪽 날개 · 오른쪽 날개 · 러더
2 SERVO_4WING 파형 4(후방 오른쪽이 후방 왼쪽 미러를 공유) 왼쪽 날개 · 오른쪽 날개 · 후방 왼쪽 날개
3 GEARBOX_2VTAIL_1RUD 기어박스 3 러더 · V-테일 좌 · V-테일 우
4 GEARBOX_1MOT_2VTAIL 기어박스 3 모터 · V-테일 좌 · V-테일 우
5 GEARBOX_1MOT_2VTAIL_1RUD 기어박스 4(V-테일 오른쪽이 왼쪽 미러를 공유) 러더 · 모터 · V-테일 좌
6 GEARBOX_1ELE_1RUD 기어박스 2 러더 · 엘리베이터 · —
7 GEARBOX_1MOT_1ELE_1RUD 기어박스 3 러더 · 모터 · 엘리베이터

선택: 빌드 플래그 MIXER_PROFILE(레거시 ORNITHOPTER_GEARBOX=1 → 프로파일 5), 이후 WebUI로 런타임 재정의(setOrnithopterProfile). 커널 검사는 단순히 activeProfile ≥ GEARBOX_2VTAIL_1RUD.

날개 축 믹싱 (파형 커널)

모든 채널 값은 정규화되어 믹서에 들어갑니다: _crsfToNorm이 원시 172…1811 창을 −1…+1로 선형 매핑합니다. 조향 명령은 이후 프로파일별 권위 슬라이더(aileronScale, elevatorScale, 0–100%)× ±60°(ORNI_STEER_MAX_DEG)로 스케일됩니다.

미러 기하. 날개 서보는 미러 장착되어 공통 모드와 차동 항의 의미가 뒤바뀝니다. 따라서 코드는 에일러론(롤)을 공통으로 취급 — 양 날개에 더해져 물리적 차동 편향이 됨 — 하고 엘리베이터(피치)는 코드에서 차동으로 취급하여 물리적 공통 편향이 됩니다. 각도 방정식은 ORNI_NEUTRAL_ANGLE_DEG = 100°와 편차 항에만 적용되는 2× 승수로:

angleLeft  = NEUTRAL + (aileron + elevator + flapCentre − degL) · 2
angleRight = NEUTRAL + (aileron − elevator − flapCentre + degR) · 2

flapping:  degL/R = amplitudeL/R · shapedWave(rawPhase, ferocityL/R, …)
glide:     degL = degR = 0 → static glide offset takes over

degL/degR은 왼쪽·오른쪽 날개의 순간 스트로크 편향으로, 각각 자신의 진폭과 격렬도-형성 파의 곱입니다. 엘리베이터 업은 다운스트로크를, 다운은 업스트로크를 강화합니다(비대칭 격렬도). 요는 날개를 두 보완 방식으로 나눕니다:

각도는 0…180°로 클램프되고 구성 가능한 엔벨로프 servoMinUs…servoMaxUs(기본 988…2012)로 펄스 변환됩니다: µs = min + 각도·(max−min)/180, 함수별 트림 추가. 글라이드/플랩 중심 오프셋(glideAngleDeg, flappingAngleDeg, ±15°)은 각 분기에 정적 항으로 들어갑니다 — 따라서 글라이드와 플랩 중심을 프로파일별로 독립 조정할 수 있습니다.

러더 믹싱 (두 커널 모두)

러더 믹서는 두 커널이 그대로 공유합니다 — 하나의 방정식, 두 기체:

mix  = rudderNorm · rudderYawWeight  +  aileronNorm · rudderRollWeight
mix  = clamp(mix, −1 … +1)
µs   = 1500 + mix · 500            (rudder centre ± 500 µs)
       + gyroRudderCorrection       (Zephyrus, when enabled)
       + servoTrimUs[SF_RUDDER]

기본값: rudderYawWeight = 65%, rudderRollWeight = 35%(WebUI에서 런타임 조정, 백업별 저장). 러더의 롤 커플링 덕분에 날개가 무거운 프테로사우루스가 요스트링 곡예 없이 협조 선회를 유지합니다. 헤드 러더가 롤에서 너무 공격적이면 롤 가중치를 줄이세요.

기어박스 꼬리·엘레본 믹싱

기어박스 커널은 매 틱 무상태로 실행됩니다. 세 하위 믹서:

VtailLeft  = 1500 + (aileron + elevator)·scale + rollPID + pitchPID + trimL
VtailRight = 1500 + (aileron − elevator)·scale − rollPID + pitchPID + trimR
scale = 500 µs;  both aileron/elevator sums clamped to −1…+1 first

기어박스 커널에서 Zephyrus는 롤과 피치 둘 다 PID 보정을 테일 서보에 주입합니다(롤 역위상, 피치 공통 모드), 각각 ±250 µs(ZEPHYR_GEARBOX_CLAMP_US)로 하드 클램프. 따라서 자이로 글리치는 테일 서보를 흔들 수는 있어도 절대 멈추게 하지 못합니다.

제피로스 주입, 트림·페일세이프

커널과 축에 따라 세 가지 주입 지점이 있습니다:

파형 커널 기어박스 커널
러더 / 요 크레스트 러더 µs에 gyroRudderCorrection 추가 핀 러더 µs에 gyroRudderCorrection 추가
롤(에일러론) —(파형 날개는 롤 PID 없음) gyroAileronCorrection, V-테일에서 역위상, ±250 µs 클램프
피치(엘리베이터) —(Zephyrus 계층에서 파 변조로 주입) gyroElevatorCorrection, 공통 모드, ±250 µs 클램프

트림과 한계. 모든 함수에는 부호 있는 서보별 트림(servoTrimUs[tag], 기본 0, ±300 µs)이 마지막에 더해지고, 모든 값은 _clampServo — 모든 것을 능가하는 절대 500…2500 µs 안전 클램프 — 를 통과합니다. 페일세이프나 링크 다운 시 모든 함수는 1500 µs로, 기어박스 모터는 최소로 돌아가므로 모델은 항상 중립으로 글라이드합니다.

실전 계층으로 갈 준비가 되셨나요? 파형 튜닝 튜토리얼은 이 수치들이 스틱에서 어떻게 느껴지는지 보여주고, 아키텍처 문서는 각 믹서가 파이프라인 어디에 있는지 보여줍니다.