#![allow(unused)]
use tmc2209_uart::{MicrostepResolution, Tmc2209};
#[cfg(feature = "blocking")]
fn sensorless_homing<U, E>(uart: U) -> Result<(), tmc2209_uart::Error<E>>
where
U: embedded_io::Read<Error = E> + embedded_io::Write<Error = E>,
{
let mut driver = Tmc2209::new(uart, 0);
driver.set_current(12, 6, 4)?;
driver.set_microsteps(MicrostepResolution::M16)?;
driver.enable_spreadcycle()?;
driver.configure_stall_detection(50)?;
driver.set_coolstep_threshold(0xFFFFF)?;
driver.set_enabled(true)?;
let homing_velocity = -2000i32;
driver.set_velocity(homing_velocity)?;
let max_iterations = 10000u32;
for _ in 0..max_iterations {
if driver.is_stalled()? {
break;
}
}
driver.stop()?;
driver.enable_stealthchop()?;
driver.set_current(20, 10, 6)?;
Ok(())
}
#[cfg(feature = "blocking")]
fn home_to_center<U, E>(uart: U) -> Result<(), tmc2209_uart::Error<E>>
where
U: embedded_io::Read<Error = E> + embedded_io::Write<Error = E>,
{
let mut driver = Tmc2209::new(uart, 0);
driver.set_current(12, 6, 4)?;
driver.enable_spreadcycle()?;
driver.configure_stall_detection(50)?;
driver.set_coolstep_threshold(0xFFFFF)?;
driver.set_enabled(true)?;
driver.set_velocity(-2000)?;
while !driver.is_stalled()? {
}
driver.stop()?;
let _min_position = 0i32;
driver.set_velocity(2000)?;
let mut step_count = 0i32;
while !driver.is_stalled()? {
step_count += 1;
}
driver.stop()?;
let max_position = step_count;
let _center = max_position / 2;
driver.set_velocity(-2000)?;
driver.stop()?;
Ok(())
}
fn main() {
println!("TMC2209 Sensorless Homing Example");
println!("This example shows how to use StallGuard for sensorless homing.");
}