K모듈은 MCU의 PWM 신호를 평활하지 않고 출력하는 MPAINO 옵션 모듈입니다. K는 6채널, K2는 12채널을 제공하며 선택한 모듈은 제품에 조립되어 출고됩니다.
Y모듈의 직류 전압ㆍ전류 출력과 용도가 다릅니다. 펄스 출력에 연결할 기기가 0~5V 디지털 파형을 받을 수 있는지 먼저 확인하십시오.
K2 이미지의 PWM0~PWM5는 두 번째 K모듈의 단자 표기입니다. 프로그램에서는 추가 출력 채널 6~11을 사용합니다.
| 항목 | 내용 |
|---|---|
| 옵션 코드 | K, K2 |
| 모듈당 출력 | PWM 6채널 |
| 출력 수준 | LOW 0V, HIGH 5V |
| 최대 출력 전류 | 채널당 30mA |
| 최대 주파수 | 1MHz |
| 분해능 | 16bit |
| 최대 구성 | K모듈 2개, 총 12채널. Y와 K 출력 합계 최대 12채널 |
K 출력은 MCU GPIO 신호를 직접 사용합니다. 30mA를 넘는 부하나 다른 전압의 입력을 직접 연결하지 마십시오. 모터ㆍ솔레노이드와 같은 부하는 적합한 외부 드라이버를 사용합니다.
| 구성 | K 채널 수 | PWM()ㆍFDPWM() 채널 | analogWrite() 채널 | GPIO 번호 |
|---|---|---|---|---|
| K | 6 | 0~5 | 20~25 | D130~D135 |
| K2 | 12 | 0~11 | 20~31 | D130~D141 |
| YK / Y2K | 6 | 0~5 | 20~25 | D130~D135 |
위 세 번호 체계는 같은 K 출력을 서로 다른 명령어로 사용할 때의 인자입니다. analogWrite(20, 128)은 K의 첫 번째 출력이고 analogWrite(0, 128)은 Y의 첫 번째 아날로그 출력입니다. PWM(0, …)은 다시 K의 첫 번째 출력입니다. 셋을 혼동하지 마십시오.
K 1개와 Y 1~2개는 함께 사용할 수 있지만 K2와 Y는 함께 구성하지 않습니다. 실제 출고 옵션에 맞춰 Arduino IDE의 High-Speed Pulse Output Module과 Analog Output Module을 선택합니다.
| 출고 구성 | K 채널 | 내부 Arduino PWM 핀 | 같은 주파수를 공유하는 Timer |
|---|---|---|---|
| K 단독 | 0~2 | D11, D12, D13 | Timer1 |
| K 단독 | 3~5 | D46, D45, D44 | Timer5 |
| K2 추가 | 6~8 | D5, D2, D3 | Timer3 |
| K2 추가 | 9~11 | D6, D7, D8 | Timer4 |
| YK / Y2K | 0~2 | D5, D2, D3 | Timer3 |
| YK / Y2K | 3~5 | D6, D7, D8 | Timer4 |
같은 Timer의 세 채널은 주파수 설정을 공유합니다. 세 채널에 서로 다른 듀티를 줄 수 있지만 서로 다른 주파수를 동시에 설정할 수 없습니다. YㆍK 조합이 달라지면 내부 실제 PWM 핀이 바뀌므로 프로그램의 논리 채널과 출고 구성을 일치시키십시오.
K 단독 구성의 첫 출력에 약 50% 듀티를 출력합니다. K용 analogWrite()는 Y와 달리 0~255 값을 사용합니다.
const uint8_t pulseChannel = 20; // K 첫 번째 출력의 analogWrite 번호 void setup() { } void loop() { analogWrite(pulseChannel, 128); // 약 50% 듀티의 PWM 출력 delay(500); }
K 단독 구성에서 CH0과 CH1은 Timer1을 공유합니다. 두 채널에 같은 1kHz와 서로 다른 듀티를 설정합니다.
void setup() { PWM_RESET(); // K 출력용 PWM Timer 상태 초기화 FDPWM(0, 1000, 25.0F); // K CH0: 1kHz, 25% 듀티 FDPWM(1, 1000, 75.0F); // K CH1: 같은 1kHz, 75% 듀티 } void loop() { }
PWM_RESET()은 같은 Timer를 사용하는 다른 PWM 출력도 초기화할 수 있습니다. 부하가 안전한 상태에서 실행하십시오.
K CH0에 1kHz, 50% 듀티의 펄스 100개를 한 번 출력합니다. NPWM()은 완료될 때까지 loop()에서 계속 호출해야 하므로 이 예제의 반복문에는 delay()를 넣지 않습니다.
void setup() { PWM_RESET(); // 펄스 출력 전 PWM 상태 초기화 NPWM_BEGIN(0, 1000, 50.0F, 100); // CH0에 100개 펄스 준비 } void loop() { NPWM(0); // 준비한 펄스의 출력 진행 및 완료 처리 }
| 증상 | 확인할 항목 |
|---|---|
| 파형이 없음 | K 장착과 보드 옵션, PWM 단자ㆍGND, 선택한 명령어의 채널 번호를 확인합니다. |
| 주파수가 예상과 다름 | 같은 Timer 그룹의 다른 채널에서 주파수를 다시 설정했는지 확인합니다. |
| YK에서 K 단독 배선대로 동작하지 않음 | YㆍK 조합에 따라 내부 PWM 핀 배치가 달라집니다. 출고 구성과 모듈 단자 표기를 확인합니다. |
| 지정 펄스가 끝나지 않음 | NPWM_BEGIN() 다음에 같은 채널의 NPWM()을 반복 호출하는지, 반복문에 지연이 없는지 확인합니다. |