1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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);
}
}
|