1 /*
2 * SPDX-FileCopyrightText: Copyright (c) 2025 Jilay Sandeep Pandya.
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6 #include <zephyr/device.h>
7 #include <zephyr/drivers/gpio.h>
8 #include <zephyr/drivers/stepper.h>
9 #include <zephyr/kernel.h>
10 #include <zephyr/drivers/stepper/stepper_trinamic.h>
11
12 const struct device *stepper = DEVICE_DT_GET(DT_ALIAS(stepper));
13
14 int32_t ping_pong_target_position = CONFIG_STEPS_PER_REV * CONFIG_PING_PONG_N_REV *
15 DT_PROP(DT_ALIAS(stepper), micro_step_res);
16
17 K_SEM_DEFINE(steps_completed_sem, 0, 1);
18
stepper_callback(const struct device * dev,const enum stepper_event event,void * user_data)19 void stepper_callback(const struct device *dev, const enum stepper_event event, void *user_data)
20 {
21 switch (event) {
22 case STEPPER_EVENT_STEPS_COMPLETED:
23 k_sem_give(&steps_completed_sem);
24 break;
25 default:
26 break;
27 }
28 }
29
main(void)30 int main(void)
31 {
32 printf("Starting tmc50xx stepper sample\n");
33 if (!device_is_ready(stepper)) {
34 printf("Device %s is not ready\n", stepper->name);
35 return -ENODEV;
36 }
37 printf("stepper is %p, name is %s\n", stepper, stepper->name);
38
39 stepper_set_event_callback(stepper, stepper_callback, NULL);
40 stepper_enable(stepper, true);
41 stepper_set_reference_position(stepper, 0);
42 stepper_move_by(stepper, ping_pong_target_position);
43
44 /* Change Max Velocity during runtime */
45 int32_t tmc_velocity = DT_PROP(DT_ALIAS(stepper), vmax) * CONFIG_MAX_VELOCITY_MULTIPLIER;
46 (void)tmc50xx_stepper_set_max_velocity(stepper, tmc_velocity);
47
48 for (;;) {
49 if (k_sem_take(&steps_completed_sem, K_FOREVER) == 0) {
50 ping_pong_target_position *= -1;
51 stepper_move_by(stepper, ping_pong_target_position);
52 }
53 }
54 return 0;
55 }
56