배너
닫기

산업동향

배너

가속/감속 프로파일을 적용한 바이폴라 스테퍼 모터

  • 등록 2012.12.04 09:03:58
URL복사

가속/감속 프로파일을 적용한 바이폴라 스테퍼 모터

바이폴라 스테퍼 모터를 가속/감속하는 것은 이를 활용한 모든 애플리케이션 설계 시 가장 중요한 부분이다.
파워 스테이지 컨트롤이 최근 10년 동안 크게 간소화됐지만, 가속 및 감소 프로파일의 적용이 여전히 해당 애플리케이션의 프로세스 영역에 포함되고 있는 것을 통해 이러한 사실을 확인할 수 있다.
모터를 적절히 가속 및 감속할 수 있을 경우 설계자는 애플리케이션 사양에 맞춰 효율적인 운용을 실현할 수 있다.

서론

DC 모터에서는 전압(펄스폭 모듈레이션을 사용할 경우 듀티사이클)을 끌어올려 모터의 샤프트(Shaft)가 특정 속도에 도달하는 속도를 조절할 수 있다. 그러나 스테퍼 모터에서는 전압이 모터 속도에 아무런 영향을 주지 못한다.
그 이유는 스테퍼 모터의 경우 전압 변화가 와인딩에 흐르는 전류 충전 속도를 변화시켜 스테퍼가 최대 속도에 도달하도록 이끄는 것은 맞지만, 결국 와인딩 통과 전류가 변환되는 속도나 방향을 바꾸는 속도가 모터 속도에 결정적인 영향을 미치기 때문이다.
그렇다면 가속 컨트롤 프로파일이 필요치 않는 스테퍼를 가정해 보기로 하자. 이를 통해 아무런 영향 없이 스테퍼를 원하는 목표 속도에서 실행시킬 수 있을까? 사실, 스테퍼-모터 모션은 작동을 위해 다른 모터 토폴로지보다 오히려 많은 가속 및 감속 프로파일을 필요로 하므로, 아무 속도에서나 시작할 경우 예상치 못한 결과가 초래될 수 있다.
한편 이 글은 독자가 시장에 출시돼 있는 통합 마이크로 스테핑 드라이버를 이용한 스테퍼 모터 컨트롤에 능숙하다는 가정 하에 작성되었다. 그러한 배경에서 보면 TI의 DRV 8818과 같은 스테퍼 드라이버의 출력은 네모파의 주파수(STEP 입력)에 정비례한다는 사실을 쉽게 파악할 수 있다. 또한 각각의 STEP 펄스는 드라이버의 스테핑 로직이 정의한 스텝(또는 마이크로스텝)과 같기 때문에, 네모파의 주파수를 변경하면 스테퍼의 속도도 따라서 변화하는 것을 간단히 예측할 수 있다.
그림 1은 모터 제조업체에서 제공한 기존 스테핑 속도/토크 곡선(Torque Curve)과 시작 주파수라 불리는 중요한 파라미터 fs를 보여준다. 이 특정 모터를 제대로 작동시키기 위해서는 fs보다 작은 스테핑 속도를 사용해야 한다.



이와는 반대로 스테핑 속도가 fs보다 큰 모터로 시작하면 모터가 멈추면서 동기화를 잃어버리는 경우가 종종 발생한다. 이러한 현상의 발생 시에는 모터 컨트롤이 심각하게 훼손될 우려가 있으므로 주의가 필요하다.
하지만 이러한 문제는 의외로 손쉽게 해결이 가능하다. 모터를 fs 이하의 스테핑 속도로 시작한 다음 목표 속도에 도달할 때까지 이를 점점 늘려가기만 하면 된다.
관련 가이드라인에 따르면 그림의 토크/속도 곡선 아래로 속도가 유지되는 한, fs를 훨씬 초과하는 스테핑 속도에서도 스테퍼 모터를 작동시킬 수 있는 것으로 명시돼 있다.
이와 더불어 단순히 STEP 펄스를 정지시켜 모터를 중지시켜서는 안 된다는 점에 주의를 기울일 필요가 있다.
이를 실행할 때에는 스테핑 속도를 목표 속도에서 점차 낮춰, 기타 스텝 및 원치 않는 스텝 등에 의한 샤프트 관성 없이 모터가 정지할 수 있도록 지속적으로 속도를 낮춰야 한다.
특히 스테퍼가 포지셔닝 애플리케이션에서 사용 중인 경우에 멈춰야 함에도 불구하고 계속 움직이면 모터 샤프트가 적절한 위치를 벗어날 수도 있으므로 이는 매우 중요하다. 또한 이 경우 폐회로 포지션 피드백이 스테퍼 구동에 사용되는 경우는 아주 드물기 때문에, 명령받은 스텝만 발생할 수 있도록 조정을 가할 필요가 있다.

가속/감속 프로파일

시작 속도부터 원하는 목표 속도까지 스테퍼를 가속화하려면 정기적인 간격으로 전류 속도를 변화시켜야 한다. 대부분의 엔지니어들은 이러한 경우 마이크로컨트롤러를 이용해 스테퍼를 제어한다.
이때 적용되는 가장 보편적인 구현 방식은 단 두 개의 타이머만 사용하는 것인데, 보통 스테핑 속도의 정확한 타이밍 함수를 생성하는데 필요한 SPS(Steps-per-second) 타이머가 첫 번째 것으로 적용된다.
그리고 두 번째 것으로는 첫 번째 타이머를 정기적으로 변경하는 데 필요한 가속 타이머가 이용된다.
이 경우 속도는 적시 간격으로 변하기 때문에, 시간 대비 각속도(dv/dt)를 도출하는 것이 가능하다. 그리고 이러한 방식으로 도출된 것을 바로 가속 즉, 시간에 따른 속도 변화 방식이라고 부른다.
그림 2는 전형적인 마이크로컨트롤러 기반의 가속 파일을 확대한 것으로, 스테퍼가 목표 속도를 위해 가속화됐을 때 발생하는 상황을 보여준다.



여기에 사용된 SPS는 희망하는 초당 스테퍼의 수, 즉 모터가 이동하는 스테핑 속도를 나타낸다. 이를 위해 SPS 타이머는 지정 속도에서 펄스를 방출하도록 프로그래밍돼야 하는데, 타이머의 오실레이터 주파수에 따라 다음의 방정식을 적용할 수 있다.



이때 SPS_timer_register로는 이후 STEP 펄스를 생성하는데 걸리는 시간을 타이머에게 전달하는 16bit 숫자가 적용되고, timer_oscillator로는 타이머가 실행되는 속도를 MHz로 표시하는 상수가 사용 된다.
이 방정식은 자주 사용되기 때문에 일반적으로 한 함수에 저장된다. 이것이 어떻게 작동하는지 구체적으로 살펴보기 위해 타이머 오실레이터가 8MHz에서 실행되고 있고, 모터에서 원하는 스테핑 속도가 200 SPS인 경우를 가정해 보기로 하자. 방정식에 따르면, 이때 프로그램 코드는 SPS_timer _register의 값으로 40,000이 표시된다.
따라서 40,000 타이머가 클릭될 때마다 STEP 펄스 하나가 생성될 수 있는데, 이는 초당 200 펄스의 타이머 기반 출력으로 나타나고, 샤프트 회전은 200 SPS와 같다는 것을 의미한다.
이러한 이벤트가 매번 발생할 때마다 인터럽트가 생성되면서 타이머는 삭제된다. STEP 입력에서 상승 엣지의 타이밍은 마이크로 스테핑 드라이버의 정확성에 있어 매우 중요한 요소이지만, 하락 엣지는 그 다음 STEP 상승 엣지보다 한참 앞에 있는 경우 거의 언제든 일어날 수 있는 것으로 간주된다.
가속 곡선을 정의하는 데에는 두 가지 파라미터가 필요하다. 그 첫 번째는 SPS 값을 얼마나 자주 변경하느냐는 것이고, 두 번째는 얼마만큼 변경하느냐가 바로 그 파라미터에 해당된다. 이때 가속 곡선은 이 두 파라미터에 정비례한 형태로 나타난다.
즉, SPS 값이 자주 업데이트 될수록 그 값도 높아지고 해당 스테퍼는 가속 곡선을 형성하는 것을 알 수 있다.
이 경우 타이머 기능은 SPS 값을 변경하는데 필요한 만큼 초당 횟수를 시동하고, 타이머의 인터럽트-서비스 루틴(ISR)은 미리 정해놓은 계수로 현재 SPS를 증가시킴으로써 새로운 속도를 알아내는 데 사용된다.
여기서 가속 속도는 초당 SPS(SPSPS), 즉 현재 SPS 속도가 초당 변하는 횟수로 측정할 수 있다. 따라서 1을 더해 SPS 값이 변하는 경우에는 가속 속도가 변할 때마다 계속해서 가속 타이머의 ISR을 호출(촉발)해야 한다.
이를 적용하면 1,000 SPSPS 가속 속도의 경우, 모터 속도를 200 SPS에서 시작하여 1,200 SPS에 도달할 때까지 하나씩 증가시켜야 하며, 이를 위해 가속 타이머의 ISR은 1,000번의 호출이 필요한 것을 알 수 있다.
이때 적용될 수 있는 또 다른 방법은 가속 타이머를 절반만 호출하고 SPS를 2씩 증가시키는 것이다. 이를 앞에서 설명한 예와 비교하면, 가속 타이머의 ISR은 단 500번만 호출하면 되지만 모터는 여전히 200 SPS에서 시작하여 1초 내에 1,200 SPS에 도달해야 한다는 것을 알 수 있다. 이 두 방법의 차이는 분해능을 대가로 실시간을 더 많이 활용할 수 있다는 점이다. 결론적으로 999 SPSPS라는 정확한 가속 속도를 달성하려면, 첫 번째 방식을 사용하는 것이 보다 바람직하다는 것을 확인할 수 있다.
이 경우 한 옵션을 다른 옵션 대신 선택했을 때의 타협점을 무시해서는 안 된다. 그 선택으로 어떤 종류의 모션 품질을 얻을 수 있는지가 결정되기 때문이다. 예를 들어, 가능한 모든 가속 프로파일을 얻는데 수많은 입도(Granularity)가 필요한 경우는 가속 타이머의 ISR을 최대한 많이 호출하는 것이 효과적이다.
그러나 앞서 언급한 SPS 타이머 방정식에는 나눗셈 연산이 포함되어 있다. 어떤 프로세서 코어가 사용되고 있는지에 따라, 이 나눗셈은 ISR을 효과적으로 호출해 새로운 SPS 속도를 정확하게 생성할 수 있는 횟수를 크게 제한하는 역할을 한다.
구체적으로 16MHz로 실행되는 CPU와 TI의 MSP430™을 이용한 구현에서는 나눗셈 연산으로 약 500㎲가 소요되는 것으로 나타났다.
그 결과, ISR이 초당 호출될 수 있는 최대수는 2000회로 제한됐으며 이 제한값은 증분 계수를 한정시켰다. 따라서 가속 속도가 2000보다 큰 경우에는 1보다 큰 증분을 사용하는 것이 적합한 것으로 확인됐다.
가속 속도는 모터가 시작된 직후 계산된다. 이 계산을 담당하는 소프트웨어는 가속 타이머의 간격과 증분 계수가 어떤 값을 갖을지 알아낸 후, 그에 따라 변수를 구성한다. SPS 속도가 충분히 수정되어 목표 속도에 도달할 때까지는 이러한 변수들이 동시에 사용되며 이를 통해 목표 속도가 충족되면, 가속 프로파일은 완료된다.
감속 프로파일은 가속 프로파일과 기본적으로 동일하며 증분 계수가 양수가 아닌 음수라는 점만 다르다. 이를 적절히 활용하려면 모터가 안전하게 정지할 수 있는 새로운 목표 속도를 지정해주어야 한다.
그림 3은 가속/감속 속도가 대칭을 이루는 가속/감속 프로파일을 보여준다. 이것은 비대칭 속도인 경우에도 동일하게 사용할 수 있다.




위치 컨트롤

지금까지 살펴본 바에 따르면, 속도 제어 루프로 모터를 작동하는 것은 상당히 간단해 보인다. 이때 모터는 목표 속도에 돌입했다가 일정 지점에 이르면 정지 명령을 받는다.
이 경우 미리 정해놓은 시간 안에 정해진 수의 스텝을 실행하도록 요구한다면 무슨 일이 벌어질까? 이때부터 가속/감속 프로파일의 역할은 그 어느 때보다 중요해진다.
이러한 모션컨트롤 토폴로지에서는 프로그래밍된 모든 스텝이 실행되면 모터가 멈추어야 한다. 여기에 적용되는 몇 개의 스텝을 방출할 것인지를 지정하는 변수를 바로 number_of_ steps라고 부른다.
이 모션 프로파일은 명령을 기다리기보다는 요구된 시간에 모터가 정지하도록 코딩하는 것이 효과적이다. 이를 위해 사용 가능한 방법은 steps_ to_stop이라는 변수를 number_of_ steps 보다 작게 프로그램하는 것이다. 그러면 소프트웨어가 steps_to_stop을 감시하다가 언제 감속에 착수해야 할지를 결정할 수 있다.
이때 가속은 목표 속도에 도달할 때까지 실행을 완료하지 않을 것이다. 이런 경우, 감속이 시작되는 지점인 steps_ to_stop 카운트에 도달할 때까지 스테퍼가 실행될 수 있다.
예를 들어 1000 스텝 실행의 경우, steps_to_stop이 800으로 설정되면 모터는 가속 프로파일을 통해 가동을 시작하고 스텝 800에 도달할 때까지 실행을 지속한다. 그러다가 스텝 800부터 모터는 멈출 때까지 감속을 진행한다.
모든 시스템 변수가 어떻게 구성되는지에 따라 다음의 중요한 다섯 가지 시나리오를 검토하는 것이 요구된다(그림 4 참고).



●시나리오 1 : 모터가 목표 속도에 도달하기 전에 모든 스텝을 방출
●시나리오 2 : 모터가 목표 속도에 있는 동안 모든 스텝을 방출
●시나리오 3 : 정지 속도에 도달하기 전에 모든 스텝을 방출
●시나리오 4 : 정지 속도에 도달했을 때 모든 스텝을 방출
●시나리오 5 : 정지 속도에 도달한 후 모든 스텝을 방출

이 중 모터 속도에 도달했을 때 모터를 바로 정지시키는 것(시나리오 4)이 가장 이상적인 사례이다.
정지 속도에 도달하기 직전에 모터를 정지시키는 것(시나리오 3)이나 도달 후에 정지시키는 것(시나리오 5)은, 해당 이벤트가 발생했을 때 이상적인 사례와 얼마나 스텝이 떨어져 있는지에 따라 허용 가능할 수도 있다.
예를 들어 모터가 너무 빨리 이동하면서 모든 스텝이 방출되는 경우, 모터 샤프트가 회전 관성 때문에 적절한 위치를 벗어날 수도 있다.
반대로 모든 스텝이 집행되기 전에 정지 속도에 도달한다면, 해당 프로파일을 집행하는데 필요한 총 시간이 매우 길어지게 된다.
따라서 시나리오 1과 2는 예시용으로 제시된 것일 뿐, 실제로 발생해서는 안 된다. 즉, 설계자는 언제나 steps_to_ stop이 number_of_steps보다 작게 만들어야 한다.
가능성 있는 모든 시나리오를 고려한 설계자라면 시스템이 최적의 반응을 보장할 수 있도록 튜닝하는 것이 어렵지 않을 것이다. 튜닝을 줄일 수 있는 또 다른 방법은 총 스텝 수를 비율로 분할하여 가속/감속 프로파일의 각 특정 영역에 할당하는 것이다. 이러한 알고리즘의 구현은 총 스텝 수의 20%는 모터 가속에 쓰고, 60%는 도달된 일정 속도에서 모터를 실행하는데 이용하며, 나머지 20%는 모터를 감소하는데 적용하도록 유도할 수 있다(그림 5 참고).



number_of_ steps가 1000이라면, 스테퍼는 200 스텝으로 프로그램된 가속 속도로 실현하고, 일정 스텝 속도에 도달하면 가속을 멈추어야 한다. 그 이후에는 이 속도로 600 스텝을 실행하고, 마지막 200 스텝은 감속 프로파일로 실행하는 것이 요구된다.
이런 특성의 알고리즘에서는 비율이 정확하게 설정됐다고 가정했을 때, 잘못된 모션 프로파일 부분에서 스텝을 모두 소모하는 것이 불가능하다는 점을 주지하고 있어야 한다.
예를 들어 그림 5에서 가속 부분은 감속 부분이 균형을 이루고 있기 때문에, 모터는 동일한 속도로 시작하고 정지할 가능성이 높다.
이런 방식의 단점은 목표 속도가 어떻게 될지 확인하기가 매우 어렵다는 점이다. 하지만 목표 속도가 크게 중요하지 않다면 이 알고리즘을 이용해 모터가 항상 안전한 속도에서 정지하도록 설정하는 것이 가능하다.
한편 해당 애플리케이션에서 도달 속도가 너무 느린 경우에는, 이 알고리즘으로 모터 샤프트 속도를 높이는 유일한 방법은 가속 속도를 증가시키거나 가속/감속감속 영역에 사용된 스텝 수 비율을 증가시키는 것이다.
그러나 설계자는 모터 토크/속도 곡선에 위배되는 속도에 모터가 진입하지 않도록 주의를 기울이는 것이 필요하다.

결론

바이폴라 스테퍼 모터를 가속/감속하는 것은 이를 활용한 모든 애플리케이션 설계 시 가장 중요한 부분이다.
파워 스테이지 컨트롤이 최근 10년 동안 크게 간소화됐지만, 가속 및 감소 프로파일의 적용이 여전히 해당 애플리케이션 프로세서의 영역에 포함되고 있는 것을 통해 이러한 사실을 확인할 수 있다.
최근 들어 스테퍼 솔루션의 광범위한 활용으로, 애플리케이션의 스테퍼 모터를 위한 적절한 모션 컨트롤 처리 알고리즘의 코딩 및 튜닝이 간편해지는 추세에 있다.
이를 통해 모터를 적절히 가속 및 감속함으로써 설계자는 애플리케이션을 사양에 맞춰 효과적으로 운용하는 것이 가능해졌다. 

Jose I. Quinones 텍사스 인스트루먼트









배너










주요파트너/추천기업