JSTD3P3TDPAT7RZHMEJREQA3I5O37TZHYIRJV37IG6II3XCQM44AC }pub fn measureADCOffset(self: *@This()) !void {const ITERATIONS = 50;self.stop();rp2xxx.time.sleep_ms(1000);for (0..1) |i| {// Prepare ADCrp2xxx.adc.apply(.{.sample_frequency = null,.round_robin = null,.temp_sensor_enabled = false,.fifo = .{ .dreq_enabled = false, .irq_enabled = false, .shift = false },}); // apply calls enablerp2xxx.adc.select_input(switch (@as(u1, @intCast(i))) {0 => main.pins.m1emf,1 => main.pins.m2emf,});rp2xxx.adc.start(.free_running);var sum: usize = 0;for (0..ITERATIONS) |_| {while (rp2xxx.adc.fifo.is_empty()) {asm volatile ("" ::: "memory");}sum += try rp2xxx.adc.fifo.pop();}switch (@as(u1, @intCast(i))) {0 => self.femc_offset = @truncate(sum / ITERATIONS),1 => self.bemc_offset = @truncate(sum / ITERATIONS),}}log.debug("EMC offset measurement done. Fwd: {} Bwd: {}", .{ self.femc_offset, self.bemc_offset });
pub fn tester(comptime driver: MotorDriverType) !void {const md = MotorDriver(driver){.fwd = main.pins.mot1,.bwd = main.pins.mot2,.speed = main.pins.speed,};const pwm_period = 125_000_000 / (@as(usize, main.cv.PWM_period) * 100 + 10_000);
const StartPWM = struct {const START_PWM_SIZE = 10;// TODO: Initial values could be 2/3 of pwm_wraphistory: [START_PWM_SIZE]u16 = [_]u16{0} ** START_PWM_SIZE, // PWM wrap is u16next: u8 = 0, // CV is u8
fn save(self: *@This(), val: u16) void {self.history[self.next] = val;self.next +%= 1;}fn average(self: @This()) u16 {var sum: usize = 0;for (0..START_PWM_SIZE) |i| {sum += self.history[i];}return @truncate(sum / START_PWM_SIZE);}};pub fn tester(md: anytype, pwm_period: u16) !void {
// try motor.tester(board.motor_driver);
var md = motor.MotorDriver(board.motor_driver){.fwd = pins.mot1,.bwd = pins.mot2,.speed = pins.speed,};try md.measureADCOffset();// try motor.tester(md, @intCast(125_000_000 / (@as(usize, cv.PWM_period) * 100 + 10_000)));