목록2020/02 (2)
Brise
PID 제어기를 계산 할 때 이전 Iteration의 값을 어떤 방식으로 유지할 건지에 대한 계산 방법이 여러가지 있다. 대부분 둘 중 한가지 방법을 이용하여 계산하는데 한가지 방법의 경우 이전 Iteration의 제어값을 유지하는 방법이 있고, 다른 한가지 방법은 이전 Iteration의 적분항을 유지하는 방법이 있다. 이전 제어값을 유지하는 방법의 경우 Iteration의 계산하기 위하여 이전에 계산된 P항과 D항을 제외하고 계산해주어야 하고이전 적분항을 유지하는 방법의 경우 Iteration을 계산하고 Output값과 적분항 모두에 anti-wind up 코드를 삽입해주어야 한다. 아래 코드는 윤덕용의 직류전동이 책의 일부와https://github.com/geekfactory/PID github에..
STM32를 사용하여 펌웨어를 작성할 때에 태스크 코드에서 printf를 수행할 때 특정 경우에 오류가 발생하는 것을 볼 수 있다. 또는 malloc을 사용하여 큰 용량의 데이터를 Heap에서 확보하고자 할때 오류가 발생한다. malloc에서 보았다시피 이 문제는 FreeRTOS 때문에 생기는 문제다.(정확히는 FreeRTOS와 STM32에서 기본적으로 제공하는 newlib의 Heap이 충돌하는 문제이다. 둘 모두 ST마이크로에서 제공하는 코드인 것은 함정) 자세히 내용을 설명하자면 newlib에서는 printf를 수행하거나 malloc을 수행할 때 특정 경우에 한하여 더 큰 메모리를 요구하여 메모리 영역을 확보하는 코드인 _sbrk함수를 호출한다. 기본적인 펌웨어에서는 힙이 스택을 침해하는 것을 막기 ..