BASIC4MCU | 질문게시판 | stm32f767 스텝모터 속도 질문있습니다
페이지 정보
작성자 123132 작성일2023-05-27 21:08 조회1,413회 댓글0건본문
#include "stm32f767xx.h"
#include "OK-STM767.h"
unsigned char stepForward(void); // 시계방향 회전
unsigned char stepBackward(void); // 반시계방향 회전
// 1상 여자 방식의 구동 데이터
unsigned char step_data[4] = {0x00000001, 0x00000002, 0x00000004, 0x00000008};
// 구동 데이터를 위한 인덱스
int step_index = -1;
void Initialize_TIM(void)
{
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 타이머 2 클럭 활성화
TIM2->CR1 &= ~TIM_CR1_CEN; // 타이머 2 비활성화
TIM2->PSC = 7999; // 프리스케일러 설정 (타이머 주파수 = APB1 타이머 클럭 / (PSC + 1))
TIM2->ARR = 999; // 자동 재로딩 레지스터 값 설정 (타이머 주기 = (ARR + 1) / 타이머 주파수)
TIM2->CR1 |= TIM_CR1_ARPE; // 자동 재로딩 설정
TIM2->CR1 |= TIM_CR1_CEN; // 타이머 2 활성화
}
void Initialize_GPIO(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Port D 클럭 활성화
GPIOD->MODER |= GPIO_MODER_MODER0_0 | GPIO_MODER_MODER1_0 | GPIO_MODER_MODER2_0 | GPIO_MODER_MODER3_0; // PD0~PD3의 모드를 출력모드로 설정
}
void Delay_TIM2(uint32_t milliseconds)
{
TIM2->CNT = 0; // 타이머 카운터 초기화
while (TIM2->CNT < milliseconds); // 지정한 시간만큼 대기
}
int main(void)
{
Initialize_MCU(); // MCU 및 키트 초기화
Delay_ms(50); // 시스템 안정화를 위해 대기
Initialize_TIM(); // 타이머 초기화
Initialize_GPIO(); // GPIO 초기화
while (1)
{
for (int i = 0; i < 2000; i++)
{
GPIOD->ODR &= ~(0x0000000F);
GPIOD->ODR |= stepForward(); // 시계방향 회전
Delay_TIM2(20); // 타이머를 사용하여 딜레이
}
Delay_ms(100);
for (int i = 0; i < 2000; i++)
{
GPIOD->ODR &= ~(0x0000000F);
GPIOD->ODR |= stepBackward(); // 반시계방향 회전
Delay_TIM2(20);
}
Delay_ms(100);
}
}
/* ----- 사용자 함수 ------------------------------------------------------- */
unsigned char stepForward(void) // 시계방향 회전
{
step_index++;
if (step_index >= 4)
step_index = 0;
return step_data[step_index];
}
unsigned char stepBackward(void) // 반시계방향 회전
{
step_index--;
if (step_index < 0)
step_index = 3;
return step_data[step_index];
}
현재 이렇게 코드를 작성하여 스텝모터를 돌리고 있는데 스텝모터의 속도를 더 높이고싶은데 Delay_TIM2()에서 20보다 숫자를 작게하면 모터가 돌아가지 않는데 뭐가 문제일까요 현재 12v로 전압넣어주고있어 전압에는 문제가 없는거 같습니다
댓글 0
조회수 1,413등록된 댓글이 없습니다.