summaryrefslogtreecommitdiff
path: root/software/main/stepper.c
diff options
context:
space:
mode:
Diffstat (limited to 'software/main/stepper.c')
-rw-r--r--software/main/stepper.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/software/main/stepper.c b/software/main/stepper.c
new file mode 100644
index 0000000..71ac227
--- /dev/null
+++ b/software/main/stepper.c
@@ -0,0 +1,99 @@
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/gpio.h"
+#include "sdkconfig.h"
+
+#include "../include/stepper.h"
+
+// FOR L928 DRIVER
+// const uint8_t half_steps_phase[8] = {0x09, 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08};
+
+// void stepper_init(struct stepper_pins_t *stepper_ptr) {
+// gpio_set_direction(stepper_ptr->pin1, GPIO_MODE_OUTPUT);
+// gpio_set_direction(stepper_ptr->pin2, GPIO_MODE_OUTPUT);
+// gpio_set_direction(stepper_ptr->pin3, GPIO_MODE_OUTPUT);
+// gpio_set_direction(stepper_ptr->pin4, GPIO_MODE_OUTPUT);
+
+// printf("stepper init success\n");
+// }
+
+// void stepper_uninit(struct stepper_pins_t * stepper_ptr) {
+// gpio_set_direction(stepper_ptr->pin1, GPIO_MODE_INPUT);
+// gpio_set_direction(stepper_ptr->pin2, GPIO_MODE_INPUT);
+// gpio_set_direction(stepper_ptr->pin3, GPIO_MODE_INPUT);
+// gpio_set_direction(stepper_ptr->pin4, GPIO_MODE_INPUT);
+// }
+
+// void step(struct stepper_pins_t *stepper_ptr, int step) {
+// gpio_set_level(stepper_ptr->pin1, step & 1);
+// gpio_set_level(stepper_ptr->pin3, (step & 0b10) >> 1);
+// gpio_set_level(stepper_ptr->pin2, (step & 0b100) >> 2);
+// gpio_set_level(stepper_ptr->pin4, (step & 0b1000) >> 3);
+// }
+
+// void half_steps(struct stepper_pins_t *stepper_ptr, int steps, bool dir) {
+// int step_count;
+// int phase_index;
+
+// if(dir) {
+// phase_index = 0;
+// for(step_count = 0; step_count < steps; step_count++) {
+// if(phase_index > 7)
+// phase_index = 0;
+// step(stepper_ptr, half_steps_phase[phase_index]);
+// vTaskDelay(10 / portTICK_PERIOD_MS);
+// phase_index++;
+// }
+// } else {
+// phase_index = 7;
+// for(step_count = 0; step_count < steps; step_count++) {
+// if (phase_index < 0)
+// phase_index = 7;
+// step(stepper_ptr, half_steps_phase[phase_index]);
+// vTaskDelay(10 / portTICK_PERIOD_MS);
+// phase_index--;
+// }
+// }
+// }
+
+// FOR A4988 DRIVER
+const uint8_t step_pin = 19;
+const uint8_t dir_pin = 18;
+const uint8_t en_pin = 5;
+
+void stepper_init(void) {
+ gpio_set_direction(en_pin, GPIO_MODE_OUTPUT);
+ gpio_set_level(en_pin, HIGH);
+ gpio_set_direction(dir_pin, GPIO_MODE_OUTPUT);
+ gpio_set_direction(step_pin, GPIO_MODE_OUTPUT);
+}
+
+void stepper_uninit(void) {
+ gpio_set_level(en_pin, HIGH);
+ gpio_set_direction(en_pin, GPIO_MODE_DISABLE);
+ gpio_set_direction(dir_pin, GPIO_MODE_DISABLE);
+ gpio_set_direction(step_pin, GPIO_MODE_DISABLE);
+}
+
+void stepper_open(void) {
+ gpio_set_level(en_pin, LOW);
+ gpio_set_level(dir_pin, HIGH);
+ for(uint16_t i = 0; i < 1600; i++) {
+ gpio_set_level(step_pin, HIGH);
+ vTaskDelay(10 / portTICK_PERIOD_MS);
+ gpio_set_level(step_pin, LOW);
+ vTaskDelay(10 / portTICK_PERIOD_MS);
+ }
+}
+
+void stepper_close(void) {
+ gpio_set_level(en_pin, LOW);
+ gpio_set_level(dir_pin, LOW);
+ for(uint16_t i = 0; i < 1600; i++) {
+ gpio_set_level(step_pin, HIGH);
+ vTaskDelay(10 / portTICK_PERIOD_MS);
+ gpio_set_level(step_pin, LOW);
+ vTaskDelay(10 / portTICK_PERIOD_MS);
+ }
+} \ No newline at end of file