> 업계 통찰 >BLDC
기술 지원

STM32 제어 서보 프로그램의 포팅 코드를 수정하는 방법

게시됨 2026-03-29

제품 혁신을 할 때 가장 큰 두려움은 메인 컨트롤 칩을 교체하면 원래 잘 조정된 칩이서보 기구회전을 멈추게 됩니다. 많은 친구들이 새로운 STM32 개발 보드를 얻었고 보드를 옮기고 싶었습니다.서보 기구원래 다른 보드에서 사용하던 프로그램이 반응이 없거나 심하게 흔들리는 것을 발견했습니다. 사실 이식의 몇 가지 핵심 사항만 명확히 하면 전혀 복잡하지 않습니다. 오늘은 원활하게 "이동"하는 방법에 대해 이야기하겠습니다.서보 기구서로 다른 STM32 모델 간 프로그램.

STM32 서보 제어 코드를 변경하는 방법

서보 제어의 핵심은 약 20ms의 주기와 0.5ms~2.5ms 범위의 높은 수준의 시간을 갖는 PWM 파동을 출력하는 것입니다. 따라서 코드 마이그레이션의 첫 번째 단계는 새 보드에서 PWM을 생성할 수 있는 타이머와 채널을 찾는 것입니다. 원래 프로그램은 TIM2의 CH1을 사용했지만 이제는 TIM3의 CH2로 변경해야 할 수도 있습니다. 이 대응은 칩의 데이터 시트에서 명확하게 확인되어야 합니다. 변경 사항은 실제로 몇 가지 매개 변수의 문제입니다. 타이머 번호와 채널 번호를 변경하면 대부분의 코드를 사용할 수 있습니다.

타이머 구성을 변경한 후에는 클럭 주파수를 확인하는 것을 잊지 마세요. STM32의 모델에 따라 시스템 클록 및 타이머에 대한 클록 소스가 다를 수 있습니다. 예를 들어 F1 시리즈에 사용되던 원래 72MHz 주주파수가 F0 시리즈로 전환되면 48MHz가 될 수 있습니다. 이때 최종 출력 PWM 주기가 여전히 20ms인지 확인하기 위해 PWM 주파수 분할 계수와 다시 로드 값을 다시 계산해야 합니다. 간단히 말해서, ARR과 PSC 두 매개변수는 새 칩의 클럭을 기반으로 다시 계산되어 서보가 인식하는 신호를 수신할 수 있는지 확인합니다.

이식 중 핀 할당 방법

핀을 선택할 때 단순히 GPIO를 찾아 연결하지 마세요. 먼저 하드웨어 PWM 출력 핀인 "" 기능이 있는 핀을 찾아야 합니다. 하드웨어 PWM을 사용하면 CPU 리소스를 차지하지 않고 펄스 출력이 매우 안정적이며 서보가 원활하게 회전한다는 장점이 있습니다. 딜레이 기능을 통해 일반 GPIO를 사용하여 시뮬레이션을 해야 한다면 CPU가 소모되고, 프로그램이 조금 더 복잡해지면 타이밍이 쉽게 엉망이 되어 서보가 반드시 흔들리게 됩니다.

핀을 선택한 후 프로그램 초기화 부분에서 GPIO 작업 모드를 다중 푸시-풀 출력으로 설정해야 합니다. 이는 이 핀에 작업 책임을 할당하고 "PWM 신호 출력을 담당합니다"라고 말하는 것과 같습니다. 또한 원래 회로 기판에는 풀업 저항이 있지만 새 회로 기판에는 없는 경우 신호 간섭을 피하기 위해 유휴 상태에서 핀이 특정 레벨 상태를 갖도록 코드에서 내부 풀업을 활성화할지 여부를 고려해야 합니다.

제어 주파수 계산 방법

많은 사람들이 주파수를 계산할 때 두통을 겪습니다. 사실 간단한 방법이 있습니다. 서보에 필요한 PWM 주기는 50Hz이며, 이는 20ms 주기이다. 어떤 타이머를 사용하든 목표는 주파수를 50Hz로 높이는 것입니다. 계산 공식은 간단합니다: 타이머 출력 주파수 = 시스템 클럭 / (PSC+1) / (ARR+1). 먼저 PSC를 7200-1과 같은 편리한 숫자로 설정한 다음 최종 결과가 50Hz에 가까워지도록 ARR 값을 반대로 바꿉니다.

예를 들어, 시스템 클록이 72MHz이고 PSC를 7200-1로 설정하면 타이머의 계산 주파수는 10kHz가 됩니다. 출력 주파수를 50Hz에 도달하려면 ARR을 200-1로 설정하여 200개의 숫자가 모두 계산되도록(20ms)해야 합니다. 칩마다 기본 주파수가 다르기 때문에 이 아이디어에 따라 계산하여 최종 계산된 ARR과 PSC가 모두 정수인지 확인하고 ARR이 타이머의 최대 카운트 값을 초과하지 않도록 하여 프로그램이 문제 없이 실행되도록 할 수 있습니다.

다중 채널 서보 이식 팁

하나의 보드에서 여러 서보를 동시에 제어하려면 타이머의 채널 수에 따라 달라집니다. 타이머에는 일반적으로 4개의 채널이 있으며 각 채널은 독립적으로 PWM을 출력할 수 있으며 주파수는 공유됩니다. 따라서 서보가 모두 50Hz에서 작동하는 한 하나의 타이머를 사용하여 4개의 서보를 구동할 수 있으므로 타이머 리소스를 많이 절약할 수 있습니다. 초기화 중에 여러 채널을 구성하고 각각의 비교 값을 설정하기만 하면 됩니다.

4개 이상의 서보를 제어해야 하는 경우 두 번째 타이머를 활성화해야 합니다. 이식 시 단일 서보를 제어하기 위한 초기화 코드를 함수로 작성하고, 제어에 필요한 만큼 호출하고, 타이머 번호와 채널 번호를 파라미터로 전달하면 됩니다. 이런 방식으로 코드의 재사용성이 뛰어나며, 향후 몇 개의 서보가 추가되더라도 유지 관리가 쉽습니다. 각 채널의 비교 레지스터는 독립적이며 듀티 사이클을 설정할 때 별도로 작동할 수 있다는 점을 기억하십시오.

코드 이식 후 디버깅 방법

프로그램이 번인됐는데 서보가 응답하지 않나요? 걱정하지 마세요. 가장 간단한 하드웨어부터 시작해 보세요. 멀티미터를 사용하여 서보의 전원 공급 장치와 접지가 올바르게 연결되었는지 확인하십시오. 서보에는 높은 전류 요구 사항이 있으므로 외부 전원 공급 장치를 사용해야 합니다. 개발 보드의 3.3V에서 전원이 공급될 것이라고 기대하지 마십시오. 전원 공급 장치에 문제가 없으면 오실로스코프나 로직 분석기를 사용하여 칩 핀에 출력 파형이 있는지 확인하고 주기와 펄스 폭이 올바른지 확인하십시오.

파형은 올바르지만 서보가 여전히 회전하지 않으면 코드 로직에 문제가 있을 수 있습니다. 가장 간단한 테스트 프로그램을 먼저 작성하고 1.5ms의 고정된 하이 레벨을 출력하여 서보를 중간 위치로 되돌릴 수 있습니다. 이 기능을 켤 수 있다면 기본 드라이버에 문제가 없으며 제어 논리에 문제가 있다는 의미입니다. 점차적으로 기능을 추가하고, 조금씩 변경하고, 제거 방법을 사용하면 문제를 빠르게 찾을 수 있어 혼자 추측하는 것보다 훨씬 빠릅니다.

스티어링 기어 기능 확장 방법

이제 기본적인 이식이 완료되었으므로 몇 가지 트릭을 수행할 수 있습니다. 예를 들어, 서보가 특정 각도로 회전하도록 하려면 0~180도를 0.5ms~2.5ms의 펄스 폭 값에 매핑하는 각도 변환 함수를 작성할 수 있습니다. 이렇게 하면 복잡한 시간 값을 기억할 필요가 없습니다. 함수를 직접 호출하고 각도를 전달할 수 있습니다. 코드의 가독성과 이식성이 크게 향상되어 다른 사람들도 한눈에 이해할 수 있을 것입니다.

또 다른 예로, 제어 신호의 갑작스러운 변화로 인해 서보가 "떨리는" 것을 방지하기 위해 소프트웨어 필터링을 추가할 수도 있습니다. 실제 프로젝트에서는 센서가 다시 전송하는 데이터에 필연적으로 지터가 발생합니다. 프로그램에 간단한 이동평균 필터를 추가해서 서보에 보내면 움직임이 훨씬 부드러워집니다. 이러한 확장 기능을 독립 모듈로 캡슐화합니다. 다음 번에 다른 프로젝트에 이식할 때 이러한 '축적물'을 직접 사용할 수 있어 개발 효율성이 두 배로 높아집니다.

귀하의 서보 이식 프로젝트는 어디에 정체되어 있습니까? 핀 구성이 명확하지 않아서일까, 아니면 주파수 계산이 항상 틀린 걸까? 귀하의 경험에 대해 이야기하기 위해 댓글 영역에 메시지를 남겨 주셔서 감사합니다. 이 글이 도움이 되셨다면 좋아요와 저장 꼭 눌러주세요. 더 많은 실제 사례와 코드 템플릿을 보려면 당사 공식 웹사이트를 검색해 보세요!

업데이트 시간:2026-03-29

미래에 힘을 실어주다

귀하의 제품에 적합한 모터 또는 기어박스를 추천하려면 Kpower 제품 전문가에게 문의하십시오.

케이파워에 메일보내기
문의 제출
+86 0769 8399 3238
 
kpower지도