Top 31 Pid 모터 위치 제어 Quick Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me pid 모터 위치 제어 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: pid 모터 위치 제어 PID 모터 제어, PID 제어 예시, pid제어 실생활, BLDC 모터 PID 제어, PID 제어 알고리즘, PID 제어 C 코드, 엔코더 모터 PID 제어, pid 온도제어 알고리즘


DC 모터 PID 위치제어
DC 모터 PID 위치제어


위치제어 (1) PID 제어 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 10851 ⭐ Ratings
  • Top rated: 4.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 위치제어 (1) PID 제어 : 네이버 블로그 이진섭 학생이 모터제어 쪽에서 PID 제어기 이외 다른 제어기에도 관심을 보여 간단히 TDC(Time delay control) 부분까지 소개를 해보려고 합니다. …
  • Most searched keywords: Whether you are looking for 위치제어 (1) PID 제어 : 네이버 블로그 이진섭 학생이 모터제어 쪽에서 PID 제어기 이외 다른 제어기에도 관심을 보여 간단히 TDC(Time delay control) 부분까지 소개를 해보려고 합니다.
  • Table of Contents:

카테고리 이동

i2A Systems Co Ltd (주)아이투에이시스템즈

이 블로그 
힘센서힘제어
 카테고리 글

카테고리

이 블로그 
힘센서힘제어
 카테고리 글

위치제어 (1) PID 제어 : 네이버 블로그
위치제어 (1) PID 제어 : 네이버 블로그

Read More

엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01])

  • Article author: pkr7098.tistory.com
  • Reviews from users: 37797 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01]) 서론. 엔코더 모터는 위치 제어뿐만 아니라 속도제어도 가능합니다. 전장에서 알아 봤던 M 또는 T 방식으로 현재 RPM을 측정하고 … …
  • Most searched keywords: Whether you are looking for 엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01]) 서론. 엔코더 모터는 위치 제어뿐만 아니라 속도제어도 가능합니다. 전장에서 알아 봤던 M 또는 T 방식으로 현재 RPM을 측정하고 … 관련글 엔코더 모터 제어 (0. 소개) (tistory.com) 엔코더 모터 제어 (1. 펄스및 위치 측정) (tistory.com) 엔코더 모터 제어 (2. 속도 계산) (tistory.com) 서론 엔코더 모터는 위치 제어뿐만 아니라 속도제어도..
  • Table of Contents:

관련글

서론

PID 제어

결과 영상

Continue

태그

stm32실전 Related Posts

티스토리툴바

엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01])
엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01])

Read More

¸ðÅÍÀÇ PID Á¦¾î¹ý

  • Article author: www.ktechno.co.kr
  • Reviews from users: 23521 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about ¸ðÅÍÀÇ PID Á¦¾î¹ý 자동제어 방식 가운데서 가장 흔히 이용되는 제어방식으로 PID 제어라는 방식이 … 이에 대해 조작량을 목표값과 현재 위치와의 차에 비례한 크기가 되도록 하며, … …
  • Most searched keywords: Whether you are looking for ¸ðÅÍÀÇ PID Á¦¾î¹ý 자동제어 방식 가운데서 가장 흔히 이용되는 제어방식으로 PID 제어라는 방식이 … 이에 대해 조작량을 목표값과 현재 위치와의 차에 비례한 크기가 되도록 하며, …
  • Table of Contents:
¸ðÅÍÀÇ PID Á¦¾î¹ý
¸ðÅÍÀÇ PID Á¦¾î¹ý

Read More

STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현 – PUS’s Embedded System Development Blog

  • Article author: pus0319.github.io
  • Reviews from users: 10262 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현 – PUS’s Embedded System Development Blog STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현. … DC모터의 속도표시에 이어 DC모터의 PID 위치제어 기본에 대해 구현하고. …
  • Most searched keywords: Whether you are looking for STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현 – PUS’s Embedded System Development Blog STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현. … DC모터의 속도표시에 이어 DC모터의 PID 위치제어 기본에 대해 구현하고. STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현
  • Table of Contents:

Skip links

21 PID 위치 제어 튜닝(Ziegler-Nichols 튜닝 규칙 사용)

22 PID 위치 제어 미세 튜닝

github 사용법 정리

Velostat 정리

3Line RTD Sensor 정리

STM32_UART_Interrupt_MODE

STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현 - PUS’s Embedded System Development Blog
STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현 – PUS’s Embedded System Development Blog

Read More

KR20030020781A – 리니어 모터의 통합 pid 위치 제어기 및 이를 이용한이득 설정방법
– Google Patents

  • Article author: patents.google.com
  • Reviews from users: 28971 ⭐ Ratings
  • Top rated: 4.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about KR20030020781A – 리니어 모터의 통합 pid 위치 제어기 및 이를 이용한이득 설정방법
    – Google Patents 통합 PID 위치 제어기는 구조가 매우 간단하며 전체 위치 제어 루프의 동특성을 1차 저역 필터 형태로 유지하도록 함으로써 제어 이득을 설정하기 쉽고 오버-슛 현상이 … …
  • Most searched keywords: Whether you are looking for KR20030020781A – 리니어 모터의 통합 pid 위치 제어기 및 이를 이용한이득 설정방법
    – Google Patents 통합 PID 위치 제어기는 구조가 매우 간단하며 전체 위치 제어 루프의 동특성을 1차 저역 필터 형태로 유지하도록 함으로써 제어 이득을 설정하기 쉽고 오버-슛 현상이 …
    이득 설계가 간단화된 리니어 모터의 통합 PID 위치 제어기 및 이를 이용한 이득 설정 방법을 제시한다.
    리니어 모터 이동자의 기준 위치에 대한 실제 위치의 오차값을 추출하기 위한 제1 믹서; 제1 믹서의 출력값에 대한 비례 이득, 미분 이득 및 적분 이득을 출력하고 이를 합산하여 출력하기 위한 PID 이득 제어부; 이동자의 실제 위치에 대한 미분 이득 및 비례 이득을 합산하여 출력하는 위치 이득 제어부; 및 PID 이득 제어부와 위치 이득 제어부의 출력값을 합산하기 위한 제 3 믹서;를 구비한다.
    통합 PID 위치 제어기는 구조가 매우 간단하며 전체 위치 제어 루프의 동특성을 1차 저역 필터 형태로 유지하도록 함으로써 제어 이득을 설정하기 쉽고 오버-슛 현상이 없는 매우 안정된 동작을 수행할 수 있다. 또한, 전체 시스템의 컷-오프 주파수를 일정하게 유지하면서도 완전한 이득 설정의 자유도를 얻을 수 있어 모터의 강성도를 효과적으로 증가시킬 수 있다.

  • Table of Contents:

Info

Links

Classifications

Abstract

Description

Claims (2)

Priority Applications (1)

Applications Claiming Priority (1)

Publications (1)

ID=27722475

Family Applications (1)

Country Status (1)

Cited By (2)

Citations (4)

Patent Citations (4)

Cited By (4)

Similar Documents

Legal Events

KR20030020781A - 리니어 모터의 통합 pid 위치 제어기 및 이를 이용한이득 설정방법 
        - Google Patents
KR20030020781A – 리니어 모터의 통합 pid 위치 제어기 및 이를 이용한이득 설정방법
– Google Patents

Read More

pid 모터 위치 제어

  • Article author: www.koreascience.or.kr
  • Reviews from users: 22884 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about pid 모터 위치 제어 모터와 기어를 적용한 구동장치를 이용하여 정밀한 위치제어를 수행하기 위하여 I-PD 제어기법과 이 … 논문에서는 변형된 PID 제어기법을 제시하여 위. …
  • Most searched keywords: Whether you are looking for pid 모터 위치 제어 모터와 기어를 적용한 구동장치를 이용하여 정밀한 위치제어를 수행하기 위하여 I-PD 제어기법과 이 … 논문에서는 변형된 PID 제어기법을 제시하여 위.
  • Table of Contents:
pid 모터 위치 제어
pid 모터 위치 제어

Read More

[논문]PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구

  • Article author: scienceon.kisti.re.kr
  • Reviews from users: 11472 ⭐ Ratings
  • Top rated: 4.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [논문]PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구 PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구 원문보기. A Study on the Speed Control of Dc Servo Motor using PID Controller. …
  • Most searched keywords: Whether you are looking for [논문]PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구 PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구 원문보기. A Study on the Speed Control of Dc Servo Motor using PID Controller.
  • Table of Contents:

PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구

원문보기

A Study on the Speed Control of Dc Servo Motor using PID Controller

상세정보조회

원문조회

[논문]PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구
[논문]PID제어기를 이용한 DC서보모터의 속도제어에 관한 연구

Read More

makersweb – Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계

  • Article author: makersweb.net
  • Reviews from users: 19872 ⭐ Ratings
  • Top rated: 4.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about makersweb – Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계 그림1처럼 모터를 이용하여 볼리드스류에 올려진 질량을 χ만큼 이동시키고자 할때 이를위한 PID제어기를 설계하고자한다. motor.png. <그림1>. 모터 위치 … …
  • Most searched keywords: Whether you are looking for makersweb – Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계 그림1처럼 모터를 이용하여 볼리드스류에 올려진 질량을 χ만큼 이동시키고자 할때 이를위한 PID제어기를 설계하고자한다. motor.png. <그림1>. 모터 위치 …
  • Table of Contents:

댓글 8

메이커스

공지사항

makersweb - Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계
makersweb – Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계

Read More

모터 > P, PI, PD, PID 제어 | Basic4MCU.com

  • Article author: www.basic4mcu.com
  • Reviews from users: 5719 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 모터 > P, PI, PD, PID 제어 | Basic4MCU.com 에러값(내가 원하는 제어 목표와 실제 제어 상태)에 대한 비례, 적분, 미분을 의미한다. PID제어는 모터의 속도/위치 제어, 보일러의 온도 제어등 … …
  • Most searched keywords: Whether you are looking for 모터 > P, PI, PD, PID 제어 | Basic4MCU.com 에러값(내가 원하는 제어 목표와 실제 제어 상태)에 대한 비례, 적분, 미분을 의미한다. PID제어는 모터의 속도/위치 제어, 보일러의 온도 제어등 … 2017.09.05, P, PI, PD, PID 제어.PID 제어에 대해서.회사에서 세미나 한것을 간단히 정리해본다.일단P : 비례제어I : 적분제어D : 미분제어여기서 비례, 적분, 미분 이란 것은에러값(내가 원하는 제어 목표와 실제 제어 상태)에 대한 비례, 적분, 미분을의미한다.PID제어는 모터의 속도/위치 제어, 보일러의 온도 제어등 여러가지 분야에서 쓰일수 있기 때문에에러값이라하면 모터의 속도라거나, 보일러에서 끓는 물의 온도 등등이 된다.그 에러값들은 제어 회로의 구성에 따라 전압의 아날로그 값이 되거나,시간 간격에 따른 펄스의 개수, 혹은 펄스의 길이 이런 다양한 값이 될수 있다.이런 에러값을 받아들여서 P, I, D 라는 방법을 활용하여 제어를 하게 된다.1. ..,website
  • Table of Contents:

메인메뉴

페이지 정보

첨부파일

본문

P PI PD PID 제어

댓글 0

모터HOME 모터 전체 목록

모터 카테고리

모터 > P, PI, PD, PID 제어 | Basic4MCU.com” style=”width:100%”><figcaption>모터 > P, PI, PD, PID 제어 | Basic4MCU.com</figcaption></figure>
<p style=Read More


See more articles in the same category here: Chewathai27.com/to/blog.

위치제어 (1) PID 제어

심플 PID는 제어 대상의 다이나믹스를 고려하지 않고,

순전히 게인 3개를 튜닝해가면서 트라이얼 에러로 게인 값을 맟춰줘야 합니다.

그래서 각도를 60도를 가라고 지령을 줄 때와, 360도를 가라고 지령을 줄 때 가장 잘 추종하는 게인값이 다를 수 있습니다.

Kp는 제어의 추종속도에 영향을 미치지만 P 제어기만을 이용해서는 원하는 값에 도달하지 않을 수 있습니다. 이런 현상을 정상상태 오차(Steady state error) 라고 표현합니다. 보통 모터는 마찰과 기어비 등의 특성에 따라 각기 다른 데드존(Dead zone)을 가지고 있습니다. 데드존은 제어입력을 넣어도 모터가 움직이지 않는 구간을 말하는데요, 특정 PWM 값 이상을 넣어줘야만 모터가 회전을 시작합니다. 따라서, 에러가 적당히 작은 시점에 P게인과 곱해진 에러 값이 데드존 안에 있게 되면 모터는 움직이지 않고그 상태를 유지하게 됩니다.

이를 보상하는 성분이 I게인에 해당됩니다. 적분제어기는 작은 에러의 값이라도 계속 누적해서 제어입력을 만들어내기 때문에 최종적으로는 정상상태 오차를 0으로 만들어 정확한 각도제어를 가능하게 합니다. 하지만 적분제어기에 의해 상승시간(rising time)은 빨라지지만 정착속도(settling time)가 느려지게 되기 때문에 미분제어기가 함께 사용됩니다. D게인은 상승시간과 정착속도를 빠르게 하지만 자칫 불안정해지는 현상을 유발하게 될 수 있습니다.

PID 제어기만으로 제어를 할 때, 원하는 각도 값이 스텝으로 확확 바뀌기 때문에 부드럽게 움직임을 만들어 주기 위해 경로를 생성하는 부분이 필요하기도 합니다.

이에 대해서는 다음시간에 소개하도록 하겠습니다.

엔코더 모터 제어 (3. PID 제어로 속도 제어 [PID 함수들 만들기 Part 01])

반응형

관련글

엔코더 모터 제어 (0. 소개) (tistory.com)

엔코더 모터 제어 (1. 펄스및 위치 측정) (tistory.com)

엔코더 모터 제어 (2. 속도 계산) (tistory.com)

서론

엔코더 모터는 위치 제어뿐만 아니라 속도제어도 가능합니다. 전장에서 알아 봤던 M 또는 T 방식으로 현재 RPM을 측정하고, 이를 기반으로 현재 속도를 수정하고, 목표치에 맞춰질 수 있도록 제어량을 조절하는 것입니다.

즉 다음과 같은 피드백 방식으로 속도를 제어합니다.

그림01

PWM 신호와 피드백 제어를 통해 얻은 값을 더하여 모터를 동작시킵니다. 모터가 동작되면 모터의 속도를 측정하고 피드백 제어에서 오차를 계산하여 PWM 값과 다시 결합하여 제어량을 결정합니다.

피드백 제어는 이러한 방식으로 동작되며, 이번 장에서는 PID 제어를 통해 모터의 속도를 제어해 보겠습니다.

PID 제어

변수 생성

에러 계산 함수

P 제어 함수

I 제어 함수

D 제어 함수

PID 함수

결과 영상

참고 자료

STM32F103ZET6 Reference Manual

STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 programming manual

PID제어란? (tistory.com)

PID 제어

PID 제어를 하기 위해선 다음의 개념들이 필요합니다.

개념 설명 변수 목표값 우리가 목표로하는 모터의 RPM target 현재값 현재 모터의 RPM current 실시간 에러값 목표 RPM과 현재 RPM 사이의 차이값입니다. realError 누적 에러값 목표 RPM과 현재 RPM 사이의 차이를 누적한 값입니다. accError 에러 변화량 현재 에러와 이전 에러 사이의 차입니다. errorGap P 제어량 P 제어를 통해 얻은 제어량 pControl P gain P 제어에 사용되는 계수 (상수) P_GAIN I 제어량 I 제어를 통해 얻은 제어량 iControl I gain I 제어에 사용되는 계수 (상수) I_GAIN D 제어량 D 제어를 통해 얻은 제어량 dControl D gain D 제어에 사용되는 계수 (상수) D_GAIN 최종 제어향 P, I, D 제어량을 합친 제어향 pidControl 미분계수 값 d/dt에 해당되는 값 (상수) TIME

에러 계산 함수

에러의 종류가 실시간 에러, 누적 에러가 있기 때문에 이들을 계산하는 함수를 선언합니다.

void calculateErrors(void) { errorGap = target – current – realError; realError = target – current; // 실시간 에러는 단순히 목표값 – 현재값을 의미합니다. accError += realError; /* 누적 에러는 실시간 에러를 계속해서 더한 값입니다. I 제어를 위해 사용됩니다. */ }

errorGap는 현재 에러와 이전 에러사이의 변화량이며, D 제어를 위해 사용합니다.

realError는 목표값과 현재값 사이의 차 즉, 목표값 – 현재값을 의미합니다. P 제어를 위해 사용합니다.

accError는 realError값을 누적한 값으로 I 제어를 위해 사용됩니다.

변수 생성

위의 개념들을 코드로 표현하면 변수에 해당합니다. (물론 몇몇 개념들을 상수로 선언합니다.)

#define P_GAIN 1 #define I_GAIN 1 #define D_GAIN 1 #define TIME 4 unsigned int target = 0; unsigned int current = 0; unsigned int pControl = 0; unsigned int iControl = 0; unsigned int dControl = 0; unsigned int pidControl = 0; unsigned int realError = 0; unsigned int accError = 0; unsigned int errorGap = 0;

수학적으로만 봤을 때는 모두 실수값인 double형으로 선언해야하지만, MCU는 기본적으로 실수 연산을 못하기 때문에 int 형으로 선언한 것입니다.

해당 변수들은 글로벌 변수로 선언해주셔야합니다. (main 위에다 선언)

P 제어 함수

unsigned int pControlSystem(void) { pControl = P_GAIN * realError; return pControl; }

P 제어는 단순히 오차 * 계수에 해당됩니다.

I 제어 함수

unsigned int iControlSystem(void) { iControl = I_GAIN * (accError * TIME); return iControl; }

I 제어는 시작부터 지금까지의 오차를 기준으로하는 제어 방법입니다.

수학적으로 보면 다음과 같습니다.

그림02

여기서 realError을 누적한 값이 accError이고, dt는 TIME이니 위의 함수와 같은 수식이 나오게 됩니다.

D 제어 함수

unsigned int dControlSystem(void) { dControl = D_GAIN * (errorGap / TIME); return dControl; }

PID 제어 함수

unsigned int pidControlSystem(void) { pidControl = pControl + iControl + dControl; return pidControl; }

결과 영상

노란색 선은 목표값이고, 초록색은 현재값입니다.

50 RPM -> 100 RPM -> 150 RPM -> 200 RPM -> 250 RPM -> 300 RPM -> 0 RPM -> 50 RPM -> …

위의 순서를 따라 목표값을 바꾸면서 모터의 현재 속도가 어떻게 반응하는지 영상을 통해 알아봤습니다.

Continue

반응형

STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현

STM32F746_TouchGFX_FreeRTOS_8_DC모터 PID 위치제어 구현

DC모터의 속도표시에 이어 DC모터의 PID 위치제어 기본에 대해 구현하고

이를 UI로 표시하는 동작을 구현하였습니다.

kp, Ki, Kd, 목표각도 크기를 UI에 입력 후 적용하여

START를 누르면 입력한 값에 따른 동작을 수행합니다.

그래프에는 현재각도에 대한 값을 표현합니다.

전에 작성한 내용과 같이 보시는 것을 추천합니다.

PID제어내용정리

1. PID 위치 제어 기본코드

FreeRTOS환경에서 PID 위치 제어기(Function)을 만든 예제입니다.

Basic Task 환경에서 PID 위치 제어기(Function)을 주기적으로 호출하여 구현하였습니다.

typedef struct _T_DC_PID_CONTROL_ { double dP ; // Kp double dI ; // Ki double dD ; // Kd int dAngle ; // 목표각도 int dAngleSign ; // 0(+) : CCW , 1(-) : CW } sDCPIDCTLMessage ; // <1> typedef struct _T_DC_PID_ERROR_ { double Proportional ; // P값 double Integral ; // I값 double Differential ; // D값 double LastError ; // D값 계산을 위한 단위시간(dt)전의 Error값 uint32_t LastmsTick ; // Scheduling Latency를 고려한 단위시간(dt) 계산에 사용하는 // 마지막에 저장한 FreeRTOS 절대 Tick 값. } sDCPIDERROR ; // <2> /* main.c */ sDCPIDCTLMessage DCPIDCTLMsg ; sDCPIDERROR DCPIDERROR ; void PIDCTL_Task ( void * argument ) { double CurrentMovedAngle ; /***/ if ( PID_CTL_Parameter_Update_Flag ) { Set_PIDCTL ( & DCPIDCTLMsg ); } /***/ if ( PID_POS_Start_Flag ) // <3> { ResetCurrentMovedEncoder (); ResetPIDERRORValue ( & DCPIDERROR ); Start_Motor (); DCPIDERROR . LastmsTick = osKernelGetTickCount (); } /***/ if ( Is_Start_Motor () == 1 ) // <4> { PID_Relative_Cal_Encoder_to_Angle ( & CurrentMovedAngle ); // <5> if ( PIDPOSController ( DCPIDCTLMsg , CurrentMovedAngle , & DCPIDERROR )) // <6> { //PID Pos Control Complete. //send CompleteMessage to UI DCPIDSTATEMsg . uState = MSTOP ; } osMessageQueuePut ( PIDCANGLEQueueHandle ,( & CurrentMovedAngle ), 0 , 0 ); // <7> } osDelay ( 10 ); // <8> }

먼저, kp, Ki, Kd, 목표각도 등에 대한 구조체(UI로부터 Update됨)<1>와

PID 제어기에서 단위 시간(dt)마다 갱신하는 각종 계산 값에 대한 구조체<2>가 필요합니다.

PID Parameter 설정 후, <3>과 같이 UI로부터 START신호를 받으면,

움직인 각도(현재각도)값과 PID 을 Reset하고 모터의 Break를 해제합니다.

초기에 단위시간(dt)가 너무 크게 나오지 않도록 FreeRTOS 절대 Tick값으로 대입합니다.

모터의 Break를 해제 후, 본격적으로 PID 위치 제어기를 사용합니다. 단위시간(dt) = 약 10Ticks(10ms) <8>과 같이 PID 위치 제어기를 단위시간(dt)마다 주기적으로 실행하도록 합니다. 10Ticks마다 실행하도록 설정했지만,

Multitasking환경에서 실제로는 10Ticks보다 살짝 더 높습니다.

이러한 현상을 Scheduling Latency 라고 합니다. 그래서, Scheduling Latency를 고려한 실제 단위시간(dt) 을

PID 위치 제어기 안에서 따로 구해야합니다.

(자세한 내용은 PID 위치 제어기 함수 내용 참고)

PID 위치 제어기를 수행하기에 앞서, <5>와 같이 Count된 Encoder 값을

움직인 현재각도 값으로 변환합니다.

<6>과 같이 PID 위치 제어기를 통해 PID 위치제어를 수행합니다.

PID 위치 제어기에 필요한 argument는 크게 아래와 같습니다. PID parameter(Kp, Ki, Kd, 목표각도값) : DCPIDCTLMsg 현재각도 값 : CurrentMovedAngle 단위 시간(dt)마다 갱신하는 각종 계산 값 또한 필요합니다.

PID 위치 제어기에 필요한 argument는 크게 아래와 같습니다. PID 위치제어를 수행 후 현재각도 값을 UI에 표시하기 위해 <7>과 같이

UI System으로 현재각도 값을 Message queue를 이용하여 전송합니다.

아래부터는 실제 PID 위치 제어기의 구현 내용입니다.

uint8_t PIDPOSController ( sDCPIDCTLMessage aDCPIDCTLMsg , double aCurrentMovedAngle , sDCPIDERROR * pDCPIDERROR ) { /******** <9> ********/ double kP = aDCPIDCTLMsg . dP ; double kI = aDCPIDCTLMsg . dI ; double kD = aDCPIDCTLMsg . dD ; double SetMovedAngle = ( double )( aDCPIDCTLMsg . dAngle * (( aDCPIDCTLMsg . dAngleSign == 0 ) ? ( 1 ) : ( – 1 ))); uint32_t CurrentmsTick = osKernelGetTickCount (); double ElapsedmsTick ; double mstosec = 0.001 ; double OutputPID ; /*********************/ /******** <9> ********/ if ( CurrentmsTick > pDCPIDERROR -> LastmsTick ) { ElapsedmsTick = ( double )( CurrentmsTick – pDCPIDERROR -> LastmsTick ); } else if ( CurrentmsTick < pDCPIDERROR -> LastmsTick ) { ElapsedmsTick = ( double )( 0xFFFFFFFF – pDCPIDERROR -> LastmsTick + CurrentmsTick ); } else { ElapsedmsTick = 1 ; } ElapsedmsTick = mstosec * ElapsedmsTick ; /*********************/ /******** <10> ********/ pDCPIDERROR -> Proportional = SetMovedAngle – aCurrentMovedAngle ; /*********************/ /******** <11> ********/ pDCPIDERROR -> Integral += (( pDCPIDERROR -> Proportional ) * ElapsedmsTick ); /*********************/ /******** <12> ********/ pDCPIDERROR -> Differential = ((( pDCPIDERROR -> Proportional ) – ( pDCPIDERROR -> LastError )) / ElapsedmsTick ); /*********************/ /******** <13> ********/ OutputPID = kP * ( pDCPIDERROR -> Proportional ) + kI * ( pDCPIDERROR -> Integral ) + kD * ( pDCPIDERROR -> Differential ); /*********************/ /******** <14> ********/ if ( OutputPID > 0 ) { HAL_GPIO_WritePin ( DCMDIR_GPIO_Port , DCMDIR_Pin , GPIO_PIN_RESET ); //CCW if ( OutputPID > 1000 ) { OutputPID = 1000 ; } } else if ( OutputPID < 0 ) { HAL_GPIO_WritePin ( DCMDIR_GPIO_Port , DCMDIR_Pin , GPIO_PIN_SET ); //CW if ( OutputPID < - 1000 ) { OutputPID = - 1000 ; } OutputPID = fabs ( OutputPID ); } DCM_PWM_SetValue (( uint16_t ) OutputPID ); /*********************/ /******** <15> ********/ pDCPIDERROR -> LastmsTick = CurrentmsTick ; pDCPIDERROR -> LastError = pDCPIDERROR -> Proportional ; /*********************/ return 0 ; }

먼저 <8>와 같이 PID 위치 제어기에 사용해야하는 각종 parameter 값을 읽습니다.

<9>와 같이 앞서 언급드린 대로 실제단위시간(dt)를 계산합니다. 실제단위시간(dt) =

현재시간(CurrentmsTick) – 이전에 수행한 PID 제어값(MV)계산 후의 절대시간(LastmsTick) osKernelGetTickCount();를 통해 받는 값은 unsigned long type의 FreeRTOS의 절대 Tick 값입니다.

FreeRTOS의 절대 Tick 값은 0xFFFFFFFF 이후 OverFlow되어 0x00000000되기 때문에 이를 고려하여

실제단위시간(dt)가 잘못 계산되는 일이 없도록 해야합니다. 실제 Tick값은 ms단위이기 때문에 0.001을 곱셈하여 sec단위로 바꿨습니다.

(굳이 단위전환하지 않고 Gain 값을 적절하게 하면 되긴합니다.)

본격적으로 <10> 부터 <13>까지 PID 제어값(MV)계산을 수행합니다. <10>과 같이 P를 계산합니다. 전에 소개해드린 P의 공식은 아래와 같습니다.

여기서 e(t) 는 경과시간에 따른 오차(Error)입니다.

는 경과시간에 따른 오차(Error)입니다. e(t) 는 시간에 대한 함수로 표현하였지만,

실제로는 아래와 같이 구할 수 있습니다. e(t) == 기준입력( r , 목표값) – 측정된 출력( r_now , 실제측정값) 코드에서는 기준입력은 ‘SetMovedAngle’ 이고 측정된 출력은 ‘aCurrentMovedAngle’ 입니다.

는 시간에 대한 함수로 표현하였지만, 실제로는 아래와 같이 구할 수 있습니다.

<11>과 같이 I를 계산합니다. 전에 소개해드렸던 I의 공식은 아래와 같습니다.

적분항은 코드로 어떻게 구현해요? 라는 의문점이 들 것입니다.

위의 I의 공식은 더 정확하게 표현하면 ‘정적분’ 이고 ‘정적분’은 아래와 같이 리만합의 극한 을 통해 표현할 수 있습니다.

코드에서 e(tn) 은 앞서 계산한 P 이고, Δt 는 앞서 계산한 실제단위시간(dt) 입니다.

<12>와 같이 D를 계산합니다. 전에 소개해드렸던 D의 공식은 아래와 같습니다.

그럼 미분항은 코드로 어떻게 구현해요? 라는 의문점 또한 들 것입니다.

위의 D의 공식의 의미는 오차변화율 을 구하는 것입니다.

결론적으로, 오차에 대한 미분이 아닌, 차분 을 한다는 것임.

을 한다는 것임. 코드에서 e(tnow) 는 앞서 계산한 P 이고, e(t) 는 이전에 계산한 P 이며,

Δt 는 앞서 계산한 실제단위시간(dt) 입니다.

<13>과 같이 P,I,D 값을 각 각의 Gain에 곱하여 모두 더하여 최종적인 MV값(OutputPID)을 구합니다.

OutputPID는 위의 예제 기준으로 엄밀히 말하면

내가 움직이고 싶은 각도값을 모터(플랜트)가 알아먹을 수 있도록 변환한 값입니다.

나의 목표각도는 이렇고 현재각도는 이러한데 단위시간(dt)동안 ‘OutputPID’만큼 모터를 돌려라 ‘OutputPID’값을 그대로 DC 모터를 제어하기 위한 PWM신호 값을 설정하는데 사용하기 때문에

<14>와 같이 정해진 PWM 신호 범위 내에 DC 모터를 제어하도록 해야합니다.

내가 움직이고 싶은 각도값을 모터(플랜트)가 알아먹을 수 있도록 변환한 값입니다. <15>와 같이 D를 계산하기 위해 앞서 계산한 P을 이전 계산한 P로,

‘현재시간’을 ‘이전시간’으로 사용하기 위해 대입하여 저장합니다.

2. PID 위치 제어 튜닝

이번에는 위의 구현된 코드를 통해 DC모터의 PID 위치제어값을

튜닝하는 과정을 진행하였고 이에 대해 정리하였습니다.

2.1 PID 위치 제어 튜닝(Ziegler-Nichols 튜닝 규칙 사용)

앞서 소개드린 PID제어기 튜닝법 중, Ziegler-Nichols 튜닝 규칙의 #2 방법으로 진행해보겠습니다.

PID 위치제어 튜닝의 목표는 아래와 같습니다. 목표동작각도 : 45도. Overshoot는 2도를 초과하지 않는 것으로 함. 2.번항을 충족하는 조건에서 가장 빠른 정착시간(Settling time) 찾기. 정상상태오차(steady-state error)는 1도를 초과하지 않기.

먼저, Ki와 Kd는 0으로 설정하고 Kp를 0부터 증가시켜가면서 출력이 최초로 지속적인 진동 을 하게되는 Kp값을 구함.

위의 사진을 보면, Kp가 100에서 지속적으로 진동하는 것을 알 수 있음.

임계주기(Kcr) = 100

= 100 Kp가 100인 상태에서 진동주기는 UI X축 기준 약 6.7정도 됨.

진동주기(Pcr) = 6.7 x 11ms = 0.073sec

임계주기(Kcr) 가 100이고 진동주기(Pcr) 가 0.073sec이므로

공식에 따른 PID parameter 값은 Kp = 60

Ki = 0.037

Kd = 0.010 실제로 위의 값으로 설정 후 돌려보았습니다.

정상상태오차는 거의 없어 보입니다.

하지만, overshoot이 매우크고 정착시간(Settling time)또한 매우 큽니다.

앞서 설명했듯이 overshoot과 정착시간(Settling time)을 줄이기 위해

Kd의 값을 더 높여서 출력값이 크게 변하는 경우를 개선해야합니다.

2.2 PID 위치 제어 미세 튜닝

최종적으로 PID 위치 제어 미세 튜닝한 결과를 영상으로 업로드하였습니다.

So you have finished reading the pid 모터 위치 제어 topic article, if you find this article useful, please share it. Thank you very much. See more: PID 모터 제어, PID 제어 예시, pid제어 실생활, BLDC 모터 PID 제어, PID 제어 알고리즘, PID 제어 C 코드, 엔코더 모터 PID 제어, pid 온도제어 알고리즘

Leave a Comment