pub mod foc_hall_sensor;
pub mod foc_pwm;
pub mod foc_simple;
#[cfg(feature = "embassy")]
pub mod foc_embassy;
#[cfg(feature = "rtic")]
pub mod foc_rtic;
pub const MAX_MOTOR_NR: usize = 2;
pub const COMMAND_CHANNEL_SIZE: usize = 25;
use fixed::types::I16F16;
use crate::{EFocSimpleError, FocParam, Result};
#[derive(Clone, Debug, Copy)]
pub enum EModulation {
Sinusoidal,
Trapezoidal,
Square,
SpaceVector,
}
pub trait PwmDriver {
fn set_pwm(&mut self, duty_cycles: [u16; 3]) -> Result<()>;
}
#[derive(Clone, Debug, Copy, PartialEq)]
pub enum EDir {
Stopped,
Cw,
Ccw,
}
#[derive(Clone, Debug, Copy, PartialEq)]
pub struct CalParams {
dir: EDir,
zero: I16F16,
}
impl CalParams {
pub fn new(dir: EDir, zero: I16F16) -> Self {
CalParams { dir, zero }
}
}
#[derive(Clone, Debug, Copy, PartialEq)]
pub enum EFocMode {
Idle,
Calibration(Option<CalParams>),
Velocity(FocParam),
Angle(FocParam),
Torque(FocParam),
Error(EFocSimpleError),
}