-
산업용 모터 제어 - STM32Motor 2024. 10. 6. 16:53
NUCLEO-F334R8 보드를 활용하여 산업용 모터를 제어하는 방식을 담은 글 입니다.
해당 글은 제가 작성한 "산업용 모터 제어 - 전장 구성 (제어부)" 와 연결되는 글입니다.
https://hyeobiary.tistory.com/12
산업용 모터 제어 - 전장 구성 (제어부)
산업용 모터를 구동하는 시스템을 제작하였고, 그 과정을 정리한 글입니다. 시스템 제작을 위해 참고할 만한 자료가 있는지 찾아보았지만, Manual 외 다른 자료들을 찾기 쉽지 않았던 것 같습니
hyeobiary.tistory.com
사용된 부품들은 다음과 같습니다.
NUCLEO-F334R8(모터 제어), W5VS(전압변환기)
1. STM32CubeIDE를 설치합니다.
https://www.st.com/en/development-tools/stm32cubeide.html
STM32CubeIDE - STMicroelectronics
STM32CubeIDE - Integrated Development Environment for STM32, STM32CubeIDE-RPM, STM32CubeIDE-Lnx, STM32CubeIDE-Win, STM32CubeIDE-DEB, STM32CubeIDE-Mac, STMicroelectronics
www.st.com
저는 설치할 당시 최신 버전이었던 1.13.2을 사용중입니다.
현재는 1.16버전까지 나온것으로 확인 됩니다.
2. File → New → STM32 Project를 통해 새 프로젝트를 만들어 줍니다.
[그림 1] New Project 생성 과정 3. Board를 알고 있기 때문에 Board Selector → "F334R8" 검색 → 보드 클릭 → Next
[그림 2] Board Select 과정 사용하시는 제어기가 저와 다를 경우에는 해당 제어기 검색하셔서 선택하시면 됩니다.
4. Project Name 설정 → 나머지는 다 기본값으로 설정
5. Timers → TIM6 → Activated 체크 → Enable
[그림 3] 타이머 설정 6. Timers → TIM6 → Parameter Settings → Prescaler 64-1, Counter Period 1000-1 입력
[그림 4] 제어주기 설정 아래 수식은 제어주기를 계산하는 식입니다.
제어주기 계산식 일반적으로 제어주기는 10kHz에서 40kHz의 값을 제어주기로 설정합니다.
저는 10kHz로 설정해주기 위해서 다음과 같이 Prescaler과 Counter Period를 설정해주었습니다.
여기서 Counter Period가 매우 중요한데, 제어주기를 설정할 뿐만 아니라 모터의 최대속도를 결정하는 변수라고 합니다.
여기서 100으로 설정해주었는데, 모터의 최대속도 또한 100으로 설정됩니다.
7. PA4, PA5핀을 각각 DAC1_OUT1, OUT2로 설정
NUCELO-F334R8보드에서 지원하는 아날로그 출력핀들 중 저는 PA4, PA5핀을 사용하였습니다.
[그림 5] Digital Analog Convert 설정 이렇게만 설정해주면 2개의 아날로그 출력을 위한 설정이 완료되었습니다.
8. Ctrl+s를 통해 저장해주고, Alt+K를 통해 Main문을 열어줍니다. BEGIN 0~ END 0 문 안에 아래 내용을 추가합니다.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim -> Instance == TIM6) { HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1500); HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 4000); } }
[그림 6] 출력 전압 설정 앞서 설정한 제어주기 (TIM6)가 발동될때 실행될 구문을 작성해줍니다.
DAC_ALIGN_12B_R의 뜻은 모터를 제어하는 구간을 12비트로 나눈다는 뜻 입니다.
따라서 최소값은 0, 최대값은 4095 (2^12 - 1)가 됩니다.
0부터 시작하기 때문에 4096이 아닌 4095가 최대값이 되게 됩니다.
4095가 입력했을때는 3.3V, 0을 입력하였을 때는 0V가 핀을 통해 출력될것입니다.
저는 임의로 1500, 4000을 설정해주었는데,
실제로 출력될 전압을 계산해보면 각각 1.2V (3.3 * 1500/4095), 3.2V (3.3 * 4000/4095)가 출력될 것 입니다.
8. Main문 안에 있는 BEGIN 2 ~ END 2 문 안에 아래 내용을 추가합니다.
HAL_TIM_Base_Start_IT(&htim6); HAL_DAC_Start(&hdac1, DAC_CHANNEL_1); HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
[그림 7] 타이머, DAC 설정 구문 작성 이렇게 설정해주면 프로그램 설정은 끝입니다.
9. 아래 핀을 확인해서 핀 출력을 확인해보실수 있을겁니다.
[그림 8] NUCLEO-F334R8보드 Pinout 32번, 11번 핀이 PA4, PA5핀에 해당합니다.
10. 모터 제어
PA 4,5핀에서 출력되는 전압이 1.2 V, 3.2 V 정도 인데, 전압변환기를 통과하면 몇 볼트로 변환되는지 계산해보겠습니다.
변압은 선형적으로 이루어지기 때문에 1.2 V는 약 -2.7 V, 3.2 V는 약 9.4 V로 변환됩니다.
모터가 회전하는 것을 보면
[그림 9] 모터 제어 (좌측모터 → 2번, 우측모터 → 1번) 좌측에 있는 2번모터는 9.4 V가 입력되어 시계방향으로 빠르게,
우측에 있는 1번모터는 -2.7 V가 입력되어 반시계방향으로 천천히 도는것을 보실 수 있습니다.
'Motor' 카테고리의 다른 글
산업용 모터 제어 - 전장 구성 (제어부) (2) 2024.10.05 산업용 모터 제어 - 전장 구성 (전원부) (0) 2024.09.30