nimphea/cmsis/dsp_controller

Source   Edit  

CMSIS-DSP Controller Functions

This module provides optimized control functions like PID and coordinate transforms.

Types

PidController = object
  instance*: PidInstanceF32
A PID controller. Source   Edit  
PidInstanceF32 {.importcpp: "arm_pid_instance_f32", header: "arm_math.h".} = object
  A0*: float32_t
  A1*: float32_t
  A2*: float32_t
  state*: array[3, float32_t]
  Kp*: float32_t
  Ki*: float32_t
  Kd*: float32_t
Source   Edit  

Procs

proc arm_pid_f32(S: ptr PidInstanceF32; in_val: float32_t): float32_t {.importc,
    header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc arm_pid_init_f32(S: ptr PidInstanceF32; resetStateFlag: int32) {.importc,
    header: "arm_math.h", ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc arm_sin_cos_f32(theta: float32_t; pSinVal: ptr float32_t;
                     pCosVal: ptr float32_t) {.importc, header: "arm_math.h",
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc init(pid: var PidController; kp, ki, kd: float32) {....raises: [], tags: [],
    forbids: [].}
Initialize PID controller with gains. Source   Edit  
proc process(pid: var PidController; error: float32): float32 {.inline,
    ...raises: [], tags: [], forbids: [].}
Process one step of the PID controller. Source   Edit  
proc sinCos(theta: float32): tuple[sinVal, cosVal: float32] {.inline,
    ...raises: [], tags: [], forbids: [].}
Simultaneously calculate sine and cosine. Source   Edit