Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
2
Indexable
/*
 * step_motor_28BYJ-48.c
 *
 *  Created on: Aug 14, 2023
 *      Author: Tomek
 */
#include "step_motor_28BYJ-48.h"
#include "gpio.h"
#include "tim.h"

void delay (uint16_t us)
{
  __HAL_TIM_SET_COUNTER(&htim1, 0);
  while (__HAL_TIM_GET_COUNTER(&htim1) < us);
}

void stepper_set_rpm (int rpm)  // Set rpm--> max 13, min 1,,,  went to 14 rev/min
{
	delay(60000000/stepsperrev/rpm);
}



void stepper_full_drive (int step)
{
	switch (step){
		case 0:
			  HAL_GPIO_WritePin(COIL1_GPIO_Port, COIL1_Pin, GPIO_PIN_SET);   // IN1
			  HAL_GPIO_WritePin(COIL2_GPIO_Port, COIL2_Pin,GPIO_PIN_SET);   // IN2
			  HAL_GPIO_WritePin(COIL3_GPIO_Port, COIL3_Pin, GPIO_PIN_RESET);   // IN3
			  HAL_GPIO_WritePin(COIL4_GPIO_Port, COIL4_Pin,GPIO_PIN_RESET);   // IN4
			  break;

		case 1:
			  HAL_GPIO_WritePin(COIL1_GPIO_Port, COIL1_Pin, GPIO_PIN_RESET);   // IN1
			  HAL_GPIO_WritePin(COIL2_GPIO_Port, COIL2_Pin, GPIO_PIN_SET);   // IN2
			  HAL_GPIO_WritePin(COIL3_GPIO_Port, COIL3_Pin, GPIO_PIN_SET);   // IN3
			  HAL_GPIO_WritePin(COIL4_GPIO_Port, COIL4_Pin, GPIO_PIN_RESET);   // IN4
			  break;

		case 2:
			  HAL_GPIO_WritePin(COIL1_GPIO_Port, COIL1_Pin, GPIO_PIN_RESET);   // IN1
			  HAL_GPIO_WritePin(COIL2_GPIO_Port, COIL2_Pin, GPIO_PIN_RESET);   // IN2
			  HAL_GPIO_WritePin(COIL3_GPIO_Port, COIL3_Pin, GPIO_PIN_SET);   // IN3
			  HAL_GPIO_WritePin(COIL4_GPIO_Port, COIL4_Pin, GPIO_PIN_SET);   // IN4
			  break;

		case 3:
			  HAL_GPIO_WritePin(COIL1_GPIO_Port, COIL1_Pin, GPIO_PIN_SET);   // IN1
			  HAL_GPIO_WritePin(COIL2_GPIO_Port, COIL2_Pin, GPIO_PIN_RESET);   // IN2
			  HAL_GPIO_WritePin(COIL3_GPIO_Port, COIL3_Pin, GPIO_PIN_RESET);   // IN3
			  HAL_GPIO_WritePin(COIL4_GPIO_Port, COIL4_Pin, GPIO_PIN_SET);   // IN4
			  break;
				}
}

void stepper_step_angle (float angle, int direction, int rpm)
{
	float anglepersequence = 0.703125;  // 360 = 512 sequences
	int numberofsequences = (int) (gear*(angle/anglepersequence));

	for (int seq=0; seq<numberofsequences; seq++)
	{
		if (direction == 0)  // for clockwise
		{
			for (int step=3; step>=0; step--)
			{
				stepper_full_drive(step);
				stepper_set_rpm(rpm);
			}

		}

		else if (direction == 1)  // for anti-clockwise
		{
			for (int step=0; step<4; step++)
			{
				stepper_full_drive(step);
				stepper_set_rpm(rpm);
			}
		}
	}
}
Editor is loading...
Leave a Comment