mRo Control Zero F7 with DShot and telemetry

Hi,

I am building a glider, but have trouble setting up DShot and telemetry between a Control Zero and a Lumenier Razor Pro F3 BLHeli_32 45A 2-6s ESC.

The ESC is connected to PWM7 with the following parameter:
SERVO_BLH_AUTO 1 (no difference if 0 or 1, works only with SERVO_BLH_MASK set)
SERVO_BLH_OTYPE 4 (DS150)
SERVO_BLH_DEBUG 1
SERVO_BLH_MASK 64 (Channel 7)
BRD_PWM_COUNT 7 (set for testing, only 6 servos and one ESC needed)
SERVO7_FUNCTION 70 (Throttle)

With these settings I get “RCOut: PWM:1-6 DS150:7” and the motor can be started.

But SERVO_BLH_TEST 1 gives me “ESC: Test FAILED”:
24.04.2020 07:03:44 : ESC: Test FAILED
24.04.2020 07:03:44 : ESC: short read
24.04.2020 07:03:44 : ESC: BL_ReadBuf 8 -> 0
24.04.2020 07:03:44 : ESC: BL_ConnectEx 0/1 at 6
24.04.2020 07:03:44 : ESC: short read
24.04.2020 07:03:44 : ESC: BL_ReadBuf 8 -> 0
24.04.2020 07:03:44 : ESC: BL_ConnectEx 0/1 at 6
24.04.2020 07:03:44 : ESC: short read
24.04.2020 07:03:44 : ESC: BL_ReadBuf 8 -> 0
24.04.2020 07:03:44 : ESC: BL_ConnectEx 0/1 at 6
24.04.2020 07:03:44 : ESC: short read
24.04.2020 07:03:44 : ESC: BL_ReadBuf 8 -> 0
24.04.2020 07:03:44 : ESC: BL_ConnectEx 0/1 at 6
24.04.2020 07:03:44 : ESC: short read
24.04.2020 07:03:44 : ESC: BL_ReadBuf 8 -> 0
24.04.2020 07:03:43 : Initialising ArduPilot
24.04.2020 07:03:43 : ESC: BL_ConnectEx 0/1 at 6
24.04.2020 07:03:43 : ESC: Running test on channel 0
24.04.2020 07:02:48 : RCOut: PWM:1-6 DS150:7
24.04.2020 07:02:48 : mRoControlZer 00300043 3237510F 3236343
24.04.2020 07:02:48 : ChibiOS: cbb955d4
24.04.2020 07:02:48 : ArduPlane V4.1.0dev (6d05ed1e)

Please find the Logfile here: https://drive.google.com/open?id=1OrpIYt_qLJ5Ehi5wv_Y-gVDyjIqTzzLI

DS150 signal (yellow):

Would it be safe to fly if “ESC: Test FAILED”?

BLHeli_32 passthrough does not work either (BLHeliSuite32 32.7.1.1).
It seems to connect to ESC (motor beeps when connecting), but I get “Found no valid ESC configuration.” error.
Same message as here https://github.com/ArduPilot/ardupilot/issues/12494
I think first “ESC: Test FAILED” has to be fixed to make the passthrough work.
Passthrough would be nice, but it is not so important for me.

I’m not sure if my telemetry issue is related to Ardupilot, because ESC sends temperature, voltage and rpm and Mission Planner and Yaapu telemetry shows it, but no current information:


Both current and current consumption values are always zero, even if the motor is running.
Where would be the best place to ask?

At the “Dev Call March 23, 2020” at UTC0021 “CubeOrange and mRo boards and passthrough” were discussed (Dev Call March 23, 2020).
Is Control Zero affected? Who is “PK” and how did he remove the hardware buffers from GPIO? Hardware mod or software setting?

The servos MKS HV6110 and MKS HV75K directly connected to the Control Zero do not work. I also tried a Futaba S3156. But a Torcster NR-62 Digi 8g works.
It looks like the level shifted outputs are not able to pull the signal down to ground to discharge the parasitic capacitance of the servo’s signal input.
If I add a MOSFET driver (https://www.microchip.com/wwwproducts/en/MCP1402) with a push-pull output, the MKS servo works as it should.

If you would like me to perform further tests or measurements or provide information that I have missed, just let me know. Any help would be appreciated.

Best regards,
Christian

Hi Christian,

Sorry for the trouble. I’m PK :slight_smile:

BLHeli passthru is not working with the Control Zero. When you run the test it will return “ESC: Test FAILED” as you experienced. This does not affect the ESC output and is safe to fly with.

Some ESCs do not work, the reason we found is a level incompatibility. We are using the level shifted output to 5v and the ESCs are expecting 3.3v levels.

With your BLHeli telemetry issue, what UART are you connecting to the telemetry wire?

Sincerely,

Phil

1 Like

OK here are some of my own findings as I run all BLheli_32 ESCs (Holybro Tekko32 Metal)

How is the telemetry wire wired. On most BLheli_32 ESCs there are three wires, besides power that go to the ESC.

pwm
Telem
gnd

The ground and pwm run to the flight controller
and tele gets routed to the rx port on an available UART

For example UART 4
Then in Mission Planner you assign Serial4 type as 16 (esc telem)

When you connect mission planner you will not get any esc telem data until you arm your craft. At that point you should have Voltage. Arm the motors and you should start to see rpm/current/temp data.

I use CUAV flight controllers and have never been able to get pass through working, so I use an arduino board to program the ESCs.

I have never done the tests you describe above either.

I just arm and fly

Just FYI the PWM wire is not bidirectional with telem data… the telem MUST be wired to an available serial port.

Hope that helps

2 Likes

Hey Dave- On the CUAV FC’s that can’t connect via pass through what is the SERVO_BLH_PORT set to?

I will check in the am. I think serial 0

Many thanks @pkocmoud for clarifying my “ESC”: Test failed" message.
I was not aware of that SERVO_BLH_TEST is only for debugging BLHeli_32 passthrough.
So I can stop worrying and put the electronics into the plane :slight_smile:



Actually I connected “TLM” of the ESC to FRONT pin 6 “FMU_USART3_RX” which is SERIAL2 in Mission Planner (USART CH3 → TEL2 → SERIAL2) and set
SERIAL2_OPTIONS 0
SERIAL2_PROTOCOL 16
I also tried FMU_USART7_RX (can’t remember which SERIAL in Mission Planner it was) with the same result (no current data). I used the hwdef.dat to find out which USART port is which SERIAL in Mission Planner.

I get voltage and temperature even when disarmed:
esc_telm

The screenshot of the oscilloscope was taken while the motor was running and I braked the motor shaft with my fingertips to increase the current:
TelemetryDecode
The struct telem_data in AP_BLHeli.h seems to represent quite a lot of the decoded data:
struct telem_data {
uint8_t temperature; // degrees C
uint16_t voltage; // volts * 100
uint16_t current; // amps * 100
uint16_t consumption;// mAh
uint16_t rpm; // eRPM
uint16_t count;
uint32_t timestamp_ms;
};

Only count (maybe CRC error counting in DShot) and timestamp do not fit. The last byte looks more like a CRC value because it changes when one of the values changes.

So I think my telemetry issue has nothing to do with Ardupilot. I’ll try to measure the voltage drop over the stunt. If I’m lucky, it’s just a software error in BLHeli_32 and will be fixed sometime. If I am unlucky, it is a hardware problem with my ESC.
Since I am building a glider where the engine is (hopefully) switched off most of the time in the air, the voltage of the battery is the value I have to watch out for.

Many thanks to @pkocmoud and @smartdave for your help.

Best regards,
Christian

@smartdave - I am having a problem getting ESC Telem with a F7 based x2.1-777, when I use the original F4 based x2.1, I do see ESC telemetry while disarmed. I think all that is required is the ESCs must be powered:
image

I am continuing to investigate why the F7 board does not show ESC data ever.

@sonicdahousecat - This might also be affecting the F7 based Control Zero, but I will report back.

Oops. I had a bad parm on my F7, ESC Telemetry is confirmed working now on the x2.1-777. I’ll connect up a control zero later today to give you a working config.

Good to hear youhave it working. With my Holybro Tekko ESCs they need to be armed before I get Telem data

SERVO_BLH_PORT 0

That’s what all mine are configured for

Yea, OK. I know you understand this but some are setting this thinking it has something to do with the ESC telemetry port.

Ah yeah which it does not.

I’m testing with a Tekko32 4in1. Hard to find on their site but it is this one: http://www.holybro.com/product/tekko32-4in1-esc-35a/

@pkocmoud Did you test dshot with telemetry on a Control Zero? I’m very interested.