BASIC4MCU | 질문게시판 | 스텝모터 위치제어 질문 드립니다
페이지 정보
작성자 박취 작성일2020-09-15 01:59 조회3,630회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=13385
본문
안녕하세요! 지난번 질문의 친절하신 답변 다시한번 감사드립니다. 지난번과 마찬가지로 stm32f103 보드이고 HAL드라이버를 사용중입니다. 이번엔 스텝모터의 위치를 제어 하려고 합니다. 처음은 규칙적인 스텝, 예를들어 30스텝씩의 이동은 다음과 같은 구문에 의해 동작 시킬 수 있었습니다. int PulseCNT=0; void StepDW(int n){ for(int a=0; aStep){ n=PulseCNT-Step ; StepUP(n);} } 헌데 이는 상대적인 값에 의해 이동을 하고 있습니다. 만약 절대적인 값 즉, 위와 같이 30 스텝 씩이 아닌, 초기 0의 위치를 기준으로 1번 버튼은 10스텝 이동한 위치, 2번 버튼은 35스텝 이동한 위치, 3번 버튼은 65...와같이 절대값을 통해 이동하는 방법이 있는지 궁금합니다. (*1번을 누를때마다 10스텝 이동이 아닌 절대 위치 10 입니다.) 제 생각엔 PulseCNT가 현재 자기 스텝의 척도이므로 이를 통해서 절대값을 취해야 한다고 생각하여 시도 해보고 있는데 구현을 하지 못하고 있습니다. 시도와 고민 끝에 결국 질문 드립니다. 항상 감사합니다. ;>
댓글 1
조회수 3,630master님의 댓글
master 작성일
회전당 200스텝 모터겠죠?
각도로의 변환은 나중에 고민하시고 스텝으로만 제어 해보세요
int current=0,target=0;
if(버튼0?)target=0; // 0스텝 버튼을 누르면
if(버튼50?)target=50; // 50스텝 버튼을 누르면
if(버튼100?)target=100; // 100스텝 버튼을 누르면
if(버튼150?)target=150; // 150스텝 버튼을 누르면
버튼을 누르면 해당 스텝의 타겟 값을 입력합니다.
if(target<current){
스텝모터 1스텝 감소 제어
current--;
}
if(target>current){
스텝모터 1스텝 증가 제어
current++;
}
1스텝씩만 제어 하고 있는데요
target 과 current의 차이가 크더라도
루프 안에서 반복적으로 1스텝씩 실행하므로 금새 원하는 위치로 이동하며, 이동하는 중간에 다른 스텝의 버튼을 누르면 현재 상태에서 새로운 스텝으로 이동을 시작합니다.
간단하죠?