> 업계 통찰 >기어 모터
기술 지원

51 마이크로컨트롤러 서보 제어 코드 연습: 서보의 정확한 회전을 달성하기 위한 세 단계

게시됨 2026-05-06

"아는 것이 힘이다." - 프랜시스 베이컨.

이 임베디드 세계에서 이 모토는 완전히 새로운 살과 피를 가지고 있습니다. 즉, 정확한 타이밍도 힘입니다.

늦은 밤, 로봇팔 매니아인 한 남자가 화면을 바라보고 있었다. 이때 그는 자신의 서보가 파킨슨병 환자처럼 떨리고 있는 것을 발견했다. 이때 그는 갑자기 제어 코드가 마술적인 것이 아니라 실제로는 수학이라는 것을 깨달았습니다.

여기서 가져올게요kpower 서보 기구예를 들어 PWM 신호를 생성하는 51 마이크로 컨트롤러의 기본 논리를 분석한 다음 직접 이식할 수 있는 코드 뼈대를 제공합니다.

모든 사례는 "조향 기어 고착", "각도 드리프트", "전원 켜기 점프" 및 기타 자주 발생하는 결함과 같은 실험실의 일반적인 상황에서 파생됩니다.

핵심 주장: 서보 제어의 본질은 펄스 폭의 "시간 조각"입니다.

01왜 당신의 서보는 항상 "경련"합니까? ——PWM 원리의 인과관계

서보는 "시간 편집증"입니다.

20ms 주기의 PWM 웨이브인 하나의 언어만 인식하며, 하이 레벨 시간은 0.5ms에서 2.5ms 사이입니다.

인과관계의 사슬

이유 A: 수정 발진기 주파수가 벗어나 타이머의 초기 값이 잘못 계산되어 펄스 폭 오류가 누적되어 스티어링 기어 위치가 벗어나게 됩니다.

이유 B, 인터럽트 중첩이 처리되지 않고 메인 루프가 PWM 출력을 중단하고 펄스 기간이 점점 길어지고 서보가 날카로운 경고음을 울립니다.

매니아는 12MHz 수정 발진기를 사용하여 11.0592MHz의 타이머 값을 직접 적용한 적이 있습니다. 그런 다음 서보는 코드를 너무 성급하게 작성했다는 이유로 조롱하는 것처럼 15Hz의 주파수에서 "끄덕거리는" 동작을 수행했습니다.

스스로에게 답을 물어보세요: 왜 일부 사람들은 인터넷에서 코드를 복사하지 못합니까?

스스로 대답했습니다. 그 이유는 51 마이크로 컨트롤러의 기계 주기가 수정 발진기 주기의 12배이고 STC 시리즈 1T 모드가 기존 8051 속도의 12배라고 아무도 말하지 않았기 때문입니다.

펄스 폭 변조의 수학적 표현은 다음과 같습니다(의사 코드).

하이 레벨 시간(ms) = 0.5 + (각도/180)2.0 타이머 재로드 값 = 65536 - (펄스 폭_us) / (12/크리스탈 MHz)

핵심 결론은 오래된 시간 기준으로 보정된 조향 기어 제어 장치가 없다는 것입니다. 상황은 해수면을 측정하기 위해 줄자를 사용하는 것과 같습니다. 도구 자체는 괜찮지만 참조 시스템은 재앙입니다.

02레지스터에서 파형까지 - 작동하는 코드는 어떤 모습일까요?

팁 단어: 펄스 폭 변조

Keil을 열고 새 프로젝트를 만든 다음 AT89C52를 선택합니다.

이는 매우 흔한 기본 사례이며, 초보자 중 95%가 처음으로 서보를 조용히 회전시키는 출발점이기도 합니다.

单片机可以直接控制舵机吗_32单片机控制舵机pwm程序_51单片机舵机控制代码

하드웨어 연결(가상 공간 포지셔닝)

신호선 → P1.0

빨간색 선 → 5V (독립 전원 공급! 개발 보드에서 전원을 공급받지 마십시오)

흑색선 → GND

코드 구조(타임라인에 따라 4단계로 나뉜다):

1. 타이머 초기화: 모드 1(16비트), 12T 모드.

2. 계산 매개변수

기간 20ms → 20000us

섭씨 0도는 0.5밀리초에 해당합니다. 타이머 인터럽트 1회 후 0.1 마이크로초를 누적하는 정확도는 너무 낭비적이라는 것을 알 수 있습니다. 이를 기반으로 단일 시간 인터럽트 내의 소프트웨어 카운팅을 대신 사용해야 합니다.

3. 인터럽트 서비스 기능

void Timer0_ISR() 인터럽트 1 { 정적 부호 없는 문자 카운터 = 0; TH0 = 0xFC; // 다시 로드 값: 1ms마다 한 번씩 인터럽트(12MHz 수정 발진기) TL0 = 0x66; 카운터++; if(카운터 = 20) 카운터 = 0; }

참고로 pulse_width_in_ms의 값 범위는 0.5~2.5인데, 코드에서는 10을 곱하여 정수로 저장됩니다.

4. 메인 루프는 펄스 폭을 수정합니다.

pulse_width_in_ms = 10; // 1.0ms → 0도? 아니요, 영하 45도입니다! pulse_width_in_ms = 15; // 1.5ms → 중앙값 pulse_width_in_ms = 20; // 2.0ms → 90도

해당 검증 사례에서 pulse_width_in_ms가 10일 때 서보 암이 가리키는 실제 측정 각도는 -45°입니다. 이 각도 상태는 영점이 이동하는 일반적인 연결 방법으로 인해 발생합니다. 이러한 결과가 나타나는 이유는 Calibration 작업을 반대 방향으로 수행해야 함을 의미합니다.

03복사-붙여넣기의 저주를 깨기 위한 4가지 일반적인 함정

공장 자동화 엔지니어가 동일한 코드로 도움 요청을 보냈습니다.kpower 서보 기구같은 것입니다. 그의 생산 라인에서는 스테이션 5의 서보가 항상 잠겨 있습니다.

3시간의 조사 끝에 우리는 다음을 발견했습니다.

Q/A:서보가 전원을 켜자마자 미친듯이 회전하는 이유는 무엇입니까?

답변: P1.0 포트는 재설정 중에 High가 되므로 초기화 중에는 Low로 설정해야 합니다.

Q/A:내 각도 대응이 왜 바뀌나요?

다음은 서보 암의 설치 방향을 확인하는 것입니다. 많은 브랜드의 서보에서 0도는 0.5ms에 해당합니다. 그러나 일부 항공기 모델 서보의 정의는 반대입니다.

单片机可以直接控制舵机吗_32单片机控制舵机pwm程序_51单片机舵机控制代码

Q/A:배터리 전압이 떨어진 후 서보가 흔들리면 어떻게 해야 합니까?

답변: 전압 감소로 인한 전류 부족으로 인해 독립 전원 공급 장치를 설정할 때 부족 전압 잠금이 설정되고 임계값은 4.8V로 설정됩니다.

Q/A:51개의 마이크로 컨트롤러가 동시에 8개의 서보를 제어하는 ​​것이 가능합니까?

답: 별도의 타이머 인터럽트가 타임아웃되기 때문에 이는 불가능하므로 PCA 모듈로 교체하거나 시분할 새로고침이 필요합니다.

두려움이 호소합니다. 위의 사항 중 하나라도 무시하면 디버깅 47분에 서보에서 연기가 나며 이는 실험실 통계에서 가장 자주 발생하는 하드웨어 소모 시점입니다.

04나선형 상승 - 단일 조향 기어에서 다자유도 로봇 팔까지

프롬프트 단어: 시간 기반

하나의 서보를 제어하는 ​​것은 열거형입니다. 8개의 서보를 제어하는 ​​것은 알고리즘입니다.

로봇 팔이 사인파 궤적을 그리도록 해야 하는 경우 선형 펄스 폭 제어는 즉시 약점을 드러냅니다.

각 단일 관절의 각속도는 불연속적인 상태를 나타내며, 이는 끝단의 가속도에 급격한 변화를 일으키고 궁극적으로 기계적 진동이 베이스에 전달됩니다.

인과적 주장

51 마이크로 컨트롤러에는 하드웨어 PWM 어레이가 없으므로 "시간 공유 폴링 + 중간 변수 보간" 방법을 사용해야 합니다.

해결책:

1. 20ms의 큰 기간을 N 시간 슬롯으로 나눕니다(N=서보 수).

2. 각 시간 슬롯에서 하나의 신호 라인만 하이로 풀링되고 나머지는 로우로 유지됩니다.

3. 배열을 이용하여 각 서보의 펄스 폭을 저장하고, 인터럽트 내에서 순차적으로 출력합니다.

마치 유치원 보육사가 먹을 수 있는 바삭바삭한 간식을 많은 아이들에게 한 명씩 번갈아 전달하는 것과 같습니다. 매번 주어지는 시간은 매우 짧은 밀리초에 불과합니다. 무자비하고 차가워 보이지만 효과적인 효과가 있습니다.

코드 변환 예(의사 코드 논리):

unsigned int pwm_val[8] = {10,15,20,12,18,9,14,16}; 부호 없는 문자 현재_서보 기구= 0; void Timer0_ISR() Interrupt 1 { // 이전 서보 신호 P1 &= 0xFE를 끕니다. // P1.0만 지우고 실제 마스크는 필요합니다. // 현재 서보 하이 레벨 시간을 로드합니다. TH0 = (65536 - pwm_val[current_servo]100) >> 8; // 단위는 0.1ms라고 가정 TL0 = (65536 - pwm_val[current_servo]100) & 0xFF; // 현재 서보 신호 P1을 켭니다 |= (1

첫 번째는 핵심 알림입니다. 이 코드는 서보 스위치가 발생할 때마다 타이머가 다시 시작됩니다. 결과적으로 최종 총 주기는 더 이상 원래 값인 20ms를 유지하지 않습니다. 이러한 상황을 고려하여 추가적인 시간 로직을 추가할 필요가 있습니다.

05"완벽주의자" 엔지니어를 위한 튜닝 바이블

팁 단어: 데드존

같은 배치에 속하더라도kpower서보는 개인차로 인해 15%의 서보가 1~3도의 정적 차이를 갖게 됩니다.

이것은 결함이 아니라 물리학의 관용입니다.

역사를 되돌아보면, 1980년대 산업용 로봇은 전위차계 피드백 방식을 사용했는데, 이 피드백 방식에 따른 데드존 설정은 5도에 달했다. 이제 자기 인코더 서보는 이미 0.1도의 반복 정확도를 달성할 수 있습니다. 하지만 256레벨 타입인 51 마이크로컨트롤러의 8비트 PWM 분해능은 약 0.7도 정도의 변화만 구분할 수 있다.

제품 리뷰 본문튜닝 단계:

1. 대략적인 교정 방법을 사용하여 중간 펄스 폭을 1.5ms로 설정하고 기록한 다음 실제 각도를 측정하고 오프셋 Δθ를 기록합니다.

2. 선형 보상: 각도와 펄스 폭으로 구성된 공식에 오프셋 보정 항이 추가됩니다. 이 보정 항은 펄스 폭이 기본 값에 각도 단계와 오프셋을 더한 값과 동일하다는 형식입니다. 구체적인 공식은 펄스 = 베이스 + 각도 스텝 + 오프셋입니다.

3. 사구 회피: 목표 각도가 현재 각도와 다른 경우

예: 수중 로봇 팔 프로젝트에서 해수 온도 변화로 인해 수정 발진기 주파수가 ±0.1% 드리프트되었습니다. 엔지니어들은 10분마다 스스로 교정하여 서보를 기계적 한계 위치로 돌리고, 해당 펄스 폭을 기록하고, 동적 조건에서 시간 기반을 수정했습니다.

06엔딩: 시간의 조각가는 결코 은퇴하지 않는다

"인내는 모든 지능의 기초이다." - 플라톤.

51 마이크로컨트롤러 서보 제어에 대한 궁극적인 비밀은 코드가 보여주는 놀라운 기술이 아니라 매 마이크로초의 경이로움에 있습니다.

핵심 포인트를 반복하세요

PWM은 복잡한 이론이 아닙니다.펄스 폭 변조이 키워드 뒤에 있는 수학적 제약 조건입니다.

시간 기반 안정성 > 코드 우아함.

지터, 하울링 또는 드리프트 조건이 발생하면 먼저 전원 공급 장치를 확인한 다음 중단을 확인하고 마지막으로 스티어링 기어에 대해 질문하십시오.

조치를 위한 제안(나선형의 마지막 기반):

1. 오늘 밤에는 브레드보드를 ​​사용하여 단일 서보 테스트 회로를 구축하겠습니다.

2. 10도부터 시작하여 단계적으로 진행하고 오실로스코프 또는 로직 분석기를 사용하여 각 각도에 해당하는 실제 펄스 폭을 기록합니다.

3. 코드에 데드존 기능 및 전압 모니터링 경고를 추가합니다.

4. 51 마이크로컨트롤러를 "시간 조각 기계"로 사용하십시오. 방해받을 때마다 조각칼이 떨어지는 순간이다.

가을밤, 연구실 창문으로 시원한 바람이 불어온다. 이때 오실로스코프에 표시된 사각파가 가지런히 배열된 줄이 형광판에 뛰어오르고 있다. 이 순간 당신은 마침내 통제가 정복이 아니라 시간과의 화해라는 것을 이해하게 됩니다.

이 순간 51 마이크로 컨트롤러에 대한 첫 번째 서보 제어 코드 작성을 시작하십시오. 모든 정확한 움직임에 대해 마이크로초라는 약속을 이행하고 있음을 기억하십시오.

업데이트 시간:2026-05-06

미래에 힘을 실어주다

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

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