Tool/software:
Hi everyone,
we're facing issues with MCT8316AV (I²C variant) BLDC drivers. First a summary of our use case:
- Single small PCBs containing only the driver plus some supporting components
- Programming of EEPROM registers during production/testing
- In normal operation, analog control mode is used and I²C is not connected (but pulled up of course)
- The driver runs a high-speed radial fan at up to 35krpm or about 2.3kHz electrical
- The fan type is TF037E-2000-F
- Spin direction is fixed via I²C configuration to reverse
- Brake is disabled via I²C configuration
- 10uH inductors are on the PCB, as the motor's own low inductance otherwise causes OCP trips
- Motor operation is 24/7, but the rotation speed is usually 8-20krpm with daily peaks of about 1min. to 35krpm
From the assemblies in use so far (only a few dozen), all could be programmed and tested without issues. About 90% of them also run fine during normal use. They do so for a few months now. However, about 10% of the units show erratic behavior:
- After a power up, they might just not start the fan anymore, without any visible jerk of the blades or an audible sound
- A single or multiple power cycle(s) may bring the unit back to life, after which it again runs well, only for the issue to come back later
- In at least two occasions, the driver got stuck while the fan was actually running; the fan just stopped, all outputs disabled
- The voltages on the driver are ok (VM 24V, DVDD 1.55V, BUCK 4.97V, CP 29.2V, AVDD 3.3V)
- No fault is reported, not via I²C and not on the pin, nFAULT is high
For one of the devices which failed during runtime, I hooked up the programming equipment to read out the I²C registers. The value of register 0xEA is 0x20011275 and if I got the bits correctly, this indicates that the state machine is in state MOTOR_RUN. But the motor is definitely not running and there is also no FG output (constant high-level). I tried setting the register 0xE8 to 0x10008000 to override the speed command with 12.5% and this value can be read back correctly, but the motor is still not spinning.
To me, it looks like the internal controller of the driver or at least a task of it completely crashed, leading to the motor no longer being driven, while the I²C interface is still working.
Questions:
- Is there anything wrong with the configuration which could lead to this behavior?
- What can we do to avoid such failures?
- Do we need to expect the working devices to also fail in such a way on the longer run?
Here are the values of all registers (I evaluated the proper values using the EVM and exported the register file):
isd_config (0x0080): 0x4404c140 motor_startup1 (0x0082): 0x75489197 motor_startup2 (0x0084): 0x1a2d7980 closed_loop1 (0x0086): 0x0b3b2400 closed_loop2 (0x0088): 0x020024f8 closed_loop3 (0x008a): 0x4cc40110 closed_loop4 (0x008c): 0x000ce944 const_speed (0x008e): 0x00a00500 const_pwr (0x0090): 0x66664c80 150_deg_two_ph_profile (0x0096): 0x36db6da6 150_deg_three_ph_profile (0x0098): 0x36db6d80 trap_config1 (0x009a): 0x054ba106 trap_config2 (0x009c): 0x3a880000 fault_config1 (0x0092): 0x7fff9071 fault_config2 (0x0094): 0x0f47a009 pin_config1 (0x00a4): 0x00000050 pin_config2 (0x00a6): 0x00101462 device_config (0x00a8): 0x7fff0000 gd_config1 (0x00ac): 0x1c40030c gd_config2 (0x00ae): 0x16a00000 gate_driver_fault_status (0x00e0): 0x00000000 controller_fault_status (0x00e2): 0x00000000 sys_status1 (0x00e4): 0x00ef0ad0 sys_status2 (0x00ea): 0x20011275 sys_status3 (0x00ec): 0x0007002d algo_ctrl1 (0x00e6): 0x00000000 device_ctrl (0x00e8): 0x10008000 input_duty (0x040c): 0x00cc0000 current_duty (0x04f6): 0x00000000 set_duty (0x0506): 0x00020000 motor_speed_pu (0x05b2): 0x00000000 dc_bus_power_pu (0x06f4): 0x000000e5
PCB schematic:
PCB layout (GND plane on bottom unfilled) for visibility:
The register JSON file from the EVM software should be attached (if that worked...).
Thanks and best regards,
Philipp