====== MPAINO K high-speed pulse output module ======
The K option module outputs the MCU's PWM waveform without filtering it into a DC signal. K provides six channels and K2 provides twelve. The selected module is assembled into the MPAINO product before shipment. Unlike the Y analog output module, this output is a 0–5V digital waveform; check that the receiving device accepts it.
{{ :en-us_products:mpaino-k-channels.svg?1000 |K, K2, and mixed Y/K channel numbers and shared Timer groups }}
===== Specifications =====
{{:en-us_products:mpaino-option-k-front.png?190|K pulse output module front}} {{:en-us_products:mpaino-option-k2-front.png?190|K2 second pulse output module front}}
PWM0–PWM5 on the K2 image are terminal labels on the second K module. Its additional program channels are 6–11.
^ Item ^ Description ^
| Option codes | K, K2 |
| Outputs per module | Six PWM channels |
| Output levels | LOW 0V; HIGH 5V |
| Maximum output current | 30mA per channel |
| Maximum frequency | 1MHz |
| Resolution | 16 bit |
| Maximum configuration | Two K modules, twelve channels; Y and K outputs together no more than twelve channels |
K outputs use the MCU GPIO signal directly. Do not connect a load exceeding 30mA or an input requiring another voltage directly. Use a suitable external driver for a motor, solenoid, or similar load.
===== Options and channel numbering =====
^ Configuration ^ K channels ^ ''PWM()'' / ''FDPWM()'' channel ^ ''analogWrite()'' channel ^ GPIO number ^
| 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 |
These are three numbering schemes for **the same K outputs** with different functions. ''analogWrite(20, 128)'' addresses the first K output; ''analogWrite(0, 128)'' addresses the first Y analog output. ''PWM(0, ...)'' again addresses the first K output. One K and one or two Y modules can be ordered together, but K2 cannot be combined with Y. Match Arduino IDE's **High-Speed Pulse Output Module** and **Analog Output Module** options to the shipped configuration.
===== Shared Timers =====
^ Configuration ^ K channels ^ Internal Arduino PWM pins ^ Shared Timer ^
| K alone | 0–2 | D11, D12, D13 | Timer1 |
| K alone | 3–5 | D46, D45, D44 | Timer5 |
| Additional K2 | 6–8 | D5, D2, D3 | Timer3 |
| Additional K2 | 9–11 | D6, D7, D8 | Timer4 |
| YK / Y2K | 0–2 | D5, D2, D3 | Timer3 |
| YK / Y2K | 3–5 | D6, D7, D8 | Timer4 |
Three channels on one Timer can have different duty cycles, but share its frequency. The internal PWM pins change with the Y/K combination; match the program's logical channels to the product's shipped configuration.
===== Wiring and first measurement =====
- Disconnect power and identify the PWM terminal and the GND in its terminal group.
- Connect the receiving device's 0–5V PWM input and common GND according to the product's wiring diagram.
- Do not feed external power into a PWM output or attach an overcurrent load directly.
- Check the waveform frequency and duty with suitable test equipment before connecting the process load.
===== Example 1: Arduino analogWrite() =====
The first output of a K-only configuration receives approximately 50% duty. K's ''analogWrite()'' uses values 0–255, unlike Y's output range.
const uint8_t pulseChannel = 20; // analogWrite number of the first K output
void setup() {
}
void loop() {
analogWrite(pulseChannel, 128); // Output PWM at about 50% duty
delay(500);
}
===== Example 2: frequency and duty =====
K-only CH0 and CH1 share Timer1. Both run at 1kHz, with different duties.
void setup() {
PWM_RESET(); // Reset K-output PWM Timer state
FDPWM(0, 1000, 25.0F); // K CH0: 1kHz, 25% duty
FDPWM(1, 1000, 75.0F); // K CH1: 1kHz, 75% duty
}
void loop() {
}
''PWM_RESET()'' can reset other PWM outputs using the same Timers. Run it only when the connected load is in a safe state.
===== Example 3: a fixed pulse count =====
This sends 100 pulses at 1kHz and 50% duty on K CH0. ''NPWM()'' must be called repeatedly until output completes, so there is no ''delay()'' in ''loop()''.
void setup() {
PWM_RESET(); // Reset PWM state before starting the pulse train
NPWM_BEGIN(0, 1000, 50.0F, 100); // Prepare 100 pulses on CH0
}
void loop() {
NPWM(0); // Advance and finish the prepared pulse train
}
===== Troubleshooting =====
^ Symptom ^ Check ^
| No waveform | Check the K module and board option, PWM/GND terminals, and the channel number expected by the chosen function. |
| Unexpected frequency | Check whether another channel in the same Timer group changed the frequency. |
| Mixed Y/K product differs from K-only wiring | The internal PWM pin mapping changes with the Y/K combination. Check the shipped configuration and module terminal labels. |
| Fixed pulse train never finishes | Call ''NPWM()'' repeatedly on the same channel after ''NPWM_BEGIN()''; avoid delays in the loop. |
===== Related pages =====
* [[en-us_commands:reference:pwm|PWM()]] · [[en-us_commands:reference:fdpwm|FDPWM()]] · [[en-us_commands:reference:npwm_begin|NPWM_BEGIN()]] · [[en-us_commands:reference:npwm|NPWM()]]
* [[en-us_products:mpaino_x|X analog input]] · [[en-us_products:mpaino_f|F PT100 input]] · [[en-us_products:mpaino_y|Y analog output]]
* [[en-us_products:mpaino|← MPAINO Series options]]