PMC is an open project that aims to build the quality permanent magnet synchronous machine (PMSM) controller for use in a variety of scopes like RC or electric transport.
PMC is ready to use in most intended applications. You can flash any supported third-party hardware to work with PMC or use our original hardware.
Read further in doc/GettingStarted.
There are a few videos about PMC on youtube.
-
Sensorless vector control of PMSM by measurement of currents and voltages.
-
Robust ORTEGA observer with gain scheduling against speed.
-
Accurate KALMAN observer having convergence at HF injection.
-
Flux weakening and MTPA control (EXPERIMENTAL).
-
Three and two phases machine connection.
-
Hardware abstraction layer (HAL) over STM32F4 and STM32F7.
-
Various controller hardware are supported (including VESC clones).
-
Command Line Interface (CLI) with autocompletion and history.
-
Non time-critical tasks are managed by FreeRTOS.
-
USB protocol stack from CherryUSB.
-
Least Squares estimate library LSE.
-
Phase current sampling scheme includes two or three sensors configuration with inline or low-side placement.
-
Self-adjustment of all onboard measurements (current and voltage) along symmetrical channels.
-
Advanced SVPWM scheme provides:
- Reduced switching losses and fully utilised DC link voltage.
- Reduced voltage distortion for precise control.
- Voltage hopping to get accurate ADC measurements with inline current sensors.
- Prevent bootstrap circuit undervoltage condition.
-
Terminal voltage measurements (TVM):
- Compensation of the voltage distortion caused by dead-time insertion.
- Back EMF voltage tracking to catch an already running machine.
- Self-test of the power stages integrity and machine wiring.
- Self-test of bootstrap retention time.
-
Automated machine parameters identification (with no external tools):
- Stator DC resistance (Rs).
- Stator AC impedance in DQ frame (L1, L2, R).
- Rotor flux linkage constant (lambda).
- Mechanical moment of inertia (Ja).
-
Automated configuration of external measurements:
- Discrete Hall sensors installation angles recognition.
- EABI resolution and direction adjustment.
-
Operation at low or zero speed:
- Forced control that applies a current vector without feedback to force rotor hold or spinup.
- Freewheeling.
- High Frequency Injection (HFI) based on magnetic saliency.
- Discrete Hall sensors.
- AB quadrature incremental encoder (EABI).
- Absolute encoder on SPI interface (AS5047).
- Analog Hall sensors and resolver decoder (TODO).
-
Nested control loops:
- Detached voltage monitoring.
- Current control PI regulator with feedforward compensation.
- Speed control PID regulator with load torque compensation.
- Location control with constant acceleration regulator.
-
Adjustable constraints:
- Phase current (forward and reverse, on HFI current, weakening D current).
- Hardware overtemperature protection (decrease phase current or halt).
- Machine voltage applied from VSI.
- DC link current consumption and regeneration.
- DC link overvoltage and undervoltage.
- Maximal speed and acceleration (forward and reverse).
- Absolute location limits in servo operation.
-
Input control interfaces:
- Analog input knob with brake signal.
- RC servo pulse width modulation.
- CAN bus flexible configurable data transfers.
- STEP/DIR (or CW/CCW) interface (EXPERIMENTAL).
- Manual control through CLI or PGUI.
- Custom embedded application can implement any control strategy.
-
Advanced CAN networking:
- Up to 30 nodes in peer network.
- Network survey on request (no heartbeat messages).
- Automated node address assignment.
- IO forwarding to log in to the remote node CLI.
- Flexible configurable data transfers.
-
Available information:
- Machine state (electrical position, speed, load torque, etc.)
- DC link voltage and current consumption.
- Information from temperature sensors.
- Total distance traveled.
- Battery energy (Wh) and charge (Ah) consumed.
- Fuel gauge percentage.
-
Dimension: 82mm x 55mm x 35mm.
-
Weight: 40g (PCB) or about 400g (with wires and heatsink).
-
Wires: 10 AWG.
-
Connector: XT90-S and bullet 5.5mm.
-
Battery voltage from 5v to 52v.
-
Phase current up to 120A (with IPT007N06N, 60v, 0.75 mOhm).
-
Light capacitor bank (4 x 4.7uF + 2 x 330uF).
-
PWM frequency from 20 to 60 kHz.
-
STM32F405RG microcontroller (Cortex-M4F at 168 MHz).
-
Onboard sensors:
- Two current shunts 0.5 mOhm with amplifiers AD8418 give a measuring range of 165A.
- Battery voltage from 0 to 60v.
- Three terminal voltages from 0 to 60v.
- Temperature of PCB with NTC resistor.
-
Machine interfaces:
- Discrete Hall sensors or EABI encoder (5v pull-up).
- External NTC resistor (e.g. machine temperature sensing).
-
Control interfaces:
- CAN transceiver with optional termination resistor on PCB (5v).
- USART to bootload and configure (3.3v).
- RC servo PWM or STEP/DIR (5v pull-up).
- Two analog input channels (from 0 to 6v).
-
Auxiliary interfaces:
- SPI port with alternative functions: ADC, DAC, GPIO (3.3v).
- BOOT pin combined with SWDIO to use embedded bootloader.
- External FAN control (5v, ~0.5A).
-
Power conversion:
- Battery voltage to 5v buck (~1A).
- 5v to 12v boost (~100 mA).
- 5v to 3.3v linear (~400 mA).
- Make a detailed documentation.
- Improve PGUI software.
- Add pulse output signal.
- Make a drawing of the heatsink case for
REV5
. - Design the new hardware for 120v battery voltage.