타이머(2)
-
타이머 prescale, period 찾는 프로그램
목표하는 실행 주기에 가장 가까운 prescale과 period를 찾는 코드 예제입니다. prescale도 bsearch방식으로 찾으면 좀 더 빨리 찾을 수 있습니다만,높은 실행주기를 target으로 하는 코드라 prescale이 커질일이 별로 없어 순차방식으로 사용했습니다. /****************************************************************************** Online C Compiler. Code, Compile, Run and Debug C program online.Write your code in this editor and press "Run" button to..
2024.06.06 -
엔코더 카운터 오버플로우, 언더플로우(Rollover, Rollunder) 대응 코드
일반적으로 HW에서 지원하는 엔코더 카운터는 [0 max] 값의 범위에서 작동한다. 모터를 단방향으로 제어할 때에는 새 값에서 이전 값을 빼는 방식으로(만약 현재 값이 이전값보다 작다면 max만큼을 더하고..) 차이를 구할 수 있다. 이 때 결과값은 [0 max-1]이 된다. 하지만, 양방향으로 제어할 때에는 결과값이 [-max/2 max/2]범위로 구해져야 하며, 이 때 타이머가 오버플로우되거나 언더플로우 되는 것에 대한 대응 코드가 필요하다. 해당 코드를 만들기 위한 참고 코드는 아래와 같다. int32_t NumOp_GetDiff(uint32_t curr, uint32_t prev, uint32_t max){ int32_t diff = 0; const uint32_t half_max = max/2;..
2021.02.11