이번 BLDC 기반 햅틱 구현에서는 전류 센싱 없이 간단하게 토크를 제어하기 위해 Voltage FOC 방식을 사용하였다. BLDC 모터에서 토크는 q축 전류에 비례하며, 전압 방정식은 (uq = iq * R + L * di/dt + Ke * v )로 표현된다. 저속 또는 정지 상태에서는 역기전력과 인덕턴스 항의 영향이 미미하므로 ( τ ∝ iq * R )로 근사할 수 있다. 이러한 특성을 활용하여 별도의 전류 센서 없이도 (u_q) 제어만으로 토크를 선형적으로 제어하여 햅틱 피드백을 구현하였다. 다만 고속 영역에서는 역기전력이 증가하여 전압이 속도 성분에 소비되므로, 정밀한 토크 제어를 위해서는 향후 전류 기반 FOC로 확장이 필요하다.

Simple FOC - Torque control using voltage를 참조하였고 비슷하게 만들어보면서 공부해보겠다.

- Get Angle
- 엔코더를 통해서 읽어온 기계각을 전기각으로 변환
- 현재 엔코더의 Z 기준점을 바탕으로 기계각을 잡고 전기각 계산(오프셋 제거)
- User Input & Limit
- 사용자가 원하는 토크(힘)를 전압 값(Uq)으로 입력
- 설정한
voltage_limit 를 넘지 않게 Saturation
- Inverse Park Transform
- Uq는 회전 방향으로 힘으로 이를 실제 고정된 코일에 얼만큼의 전압을 걸어야 할지로 변환
- Ud = 0 (자석 방향으로는 힘을 주지 않음)
- Ua = -U_q * sin(θelec)
- Ub = U_q * cos(θelec)
- 이 과정이 자석과 90도 오프셋을 유지하게 만드는 과정
- Inverse Clarke
- 알파, 베타 축의 전압을 실제 모터의 U, V, W상 전압으로 변환
- 가장 간단한 방법은 사인파방식으로 Ua, Ub, Uc를 결정
- simple FOC에서는 Space Vector PWM(SVPWM) 사용하여 전원 전압을 15퍼 더 사용한다고 함
- PWM 생성
- 6-step test
- foc
- haptic test
https://docs.simplefoc.com/voltage_torque_mode