I’ve a Omnibus F4 Pro (V3). Two months ago I added a Radiolink SE100 (M8N + HMC5983) to my quad. It worked perfectly but after some hours the hardware was dead, I don’t know why. I bought another, the same model, but this does not work. Betaflight does not detect the MAG.
# status
System Uptime: 19 seconds
Current Time: 0000-01-01T00:00:00.000+00:00
Voltage: 0 * 0.1V (0S battery - NOT PRESENT)
CPU Clock=168MHz, GYRO=MPU6000, ACC=MPU6000, BARO=BMP280
SD card: Manufacturer 0x3, 15558144kB, 06/2017, v8.0, 'SC16G'
Filesystem: Ready
Stack size: 2048, Stack address: 0x10010000
I2C Errors: 0, config size: 1840, max available config: 16384
CPU:9%, cycle time: 125, GYRO rate: 8000, RX rate: 49, System rate: 9
Arming disable flags: RXLOSS CLI MSP
First, I thinked it will be a hardware issue, so I tried with iNav, and iNav detected it perfectly out of the box, so the hardware is working.
I Have observed that the board in the old version (that worked in Betaflight) and the new (that don’t work) are slightly different being the same model.
Here you have the complete diff:
# diff
# version
# Betaflight / OMNIBUSF4SD (OBSD) 3.3.0 Nov 9 2017 / 18:53:40 (6f46ba7) MSP API: 1.37
# name
name migmul martian
# resources
resource MOTOR 5 NONE
resource MOTOR 6 NONE
resource SERIAL_TX 3 NONE
resource SERIAL_TX 11 A01
resource SERIAL_RX 3 NONE
resource SERIAL_RX 11 A08
resource I2C_SCL 2 B10
resource I2C_SDA 2 B11
# mixer
# servo
# servo mix
# feature
feature SOFTSERIAL
feature GPS
feature TELEMETRY
feature DYNAMIC_FILTER
# beeper
# map
# serial
serial 0 4160 115200 57600 0 115200
serial 5 2 115200 57600 0 115200
serial 30 16384 115200 57600 0 115200
# led
# color
# mode_color
# aux
aux 0 0 0 1950 2050
aux 1 1 1 1250 1350
aux 2 1 1 1450 1550
aux 3 1 1 1650 1850
aux 4 2 1 1350 1450
aux 5 3 1 1250 1350
aux 6 3 1 1650 1850
aux 7 6 1 1750 1850
aux 8 10 1 1250 1350
aux 9 11 1 1250 1350
aux 10 11 1 1650 1850
aux 11 13 1 1250 1350
aux 12 26 0 1950 2050
aux 13 28 1 1050 1150
aux 14 32 5 1950 2050
aux 15 33 4 950 1200
aux 16 34 4 1800 2050
# adjrange
adjrange 0 0 2 1950 2050 18 3
# rxrange
# vtx
# rxfail
rxfail 5 s 1500
# master
set gyro_notch1_hz = 0
set gyro_notch1_cutoff = 0
set gyro_notch2_hz = 0
set gyro_notch2_cutoff = 0
set mag_declination = -110
set max_check = 1950
set serialrx_provider = IBUS
set motor_pwm_protocol = MULTISHOT
set failsafe_delay = 3
set failsafe_off_delay = 20
set failsafe_throttle = 1200
set failsafe_procedure = AUTO-LAND
set bat_capacity = 1800
set vbat_detect_cell_voltage = 55
set ibata_scale = 333
set small_angle = 180
set disarm_kill_switch = OFF
set gps_provider = UBLOX
set gps_sbas_mode = EGNOS
set gps_auto_baud = ON
set deadband = 3
set yaw_deadband = 5
set pid_process_denom = 1
set osd_rssi_alarm = 0
set osd_cap_alarm = 1600
set osd_tim1 = 0
set osd_tim2 = 1793
set osd_vbat_pos = 2433
set osd_rssi_pos = 46
set osd_tim_1_pos = 54
set osd_tim_2_pos = 2455
set osd_flymode_pos = 2145
set osd_throttle_pos = 2424
set osd_vtx_channel_pos = 376
set osd_crosshairs = 2250
set osd_ah_sbar = 2250
set osd_ah_pos = 2250
set osd_current_pos = 2400
set osd_mah_drawn_pos = 2370
set osd_craft_name_pos = 2440
set osd_gps_speed_pos = 2264
set osd_gps_lon_pos = 2129
set osd_gps_lat_pos = 2097
set osd_gps_sats_pos = 2119
set osd_home_dir_pos = 2126
set osd_home_dist_pos = 2092
set osd_compass_bar_pos = 2154
set osd_altitude_pos = 2294
set osd_pid_roll_pos = 391
set osd_pid_pitch_pos = 455
set osd_pid_yaw_pos = 487
set osd_debug_pos = 391
set osd_power_pos = 321
set osd_pidrate_profile_pos = 344
set osd_avg_cell_voltage_pos = 76
set osd_pit_ang_pos = 257
set osd_rol_ang_pos = 289
set osd_battery_usage_pos = 302
set osd_disarmed_pos = 2411
set osd_nheading_pos = 106
set osd_nvario_pos = 1
set osd_esc_tmp_pos = 82
set osd_esc_rpm_pos = 83
set osd_stat_max_dist = ON
set osd_stat_min_batt = OFF
set osd_stat_min_rssi = OFF
set osd_stat_max_alt = ON
set osd_stat_endbatt = ON
set debug_mode = FFT
set vcd_video_system = 2
# profile
profile 0
set dterm_lowpass_type = PT1
set anti_gravity_gain = 2000
set setpoint_relax_ratio = 50
set dterm_setpoint_weight = 105
set p_pitch = 65
set d_pitch = 40
set p_roll = 50
set d_roll = 36
set p_yaw = 90
# rateprofile
rateprofile 0
set rc_expo = 40
set rc_expo_yaw = 10
set thr_mid = 40
set roll_srate = 65
set pitch_srate = 61
set yaw_srate = 60
set tpa_rate = 0
But I’ve tested with defaults
too, only adding this:
resource I2C_SCL 2 B10
resource I2C_SDA 2 B11
Things that I’ve tested:
- Ask for help in slack (thanks to @jflyper for the effort) without luck. So I generate this issue to see if we can find more people with the same problem.
- Betaflight 3.1.7, 3.2.1 and master without luck.
- iNav -> WORKING
- Disable the i2c overclock, and modify the i2c timeout in the code, without luck
- Compare the iNav code with the Betaflight code but my knowledge is very limited, so I didn’t see nothing.
Maybe someone with more knowledge can compare the iNav and Betaflight code to see where the difference can be?
Code:
# version
# EmuFlight / KAKUTEF7HDV (KTF7) 0.4.0 Aug 23 2021 / 20:29:44 (69caf5a05) MSP API: 1.51
board_name
manufacturer_id
mcu_id 003400443039511434383332
signature
# name
name Bando Killer
# resources
resource BEEPER 1 D15
resource MOTOR 1 B00
resource MOTOR 2 B01
resource MOTOR 3 E09
resource MOTOR 4 E11
resource MOTOR 5 C09
resource MOTOR 6 A03
resource MOTOR 7 NONE
resource MOTOR 8 NONE
resource SERVO 1 NONE
resource SERVO 2 NONE
resource SERVO 3 NONE
resource SERVO 4 NONE
resource SERVO 5 NONE
resource SERVO 6 NONE
resource SERVO 7 NONE
resource SERVO 8 NONE
resource PPM 1 E13
resource PWM 1 NONE
resource PWM 2 NONE
resource PWM 3 NONE
resource PWM 4 NONE
resource PWM 5 NONE
resource PWM 6 NONE
resource PWM 7 NONE
resource PWM 8 NONE
resource LED_STRIP 1 D12
resource SERIAL_TX 1 A09
resource SERIAL_TX 2 D05
resource SERIAL_TX 3 B10
resource SERIAL_TX 4 A00
resource SERIAL_TX 5 NONE
resource SERIAL_TX 6 C06
resource SERIAL_TX 7 NONE
resource SERIAL_TX 8 NONE
resource SERIAL_TX 9 NONE
resource SERIAL_TX 10 NONE
resource SERIAL_TX 11 NONE
resource SERIAL_TX 12 NONE
resource SERIAL_RX 1 A10
resource SERIAL_RX 2 D06
resource SERIAL_RX 3 B11
resource SERIAL_RX 4 A01
resource SERIAL_RX 5 NONE
resource SERIAL_RX 6 C07
resource SERIAL_RX 7 E07
resource SERIAL_RX 8 NONE
resource SERIAL_RX 9 NONE
resource SERIAL_RX 10 NONE
resource SERIAL_RX 11 NONE
resource SERIAL_RX 12 NONE
resource I2C_SCL 1 B06
resource I2C_SCL 2 NONE
resource I2C_SCL 3 NONE
resource I2C_SCL 4 NONE
resource I2C_SDA 1 B07
resource I2C_SDA 2 NONE
resource I2C_SDA 3 NONE
resource I2C_SDA 4 NONE
resource LED 1 A02
resource LED 2 NONE
resource LED 3 NONE
resource RX_BIND 1 NONE
resource RX_BIND_PLUG 1 NONE
resource SPI_SCK 1 A05
resource SPI_SCK 2 B13
resource SPI_SCK 3 NONE
resource SPI_SCK 4 E02
resource SPI_MISO 1 A06
resource SPI_MISO 2 B14
resource SPI_MISO 3 NONE
resource SPI_MISO 4 E05
resource SPI_MOSI 1 A07
resource SPI_MOSI 2 B15
resource SPI_MOSI 3 NONE
resource SPI_MOSI 4 E06
resource ESCSERIAL 1 E13
resource CAMERA_CONTROL 1 NONE
resource ADC_BATT 1 C03
resource ADC_RSSI 1 C05
resource ADC_CURR 1 C02
resource ADC_EXT 1 NONE
resource BARO_CS 1 NONE
resource COMPASS_CS 1 NONE
resource SDCARD_CS 1 A04
resource SDCARD_DETECT 1 D08
resource PINIO 1 NONE
resource PINIO 2 NONE
resource PINIO 3 NONE
resource PINIO 4 NONE
resource USB_MSC_PIN 1 NONE
resource SPI_PREINIT_IPU 1 E04
resource SPI_PREINIT_IPU 2 A04
resource SPI_PREINIT_IPU 3 NONE
resource SPI_PREINIT_IPU 4 NONE
resource SPI_PREINIT_IPU 5 NONE
resource SPI_PREINIT_IPU 6 NONE
resource SPI_PREINIT_IPU 7 NONE
resource SPI_PREINIT_IPU 8 NONE
resource SPI_PREINIT_IPU 9 NONE
resource SPI_PREINIT_IPU 10 NONE
resource SPI_PREINIT_IPU 11 NONE
resource SPI_PREINIT_OPU 1 NONE
resource SPI_PREINIT_OPU 2 NONE
# mixer
mixer QUADX
mmix reset
# servo
servo 0 1000 2000 1500 100 -1
servo 1 1000 2000 1500 100 -1
servo 2 1000 2000 1500 100 -1
servo 3 1000 2000 1500 100 -1
servo 4 1000 2000 1500 100 -1
servo 5 1000 2000 1500 100 -1
servo 6 1000 2000 1500 100 -1
servo 7 1000 2000 1500 100 -1
# servo mix
smix reset
# feature
feature -RX_PPM
feature -INFLIGHT_ACC_CAL
feature -RX_SERIAL
feature -MOTOR_STOP
feature -SERVO_TILT
feature -SOFTSERIAL
feature -GPS
feature -RANGEFINDER
feature -TELEMETRY
feature -3D
feature -RX_PARALLEL_PWM
feature -RX_MSP
feature -RSSI_ADC
feature -LED_STRIP
feature -DISPLAY
feature -OSD
feature -CHANNEL_FORWARDING
feature -TRANSPONDER
feature -AIRMODE
feature -RX_SPI
feature -SOFTSPI
feature -ESC_SENSOR
feature -DYNAMIC_FILTER
feature -LEGACY_SA_SUPPORT
feature RX_SERIAL
feature OSD
feature DYNAMIC_FILTER
# beeper
beeper GYRO_CALIBRATED
beeper RX_LOST
beeper RX_LOST_LANDING
beeper DISARMING
beeper ARMING
beeper ARMING_GPS_FIX
beeper BAT_CRIT_LOW
beeper BAT_LOW
beeper GPS_STATUS
beeper RX_SET
beeper ACC_CALIBRATION
beeper ACC_CALIBRATION_FAIL
beeper READY_BEEP
beeper MULTI_BEEPS
beeper DISARM_REPEAT
beeper ARMED
beeper SYSTEM_INIT
beeper ON_USB
beeper BLACKBOX_ERASE
beeper CRASH FLIP
beeper CAM_CONNECTION_OPEN
beeper CAM_CONNECTION_CLOSED
beeper RC_SMOOTHING_INIT_FAIL
# beacon
beacon -RX_LOST
beacon -RX_SET
# map
map AETR1234
# serial
serial 20 1 115200 57600 0 115200
serial 0 1 115200 57600 0 115200
serial 1 0 115200 57600 0 115200
serial 2 64 115200 57600 0 115200
serial 3 0 115200 57600 0 115200
serial 5 0 115200 57600 0 115200
serial 6 1024 115200 57600 0 115200
# led
led 0 0,0::C:0
led 1 0,0::C:0
led 2 0,0::C:0
led 3 0,0::C:0
led 4 0,0::C:0
led 5 0,0::C:0
led 6 0,0::C:0
led 7 0,0::C:0
led 8 0,0::C:0
led 9 0,0::C:0
led 10 0,0::C:0
led 11 0,0::C:0
led 12 0,0::C:0
led 13 0,0::C:0
led 14 0,0::C:0
led 15 0,0::C:0
led 16 0,0::C:0
led 17 0,0::C:0
led 18 0,0::C:0
led 19 0,0::C:0
led 20 0,0::C:0
led 21 0,0::C:0
led 22 0,0::C:0
led 23 0,0::C:0
led 24 0,0::C:0
led 25 0,0::C:0
led 26 0,0::C:0
led 27 0,0::C:0
led 28 0,0::C:0
led 29 0,0::C:0
led 30 0,0::C:0
led 31 0,0::C:0
# color
color 0 0,0,0
color 1 0,255,255
color 2 0,0,255
color 3 30,0,255
color 4 60,0,255
color 5 90,0,255
color 6 120,0,255
color 7 150,0,255
color 8 180,0,255
color 9 210,0,255
color 10 240,0,255
color 11 270,0,255
color 12 300,0,255
color 13 330,0,255
color 14 0,0,0
color 15 0,0,0
# mode_color
mode_color 0 0 1
mode_color 0 1 11
mode_color 0 2 2
mode_color 0 3 13
mode_color 0 4 10
mode_color 0 5 3
mode_color 1 0 5
mode_color 1 1 11
mode_color 1 2 3
mode_color 1 3 13
mode_color 1 4 10
mode_color 1 5 3
mode_color 2 0 10
mode_color 2 1 11
mode_color 2 2 4
mode_color 2 3 13
mode_color 2 4 10
mode_color 2 5 3
mode_color 3 0 8
mode_color 3 1 11
mode_color 3 2 4
mode_color 3 3 13
mode_color 3 4 10
mode_color 3 5 3
mode_color 4 0 7
mode_color 4 1 11
mode_color 4 2 3
mode_color 4 3 13
mode_color 4 4 10
mode_color 4 5 3
mode_color 5 0 9
mode_color 5 1 11
mode_color 5 2 2
mode_color 5 3 13
mode_color 5 4 10
mode_color 5 5 3
mode_color 6 0 6
mode_color 6 1 10
mode_color 6 2 1
mode_color 6 3 0
mode_color 6 4 0
mode_color 6 5 2
mode_color 6 6 3
mode_color 6 7 6
mode_color 6 8 0
mode_color 6 9 0
mode_color 6 10 0
mode_color 7 0 3
# aux
aux 0 0 0 1300 2100 0 0
aux 1 1 1 1700 2100 0 0
aux 2 2 1 1300 1700 0 0
aux 3 13 2 1800 2100 0 0
aux 4 28 0 1300 1700 0 0
aux 5 0 0 900 900 0 0
aux 6 0 0 900 900 0 0
aux 7 0 0 900 900 0 0
aux 8 0 0 900 900 0 0
aux 9 0 0 900 900 0 0
aux 10 0 0 900 900 0 0
aux 11 0 0 900 900 0 0
aux 12 0 0 900 900 0 0
aux 13 0 0 900 900 0 0
aux 14 0 0 900 900 0 0
aux 15 0 0 900 900 0 0
aux 16 0 0 900 900 0 0
aux 17 0 0 900 900 0 0
aux 18 0 0 900 900 0 0
aux 19 0 0 900 900 0 0
# adjrange
adjrange 0 0 0 900 900 0 0 0 0
adjrange 1 0 0 900 900 0 0 0 0
adjrange 2 0 0 900 900 0 0 0 0
adjrange 3 0 0 900 900 0 0 0 0
adjrange 4 0 0 900 900 0 0 0 0
adjrange 5 0 0 900 900 0 0 0 0
adjrange 6 0 0 900 900 0 0 0 0
adjrange 7 0 0 900 900 0 0 0 0
adjrange 8 0 0 900 900 0 0 0 0
adjrange 9 0 0 900 900 0 0 0 0
adjrange 10 0 0 900 900 0 0 0 0
adjrange 11 0 0 900 900 0 0 0 0
adjrange 12 0 0 900 900 0 0 0 0
adjrange 13 0 0 900 900 0 0 0 0
adjrange 14 0 0 900 900 0 0 0 0
# rxrange
rxrange 0 1000 2000
rxrange 1 1000 2000
rxrange 2 1000 2000
rxrange 3 1000 2000
# vtx
vtx 0 0 0 0 0 900 900
vtx 1 0 0 0 0 900 900
vtx 2 0 0 0 0 900 900
vtx 3 0 0 0 0 900 900
vtx 4 0 0 0 0 900 900
vtx 5 0 0 0 0 900 900
vtx 6 0 0 0 0 900 900
vtx 7 0 0 0 0 900 900
vtx 8 0 0 0 0 900 900
vtx 9 0 0 0 0 900 900
# rxfail
rxfail 0 a
rxfail 1 a
rxfail 2 a
rxfail 3 a
rxfail 4 h
rxfail 5 h
rxfail 6 h
rxfail 7 s 1000
rxfail 8 h
rxfail 9 h
rxfail 10 h
rxfail 11 h
rxfail 12 h
rxfail 13 h
rxfail 14 h
rxfail 15 h
rxfail 16 h
rxfail 17 h
# master
set align_gyro = DEFAULT
set gyro_hardware_lpf = NORMAL
set gyro_sync_denom = 1
set gyro_lowpass_type = PT1
set gyro_lowpass_hz_roll = 115
set gyro_lowpass_hz_pitch = 115
set gyro_lowpass_hz_yaw = 105
set gyro_lowpass2_type = PT1
set gyro_lowpass2_hz_roll = 0
set gyro_lowpass2_hz_pitch = 0
set gyro_lowpass2_hz_yaw = 0
set gyro_abg_alpha = 0
set gyro_abg_boost = 275
set gyro_abg_half_life = 50
set gyro_notch1_hz = 0
set gyro_notch1_cutoff = 0
set gyro_notch2_hz = 0
set gyro_notch2_cutoff = 0
set gyro_calib_duration = 125
set gyro_calib_noise_limit = 48
set gyro_offset_yaw = 0
set imuf_roll_q = 3000
set imuf_pitch_q = 3000
set imuf_yaw_q = 3000
set imuf_w = 32
set gyro_overflow_detect = ALL
set yaw_spin_recovery = ON
set yaw_spin_threshold = 1950
set dynamic_gyro_notch_q = 350
set dynamic_gyro_notch_count = 3
set dynamic_gyro_notch_min_hz = 150
set dynamic_gyro_notch_max_hz = 600
set smith_predict_enabled = ON
set smith_predict_str = 50
set smith_predict_delay = 40
set smith_predict_filt_hz = 5
set align_acc = DEFAULT
set acc_hardware = AUTO
set acc_lpf_hz = 40
set acc_trim_pitch = 0
set acc_trim_roll = 0
set acc_calibration = 19,127,-256
set align_mag = DEFAULT
set mag_bustype = I2C
set mag_i2c_device = 1
set mag_i2c_address = 0
set mag_spi_device = 0
set mag_hardware = NONE
set mag_declination = 0
set mag_calibration = 0,0,0
set baro_bustype = I2C
set baro_spi_device = 0
set baro_i2c_device = 1
set baro_i2c_address = 0
set baro_hardware = AUTO
set baro_tab_size = 21
set baro_noise_lpf = 600
set baro_cf_vel = 985
set baro_cf_alt = 965
set mid_rc = 1500
set min_check = 1050
set max_check = 1900
set rssi_channel = 8
set rssi_src_frame_errors = OFF
set rssi_scale = 100
set rssi_offset = 0
set rssi_invert = OFF
set rc_interp = MANUAL
set rc_interp_ch = RPYT
set rc_interp_int = 21
set rc_smoothing_type = FILTER
set rc_smoothing_input_hz = 50
set rc_smoothing_debug_axis = ROLL
set rc_smoothing_input_type = PT2
set fpv_mix_degrees = 0
set cinematic_yaw = OFF
set max_aux_channels = 14
set serialrx_provider = CRSF
set serialrx_inverted = OFF
set spektrum_sat_bind = 0
set spektrum_sat_bind_autoreset = ON
set sbus_baud_fast = OFF
set airmode_start_throttle_percent = 32
set rx_min_usec = 885
set rx_max_usec = 2115
set serialrx_halfduplex = OFF
set show_altered_rc = OFF
set adc_device = 1
set input_filtering_mode = OFF
set blackbox_p_ratio = 64
set blackbox_device = SDCARD
set blackbox_record_acc = ON
set blackbox_mode = NORMAL
set min_throttle = 1070
set max_throttle = 2000
set min_command = 1000
set dshot_idle_value = 450
set dshot_burst = OFF
set use_unsynced_pwm = OFF
set motor_pwm_protocol = DSHOT600
set motor_pwm_rate = 480
set motor_pwm_inversion = OFF
set motor_poles = 14
set thr_corr_value = 0
set thr_corr_angle = 800
set failsafe_delay = 4
set failsafe_off_delay = 10
set failsafe_throttle = 1000
set failsafe_switch_mode = STAGE1
set failsafe_throttle_low_delay = 100
set failsafe_procedure = DROP
set align_board_roll = 0
set align_board_pitch = 0
set align_board_yaw = 0
set gimbal_mode = NORMAL
set bat_capacity = 0
set vbat_max_cell_voltage = 43
set vbat_full_cell_voltage = 41
set vbat_min_cell_voltage = 33
set vbat_warning_cell_voltage = 35
set vbat_hysteresis = 1
set current_meter = ADC
set battery_meter = ADC
set vbat_detect_cell_voltage = 30
set use_vbat_alerts = ON
set use_cbat_alerts = OFF
set cbat_alert_percent = 10
set vbat_cutoff_percent = 100
set vbat_lpf_period = 35
set ibat_lpf_period = 10
set force_battery_cell_count = 0
set vbat_scale = 110
set vbat_divider = 10
set vbat_multiplier = 1
set ibata_scale = 400
set ibata_offset = 0
set ibatv_scale = 0
set ibatv_offset = 0
set beeper_inversion = ON
set beeper_od = OFF
set beeper_frequency = 0
set beeper_dshot_beacon_tone = 1
set yaw_motors_reversed = OFF
set crashflip_motor_percent = 0
set crashflip_power_percent = 70
set 3d_deadband_low = 1406
set 3d_deadband_high = 1514
set 3d_neutral = 1460
set 3d_deadband_throttle = 3
set 3d_limit_low = 1000
set 3d_limit_high = 2000
set 3d_switched_mode = OFF
set servo_center_pulse = 1500
set servo_pwm_rate = 50
set servo_lowpass_hz = 0
set tri_unarmed_servo = ON
set channel_forwarding_start = 4
set reboot_character = 82
set serial_update_rate_hz = 100
set accxy_deadband = 40
set accz_deadband = 40
set acc_unarmedcal = ON
set imu_dcm_kp = 8500
set imu_dcm_ki = 0
set small_angle = 180
set auto_disarm_delay = 5
set gyro_cal_on_first_arm = OFF
set use_stick_arming = OFF
set gps_provider = NMEA
set gps_sbas_mode = AUTO
set gps_auto_config = ON
set gps_auto_baud = OFF
set gps_ublox_use_galileo = OFF
set gps_rescue_angle = 32
set gps_rescue_initial_alt = 50
set gps_rescue_descent_dist = 200
set gps_rescue_ground_speed = 2000
set gps_rescue_throttle_p = 150
set gps_rescue_throttle_i = 20
set gps_rescue_throttle_d = 50
set gps_rescue_velocity_p = 80
set gps_rescue_velocity_i = 20
set gps_rescue_velocity_d = 15
set gps_rescue_yaw_p = 40
set gps_rescue_throttle_min = 1200
set gps_rescue_throttle_max = 1600
set gps_rescue_throttle_hover = 1280
set gps_rescue_sanity_checks = RESCUE_SANITY_ON
set gps_rescue_min_sats = 8
set deadband = 2
set yaw_deadband = 0
set yaw_control_reversed = OFF
set pid_process_denom = 1
set runaway_takeoff_prevention = ON
set runaway_takeoff_deactivate_delay = 500
set runaway_takeoff_deactivate_throttle_percent = 20
set tlm_inverted = OFF
set tlm_halfduplex = ON
set frsky_default_lat = 0
set frsky_default_long = 0
set frsky_gps_format = 0
set frsky_unit = IMPERIAL
set frsky_vfas_precision = 0
set hott_alarm_int = 5
set pid_in_tlm = OFF
set report_cell_voltage = OFF
set ibus_sensor = 1,2,3,0,0,0,0,0,0,0,0,0,0,0,0
set smartport_use_extra_sensors = OFF
set ledstrip_visual_beeper = OFF
set ledstrip_grb_rgb = GRB
set sdcard_dma = OFF
set osd_units = METRIC
set osd_warn_arming_disable = ON
set osd_warn_batt_not_full = ON
set osd_warn_batt_warning = ON
set osd_warn_batt_critical = ON
set osd_warn_visual_beeper = ON
set osd_warn_crash_flip = ON
set osd_warn_esc_fail = ON
set osd_task_frequency = 60
set osd_warn_core_temp = ON
set osd_warn_rc_smoothing = ON
set osd_warn_dji = OFF
set osd_lq_format = TBS
set osd_lq_alarm = 70
set osd_rssi_alarm = 20
set osd_cap_alarm = 2200
set osd_alt_alarm = 100
set osd_distance_alarm = 0
set osd_esc_temp_alarm = -128
set osd_esc_rpm_alarm = -1
set osd_esc_current_alarm = -1
set osd_core_temp_alarm = 70
set osd_stat_show_cell_value = OFF
set osd_ah_max_pit = 20
set osd_ah_max_rol = 40
set osd_logo_on_arming = OFF
set osd_logo_on_arming_duration = 5
set osd_tim1 = 2560
set osd_tim2 = 2561
set osd_vbat_pos = 2311
set osd_rssi_pos = 2248
set osd_crsf_tx_pos = 234
set osd_crsf_snr_pos = 234
set osd_crsf_rssi_pos = 234
set osd_tim_1_pos = 234
set osd_tim_2_pos = 234
set osd_remaining_time_estimate_pos = 234
set osd_flymode_pos = 234
set osd_g_force_pos = 234
set osd_throttle_pos = 234
set osd_vtx_channel_pos = 234
set osd_crosshairs_pos = 205
set osd_ah_sbar_pos = 206
set osd_ah_pos = 78
set osd_current_pos = 2375
set osd_mah_drawn_pos = 2343
set osd_craft_name_pos = 2510
set osd_gps_speed_pos = 234
set osd_gps_lon_pos = 234
set osd_gps_lat_pos = 234
set osd_gps_sats_pos = 234
set osd_plus_code_pos = 234
set plus_code_digits = 11
set plus_code_short = OFF
set osd_home_dir_pos = 234
set osd_home_dist_pos = 234
set osd_compass_bar_pos = 234
set osd_altitude_pos = 2215
set osd_pid_roll_pos = 234
set osd_pid_pitch_pos = 234
set osd_pid_yaw_pos = 234
set osd_debug_pos = 234
set osd_power_pos = 234
set osd_pidrate_profile_pos = 234
set osd_warnings_pos = 2377
set osd_avg_cell_voltage_pos = 2279
set osd_pit_ang_pos = 234
set osd_rol_ang_pos = 234
set osd_battery_usage_pos = 234
set osd_disarmed_pos = 2411
set osd_nheading_pos = 234
set osd_nvario_pos = 234
set osd_esc_tmp_pos = 234
set osd_esc_rpm_pos = 234
set osd_rtc_date_time_pos = 234
set osd_adjustment_range_pos = 234
set osd_mah_percent_pos = 234
set osd_core_temp_pos = 234
set osd_stat_rtc_date_time = OFF
set osd_stat_tim_1 = OFF
set osd_stat_tim_2 = ON
set osd_stat_max_spd = ON
set osd_stat_max_dist = OFF
set osd_stat_min_batt = ON
set osd_stat_endbatt = OFF
set osd_stat_battery = OFF
set osd_stat_min_rssi = ON
set osd_stat_max_curr = ON
set osd_stat_used_mah = ON
set osd_stat_max_alt = OFF
set osd_stat_bbox = ON
set osd_stat_bb_no = ON
set task_statistics = ON
set debug_mode = GYRO_SCALED
set rate_6pos_switch = OFF
set cpu_overclock = OFF
set pwr_on_arm_grace = 5
set vtx_band = 4
set vtx_channel = 1
set vtx_power = 1
set vtx_low_power_disarm = OFF
set vtx_freq = 5740
set vtx_pit_mode_freq = 0
set vtx_halfduplex = ON
set displayport_msp_col_adjust = 0
set displayport_msp_row_adjust = 0
set esc_sensor_halfduplex = OFF
set esc_sensor_current_offset = 0
set led_inversion = 0
set dashboard_i2c_bus = 1
set dashboard_i2c_addr = 60
set camera_control_mode = HARDWARE_PWM
set camera_control_ref_voltage = 330
set camera_control_key_delay = 180
set camera_control_internal_resistance = 470
set camera_control_inverted = OFF
set pinio_config = 1,1,1,1
set pinio_box = 255,255,255,255
set usb_msc_pin_pullup = OFF
set rcdevice_init_dev_attempts = 6
set rcdevice_init_dev_attempt_interval = 1000
# profile
profile 0
set dterm_dyn_notch_enable = OFF
set dterm_dyn_notch_q = 400
set dterm_abg_alpha = 0
set dterm_abg_boost = 275
set dterm_abg_half_life = 50
set dterm_lowpass_type = PT1
set dterm_lowpass_hz_roll = 90
set dterm_lowpass_hz_pitch = 90
set dterm_lowpass_hz_yaw = 90
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz_roll = 200
set dterm_lowpass2_hz_pitch = 200
set dterm_lowpass2_hz_yaw = 200
set pid_at_min_throttle = ON
set spa_roll_p = 110
set spa_roll_i = 85
set spa_roll_d = 110
set spa_pitch_p = 110
set spa_pitch_i = 85
set spa_pitch_d = 110
set spa_yaw_p = 130
set spa_yaw_i = 70
set spa_yaw_d = 130
set acc_limit_yaw = 0
set acc_limit = 0
set crash_dthreshold = 50
set crash_gthreshold = 400
set crash_setpoint_threshold = 350
set crash_time = 500
set crash_delay = 0
set crash_recovery_angle = 10
set crash_recovery_rate = 100
set crash_limit_yaw = 200
set crash_recovery = OFF
set iterm_rotation = ON
set iterm_relax_cutoff = 11
set iterm_relax_cutoff_yaw = 25
set iterm_relax_threshold = 35
set iterm_relax_threshold_yaw = 35
set iterm_windup = 70
set iterm_limit = 400
set pidsum_limit = 1000
set pidsum_limit_yaw = 400
set throttle_boost = 5
set throttle_boost_cutoff = 15
set feathered_pids = 100
set i_decay = 4
set i_decay_cutoff = 200
set emu_boost = 15
set emu_boost_yaw = 40
set emu_boost_limit = 20
set emu_boost_limit_yaw = 40
set dterm_boost = 0
set dterm_boost_limit = 0
set emu_gravity = 50
set axis_lock_multiplier = 0
set axis_lock_hz = 2
set p_pitch = 58
set i_pitch = 70
set d_pitch = 30
set p_roll = 50
set i_roll = 70
set d_roll = 28
set p_yaw = 60
set i_yaw = 70
set d_yaw = 5
set df_yaw = 15
set p_angle_low = 100
set d_angle_low = 10
set p_angle_high = 35
set d_angle_high = 1
set f_angle = 40
set df_angle_low = 70
set df_angle_high = 0
set level_limit = 45
set angle_expo = 10
set angle_filter = 100
set horizon_transition = 0
set horizon_tilt_effect = 90
set horizon_strength = 50
set motor_output_limit = 100
set auto_profile_cell_count = 0
set linear_thrust_low_output = 65
set linear_thrust_high_output = 0
set linear_throttle = OFF
set mixer_impl = 2PASS
set mixer_laziness = OFF
set mixer_yaw_throttle_comp = ON
# profile
profile 1
set dterm_dyn_notch_enable = OFF
set dterm_dyn_notch_q = 400
set dterm_abg_alpha = 0
set dterm_abg_boost = 275
set dterm_abg_half_life = 50
set dterm_lowpass_type = PT1
set dterm_lowpass_hz_roll = 90
set dterm_lowpass_hz_pitch = 90
set dterm_lowpass_hz_yaw = 90
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz_roll = 200
set dterm_lowpass2_hz_pitch = 200
set dterm_lowpass2_hz_yaw = 200
set pid_at_min_throttle = ON
set spa_roll_p = 110
set spa_roll_i = 85
set spa_roll_d = 110
set spa_pitch_p = 110
set spa_pitch_i = 85
set spa_pitch_d = 110
set spa_yaw_p = 130
set spa_yaw_i = 70
set spa_yaw_d = 130
set acc_limit_yaw = 0
set acc_limit = 0
set crash_dthreshold = 50
set crash_gthreshold = 400
set crash_setpoint_threshold = 350
set crash_time = 500
set crash_delay = 0
set crash_recovery_angle = 10
set crash_recovery_rate = 100
set crash_limit_yaw = 200
set crash_recovery = OFF
set iterm_rotation = ON
set iterm_relax_cutoff = 11
set iterm_relax_cutoff_yaw = 25
set iterm_relax_threshold = 35
set iterm_relax_threshold_yaw = 35
set iterm_windup = 70
set iterm_limit = 400
set pidsum_limit = 1000
set pidsum_limit_yaw = 400
set throttle_boost = 5
set throttle_boost_cutoff = 15
set feathered_pids = 100
set i_decay = 4
set i_decay_cutoff = 200
set emu_boost = 15
set emu_boost_yaw = 40
set emu_boost_limit = 20
set emu_boost_limit_yaw = 40
set dterm_boost = 0
set dterm_boost_limit = 0
set emu_gravity = 50
set axis_lock_multiplier = 0
set axis_lock_hz = 2
set p_pitch = 58
set i_pitch = 70
set d_pitch = 30
set p_roll = 50
set i_roll = 70
set d_roll = 28
set p_yaw = 60
set i_yaw = 70
set d_yaw = 5
set df_yaw = 15
set p_angle_low = 100
set d_angle_low = 10
set p_angle_high = 35
set d_angle_high = 1
set f_angle = 40
set df_angle_low = 70
set df_angle_high = 0
set level_limit = 45
set angle_expo = 10
set angle_filter = 100
set horizon_transition = 0
set horizon_tilt_effect = 90
set horizon_strength = 50
set motor_output_limit = 100
set auto_profile_cell_count = 0
set linear_thrust_low_output = 65
set linear_thrust_high_output = 0
set linear_throttle = OFF
set mixer_impl = 2PASS
set mixer_laziness = OFF
set mixer_yaw_throttle_comp = ON
# profile
profile 2
set dterm_dyn_notch_enable = OFF
set dterm_dyn_notch_q = 400
set dterm_abg_alpha = 0
set dterm_abg_boost = 275
set dterm_abg_half_life = 50
set dterm_lowpass_type = PT1
set dterm_lowpass_hz_roll = 90
set dterm_lowpass_hz_pitch = 90
set dterm_lowpass_hz_yaw = 90
set dterm_lowpass2_type = PT1
set dterm_lowpass2_hz_roll = 200
set dterm_lowpass2_hz_pitch = 200
set dterm_lowpass2_hz_yaw = 200
set pid_at_min_throttle = ON
set spa_roll_p = 110
set spa_roll_i = 85
set spa_roll_d = 110
set spa_pitch_p = 110
set spa_pitch_i = 85
set spa_pitch_d = 110
set spa_yaw_p = 130
set spa_yaw_i = 70
set spa_yaw_d = 130
set acc_limit_yaw = 0
set acc_limit = 0
set crash_dthreshold = 50
set crash_gthreshold = 400
set crash_setpoint_threshold = 350
set crash_time = 500
set crash_delay = 0
set crash_recovery_angle = 10
set crash_recovery_rate = 100
set crash_limit_yaw = 200
set crash_recovery = OFF
set iterm_rotation = ON
set iterm_relax_cutoff = 11
set iterm_relax_cutoff_yaw = 25
set iterm_relax_threshold = 35
set iterm_relax_threshold_yaw = 35
set iterm_windup = 70
set iterm_limit = 400
set pidsum_limit = 1000
set pidsum_limit_yaw = 400
set throttle_boost = 5
set throttle_boost_cutoff = 15
set feathered_pids = 100
set i_decay = 4
set i_decay_cutoff = 200
set emu_boost = 15
set emu_boost_yaw = 40
set emu_boost_limit = 20
set emu_boost_limit_yaw = 40
set dterm_boost = 0
set dterm_boost_limit = 0
set emu_gravity = 50
set axis_lock_multiplier = 0
set axis_lock_hz = 2
set p_pitch = 58
set i_pitch = 70
set d_pitch = 30
set p_roll = 50
set i_roll = 70
set d_roll = 28
set p_yaw = 60
set i_yaw = 70
set d_yaw = 5
set df_yaw = 15
set p_angle_low = 100
set d_angle_low = 10
set p_angle_high = 35
set d_angle_high = 1
set f_angle = 40
set df_angle_low = 70
set df_angle_high = 0
set level_limit = 45
set angle_expo = 10
set angle_filter = 100
set horizon_transition = 0
set horizon_tilt_effect = 90
set horizon_strength = 50
set motor_output_limit = 100
set auto_profile_cell_count = 0
set linear_thrust_low_output = 65
set linear_thrust_high_output = 0
set linear_throttle = OFF
set mixer_impl = 2PASS
set mixer_laziness = OFF
set mixer_yaw_throttle_comp = ON
# restore original profile selection
profile 0
# rateprofile
rateprofile 0
set thr_mid = 50
set thr_expo = 0
set rates_type = ACTUAL
set roll_rc_rate = 14
set pitch_rc_rate = 14
set yaw_rc_rate = 14
set roll_expo = 70
set pitch_expo = 70
set yaw_expo = 70
set roll_srate = 85
set pitch_srate = 85
set yaw_srate = 60
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# rateprofile
rateprofile 1
set thr_mid = 50
set thr_expo = 0
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# rateprofile
rateprofile 2
set thr_mid = 50
set thr_expo = 0
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# rateprofile
rateprofile 3
set thr_mid = 50
set thr_expo = 0
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# rateprofile
rateprofile 4
set thr_mid = 50
set thr_expo = 0
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# rateprofile
rateprofile 5
set thr_mid = 50
set thr_expo = 0
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
set das_yaw_with_roll_input = 0
set das_roll_with_yaw_input = 0
set roll_pitch_mag_expo = 0
set rate_center_sensitivity = 100
set rate_end_sensitivity = 100
set rate_center_correction = 10
set rate_end_correction = 10
set rate_center_weight = 0
set rate_end_weight = 0
set tpa_rate_p = 75
set tpa_rate_i = 125
set tpa_rate_d = 65
set tpa_breakpoint = 1600
set throttle_limit_type = OFF
set throttle_limit_percent = 100
set vbat_comp_type = OFF
set vbat_comp_ref = 37
# restore original rateprofile selection
rateprofile 0
# save configuration
save
This is my full dump. Any idea ?
I2C mag неоднократно обнаруживал, что он не работает должным образом при различных симптомах (включая «он работает на iNav»), но обычно бывает так, что только те, у кого есть надлежащее измерительное оборудование (например, DSO, логические анализаторы — LA), действительно помогают в устранении неполадок вопрос.
@McGiverGim У тебя есть Лос-Анджелес?
Нет, извините, не знаю
Хм … Обычно бывает наоборот — сообщается, что оборудование работает в Betaflight и не работает в INAV: smile:
В INAV это обычно крайние случаи с предельным качеством оборудования. Некоторые датчики компаса работают только на более низких скоростях I2C (200 кГц). Насколько я знаю, в Betaflight нет кода для выбора низких скоростей I2C.
Взглянув на код, Betaflight работает на 800 и 400, а iNav также имеет 100 и 200, но я думаю, что по умолчанию он настроен на работу на 400.
Хотите попробовать 200?
Сейчас строю по дефолту 200. Или можно сделать самому?
Ага. Вот и все, строка 417. Измените 400000 на все, что хотите, 200000, 100000, …
Некоторое продвижение:
- Удаление if и постоянное использование 200000, MAG не обнаружен, и конфигуратор показывает одну ошибку I2C.
- Удалив if и используя 400000, МАГ ОБНАРУЖЕН !!!! но конфигуратор показывает, что счетчик ошибок I2C постоянно увеличивается.
- Если разрешить if и установить разгон в false, чтобы автоматически установить значение 400000, MAG не обнаружен и ошибок нет.
- Если удалить if, использовать 400000 и установить значение false для разгона, MAG обнаружил, но конфигуратор показывает, что количество ошибок I2C постоянно увеличивается.
Так что постоянный разгон вроде не работает. Есть ли другие идеи попробовать?
Больше информации
Использование 400000 и изменение:
https://github.com/betaflight/betaflight/blob/8b334e5674f3a53ac2cd359d7ab2eb037d901dbb/src/main/drivers/bus_i2c_impl.h#L25-L27
Таймаут по умолчанию на долгий таймаут … МАГ обнаружен, и у меня нет ошибок. Мне нужно проверить, работает ли он, правильно ли обнаружен север, но это продвижение
Результат некоторых тестов: вроде не работает. Когда я запускаю FC, конфигуратор всегда указывает на север, игнорируя положение квадроцикла.
Итак, MAG обнаружен, ошибок нет, но данные не читаются правильно.
РЕДАКТИРОВАТЬ: МАГ не работает, потому что калибровка не работает. Если я добавлю несколько «случайных» значений, например
set magzero_x = -32
set magzero_y = 153
set magzero_z = 284
Тогда mag «работает» (не очень хорошо, потому что случайные значения неправильные), но он работает. Возможно ошибка в конфигураторе или какая-то проблема с моими изменениями. Буду тестировать еще.
После множества тестов теперь я думаю, что магнит неисправен. С изменениями, Betaflight обнаруживает это, но вкладка датчиков в журнале всегда равна 0, поэтому я думаю, что они не были прочитаны.
Я установил iNav, который определяет МАГ из коробки … и проблема такая же. Он не определяет значения на вкладке датчиков.
Так что если ни у кого нет другой идеи, думаю, мне нужно купить еще один МАГ и закрою этот вопрос.
Извините за время, потраченное на все попытки мне помочь.
Купил другую, такую же модель, упертый, как и я … Будет четверг, и посмотрим, что будет …
Привет, пожалуйста, продолжайте в том же духе, у меня такая же проблема, и я хотел бы иметь возможность использовать свой mag, но программирование не поддается мне.
Проблема все еще в новой вер. 3.2.2
и я могу подтвердить, что для меня inav работает с моим neoM8N + HMC5883 без проблем, но с Betaflight нет, даже если я использую set mag_hardware = HMC5883
@catchra : По крайней мере,
Я использую омнибус f4 v3 с sdcard на прошивке 3.2.2
что касается магнита, он подключен к SCL / TX3 и SDA / RX3
на вкладке портов я не внес изменений в uart3
на вкладке конфигурации я включил магнит
и в CLI я использовал set mag_hardware = HMC5883
а затем save
это тот же параметр, который я использовал в Inav
в флешере Betaflight я использую OMNIBUSF4SD версии 3.2.2
во флешере Inav я использую OMNIBUSF4SD в версии 1.6-ALPHA2
с включенным показом нестабильности
Вы должны поместить эти команды в cli:
resource I2C_SCL 2 B10
resource I2C_SDA 2 B11
save
Спасибо за эту работу
но это вывод из CLI
Entering CLI Mode, type 'exit' to return, or 'help'
# resource I2C_SCL 2 B10
NOTE: B10 already assigned to SERIAL_TX 3.
Resource is set to B10
# resource I2C_SDA 2 B11
NOTE: B11 already assigned to SERIAL_RX 3.
Resource is set to B11
это не сработало, пока я не использовал команды, которые вы мне дали.
Да не волнуйся. Это предупреждения.
Чтобы предоставить больше информации об этой проблеме, пока я не получу новое устройство, я нашел пользователя iNav с той же проблемой и тем же продуктом:
https://github.com/iNavFlight/inav/issues/2299
В одном из комментариев говорится, что MAG может быть QMC5883, а не HMC5983L. На фото — DA 5883 7002. Есть ли способ узнать, что это за HMC или QMC?
@McGiverGim «DA 5883» выглядит как QMC5883; Есть множество китайских сайтов, в которых чип DA указан как «альтернатива HMC5883».
РЕДАКТИРОВАТЬ
Странно то, что он мог быть определен как HMC5883, даже если у них нет совместимого адреса.
Итак, у меня две проблемы:
- Первое, Betaflight его не поддерживает
- Во-вторых, кажется, что это не стандартный QMC5883, потому что iNav определяет его как HMC5883, и если настроить его как QMC5883, он отображается как недоступный.
Может быть, QMC5883 слушает адрес HMC5883?
Благодаря! Попробую скомпилировать inav с использованием QMC и адреса HMC, чтобы посмотреть, работает ли … Может, это будет единственная «настройка».
В технических данных упоминается «_OTP Load_» сразу после POR и Soft Reset. Я подозреваю, что адрес I2C написан в области OTP …
Ах да, этот чип QMC5883, похоже, вызывает настоящую боль. Когда он на адресе по умолчанию — все в порядке, но если производитель настраивает его на что-то другое — начинают происходить забавные вещи.
Да, я немного меняю значения и регистры, смешивая значения, необходимые для HMC5883L и QMC5883L, чтобы посмотреть, повезет ли мне … но нет. Делать это вслепую кажется болью …
Если у кого-то есть идеи, могу попробовать, но думаю у меня просто «неправильный» МАГ
После игры с ним … у меня есть грязный код, который, КАЖЕТСЯ, РАБОТАЕТ !!! . Но я не знаю почему, и я не понимаю большую часть кода. Наконец, кажется, что мой QMC5883 эмулирует почти все из HMC5883. Теоретически команды и регистры для QMC5883 отличаются от HMC5883, но в этой версии нет. Может чип кастомный?
Чтобы он заработал, я изменил три вещи:
https://github.com/betaflight/betaflight/blob/8b334e5674f3a53ac2cd359d7ab2eb037d901dbb/src/main/drivers/bus_i2c_impl.h#L27
Измените тайм-аут на I2C_LONG_TIMEOUT
Замените это, если:
https://github.com/betaflight/betaflight/blob/8b334e5674f3a53ac2cd359d7ab2eb037d901dbb/src/main/drivers/bus_i2c_stm32f10x.c#L414 -L418
с помощью i2cInit.I2C_ClockSpeed = 400000;
теоретически этого можно добиться, изменив константу I2C_OVERCLOCK
на false
но у меня это не сработало, возможно, я сделал что-то не так.
Без двух вышеуказанных изменений чип не обнаружился. С ними определяется как HMC5883. Но значения, считываемые MAG, всегда равны нулю.
Чтобы решить всегда нулевые значения, я изменил это:
https://github.com/betaflight/betaflight/blob/8b334e5674f3a53ac2cd359d7ab2eb037d901dbb/src/main/drivers/compass/compass_hmc5883l.c#L202
By int ret = (int16_t)(raw[0] << 8 | raw[1]);
Итак, я полностью удалил усиление. Не знаю, важно это или нет.
В оставшемся коде много операций (например, вычислить выигрыш). Я не знаю, возможно, некоторые из них не подходят для QMC5883L, но это работает.
Могу ли я позволить коду без части усиления или, может быть, я могу что-то изменить, чтобы он вычислялся правильно?
В завершение поговорил с производителем (радиосвязь), это самое главное, что они говорят:
Мы сделали сканирование и можем использовать его согласно HMC5983.
Они подумали, что это совместимо, затем я рассказал им о проблемах и решениях, которые нашел, и они сказали:
1. Наше новое преобразование компаса не поддерживает Betaflight.
2. Теперь он отлично работает с apm и pixhawk.
3 、 Вы можете удалить вычисление УСИЛЕНИЯ.
Я думаю, не интересно вносить изменения в код для поддержки этой модели (я не знаю, будут ли другие бренды делать то же самое в будущем), какие-то мысли? Пока буду использовать кастомную прошивку.
Мех … Не думаю, что стоит поддерживать случайную химеру …
Я не знаю, лучше ли закрыть проблему или позволить ей открыться на некоторое время (возможно, другие сочтут эту информацию полезной).
@jflyper что ты думаешь?
Имеет смысл проверить рассчитанные значения усиления и заменить заведомо неверные значения чем-то разумным …
Снижение скорости I2C за счет отключения разгона должно работать, если это не так, его нужно исправить.
I2C_DEFAULT_TIMEOUT странно. @McGiverGim : Можете ли вы регистрировать автобусные транзакции? Saleae или аналогичный цифровой анализатор?
@ledvinap
Что касается усиления, то код iNav (который поддерживает собственный QMC5883) не вычисляет усиление для этого компаса, но рассчитывается для HMC. Не знаю почему.
Снижение скорости I2C, определяемое I2CX_OVERCLOCK, не работает. Я провел несколько тестов, и это значение не считывается. Возможно, при передаче значений из одной переменной в другую в коде значение теряется. Смотрю код, но места не нашел. Это точно ошибка.
РЕДАКТИРОВАТЬ: Извините, но ошибки нет Я не делаю
defaults
каждый раз, когда устанавливаю файл прошивки. Это определение, но оно сохраняется как переменная в FC. Извините !!
Наконец, нет, у меня нет инструмента, который позволял бы что-либо регистрировать
У меня аналогичные проблемы, но значения моего датчика, кажется, намного выше, чем они должны в данных датчика. Омнибус F4 SD с Ublox NEO-M8N. Значения меняются, когда я вращаю аппарат, так что кажется, что он считывает датчик магнитного поля, однако он всегда имеет тенденцию указывать на юг, я думаю, из-за высокого значения Z? Я безуспешно пытался откалибровать и изменить ориентацию MAG. Я готовлю среду сборки, чтобы начать возиться со значениями усиления и другими идеями, указанными выше. Любые предложения приветствуются.
@jaisor Начните с открытия шайбы GPS и прочитайте маркировку на магнитном чипе.
NEO-M8N-0-01, не уверен, что могу прочитать большую часть маркировки микросхем, прилагается фотография
Вот статус BF:
System Uptime: 56 seconds
Voltage: 0 * 0.1V (0S battery - NOT PRESENT)
CPU Clock=168MHz, GYRO=MPU6000, ACC=MPU6000, BARO=BMP280, MAG=HMC5883
SD card: None inserted
Stack size: 2048, Stack address: 0x10010000
I2C Errors: 0, config size: 2084, max available config: 16384
CPU:8%, cycle time: 127, GYRO rate: 7874, RX rate: 49, System rate: 9
Arming disable flags: RXLOSS CLI
Я попытался установить значения magzero, как упоминал выше МакГиверГим, и это действительно улучшило сообщаемые диапазоны датчиков, теперь направление компаса обновляется намного лучше, когда я вращаю аппарат. Может ли это действительно быть проблема с калибровкой?
Ваш mag (U3 на изображении) — оригинальный HMC5883. Значит, ваша проблема в другом.
@McGiverGim Большое спасибо за этот отчет и за расследование. У меня есть этот Radiolink SE100 , хотя никто никогда не может быть уверен, какой именно, учитывая огромное количество вариантов на Aliexpress, eBay и Banggood. : stuck_out_tongue_closed_eyes:
После моих прошлых взаимодействий с разработчиками Betaflight, которые любезно помогли мне настроить мои необычные конфигурации, у меня уже есть осциллограф. : солнцезащитные очки: Тем не менее, чем я могу помочь? Потому что у меня либо та же проблема, что и у вас, либо похожая. Я уже спрашивал в rcgroups о моих текущих проблемах с OMNIBUSF7V2
— одна с softserial, другая с компасом.
Что заставляет меня несколько сомневаться в схожести моей проблемы, так это то, что ваш взлом не работает в моем случае. Это просто не имеет никакого эффекта. Тем не менее, весь вопрос, возможно, стоит изучить.
@jflyper @digitalentity @ledvinap Что и когда мне следует проводить измерения с помощью осциллографа? Должен ли я записывать, что происходит на SDA и SCL, когда плата загружается по USB? Есть ли другие предложения по отладке?
Заглянем внутрь шайбы / шестиугольника, чтобы мы знали, что это за устройство (в моем случае).
Да, это qmc5883, мои изменения должны работать на вас. Другие пользователи iNav лечили их и работали. Может проблема с omnibusf7v2, не знаю.
Посмотрим, дадут ли вам другие инструкции для осциллографа. 😉
Нет, к сожалению, в моем случае взлом не подействовал. : разочарованный: Но может быть и ряд других причин. Самое главное, что у нас может быть одинаковая шайба GPS, но платы разные. У OMNIBUSF7V2
(у меня есть этот ) действительно могут быть другие проблемы. (Мне уже сложно настроить softserial. Что ж, в этом всегда есть немного приключений.)
# status
System Uptime: 93 seconds
Voltage: 5 * 0.1V (0S battery - NOT PRESENT)
CPU Clock=216MHz, GYRO=ICM20608G, ACC=ICM20608, BARO=BMP280
SD card: Startup failed
Stack size: 2048, Stack address: 0x20010000
I2C Errors: 2, config size: 2140, max available config: 32768
CPU:35%, cycle time: 100, GYRO rate: 10000, RX rate: 49, System rate: 9
Arming disable flags: RXLOSS CLI MSP
2. Теперь он отлично работает с apm и pixhawk.
Только заметил, что ^^^ сейчас. Так что в этом случае ответ где-то здесь . Но я не могу заметить это с первого взгляда; здесь нет очевидной ветки типа «поддерживайте нестандартные вещи здесь».
Также может помочь перенос этого драйвера с iNav на Betaflight. Я изучал это некоторое время, и это не сложно; всего несколько констант, которые нужно скопировать с ним, и небольшая разница в API в qmc5883Read()
которую я только что взломал, надеясь, что я хотя бы инициализирую компас, хотя и с бессмысленными значениями, которые пропускают некоторую нормализацию или еще много чего. Ну, он собирается, и у меня есть опция QMC5883 в конфигураторе, но это все, что у меня есть.
Когда я устанавливаю QMC5883, единственное, что происходит, это то, что я начинаю получать 7 ошибок I2C вместо 2-3. Это не совсем полезно. : cry: Я также пробовал убрать проверку QMC5883_ID_VAL
(и эквивалентный хак для HMC5883
), но нет, он ни в коем случае не будет обнаружен. Пробовал 200/400/800 кГц, но нет. Адреса 30 и 13 испытали в обоих случаях, но безрезультатно. Довольно неприятно.
Таким образом, в iNav mag обнаруживается «из коробки» без изменения каких-либо параметров конфигурации. Но при явной настройке драйвера это HMC5883
, а не QMC5883
. Так что разница в HMC5883
водителя и QMC5883
портирования эксперимент был в значительной степени напрасно. Это не устройство QMC5883
. И это непригодно, потому что все время показывает только три нуля.
Перенос HMC5883
iNav в Betaflight сложнее, чем в случае QMC5883
. Множество констант и переименованные элементы struct
потребуют проверки от случая к случаю. : fearful: И поскольку в настоящее время он все равно не работает (показывает нули), я не уверен, что оно того стоит.
@andrejpodzimek то, что вы видели, это то, что я видел раньше:
- Радиолиния QMC5883 была «изменена» для работы как HMC5883, адрес, регистры, команды и т. Д. Остались такими же, поэтому это причина того, что iNav обнаруживает ее как HMC5883.
Но «копия» неточна, кое-что не работает, по крайней мере известно:
- Расчет магнитного усиления (нам нужно убрать использование усиления)
- Тайм-аут (нам нужно изменить его на БОЛЬШОЙ тайм-аут)
- Скорость (нам нужно отключить разгон шины I2C)
Но с этими изменениями он работает (я его использовал, и он работает очень и очень хорошо). Я не знаю, есть ли у вас ветка с изменениями, чтобы проверить, верны ли они. Если нет, я могу построить для вас один гекс, чтобы проверить, работает ли он.
Попытки повторно протестировать это на сегодняшнем мастере не увенчались успехом. : angry: Я подала №4779.
Вот моя ветка с (как мне кажется) вашим хаком . Мне пришлось выбрать хак до состояния до de5b0d53ffff22037a1d96409aa88ffcf51423ce, чтобы избежать # 4779, поэтому я протестировал его на том, как все выглядело ~ 2 дня назад. (Текущая мастер-голова, с вашим взломом или без него, не будет перезагружена после того, как я применю различие, упомянутое в # 4779.)
Итак, соответствует ли взлом тому, что сработало для вас? Предположительно, я также тестировал его с ~ 10 различными дополнительными специальными настройками (200 кГц на I2C, пропуск проверки идентификатора устройства в драйвере и т. Д.). Ни одна из этих настроек у меня не сработала. : sob:
@andrejpodzimek Я посмотрел на ваши изменения, и они мне кажутся полезными
Хакер был протестирован несколькими пользователями в ветке iNav и работал у всех, так что, возможно, это еще один вид несовместимости с вашей платой. Может быть, это глупый вопрос, но правильно ли отображаются контакты I2C с помощью команды ресурсов?
@McGiverGim На самом деле ваша точка зрения по поводу команды resource
прекрасна! Напомню, что я пытался поменять пины только без вашего хака, а не вместе с вашим. Теперь я обнаружил очевидную проблему: это против этого ! UART3
— это последовательный порт, совместно используемый I2C. И только один из двух заголовков может быть правильным. : rofl: Я настроил контакты I2C в Betaflight на основе заголовка Betaflight и этой схемы:
Так что это может быть комбинация двух проблем:
- Ваш хак нужен, иначе ничего не получится.
- Контакты должны быть настроены правильно, иначе это не сработает.
Это ^^^ оставляет нам 4 возможных комбинации, и пока я исследовал только 3 из них. Я протестирую 4-й, когда вернусь домой; с нетерпением жду этого!
- Я был совершенно неправ (снова), как указал @jflyper в # 4784.
- Я получил данные магнитометра, применяя @McGiverGim «s взломать iNav вместо Betaflight.
Это странно. У меня вообще не работает хак в Betaflight. Вот моя версия для iNav. Это работает, и у меня есть ненулевые данные. Это не означает, что я как-то правильно тестировал датчик, но он просто как-то работает:
Калибровка тоже сработала:
magzero_x = 131
magzero_y = -334
magzero_z = -44
Итак, какого волшебного порошка не хватает Betaflight? Драйвер выглядит иначе, но я понятия не имею, на каких магических числах нужно сосредоточиться. Этот хак Betaflight мне не подходит; там нет I2C.
@andrejpodzimek
Если вы работаете с F7, вам нужно манипулировать bus_i2c_hal.c
вместо bus_i2c_stm32f10x.c
.
Это около строки 255:
251 if (pDev->overClock) {
252 // 800khz Maximum speed tested on various boards without issues
253 pHandle->Init.Timing = 0x00500D1D;
254 } else {
255 pHandle->Init.Timing = 0x00500C6F;
256 }
Я думаю, что член Timing
переходит в регистр I2C_TIMINGR
, но когда я смотрю справочное руководство, этот код не управляет значением предделителя (оба равны нулю).
@jflyper прав, я не думал в двух файлах.
То, что я сделал в моем коде, было в моем target.h
undef все определения I2Cx_OVERCLOCK
и снова определить их со значением false
. Это будет служить для обоих файлов. pDev->overClock
жестко запрограммирован для этого определения во время сборки.
@jflyper @McGiverGim Итак, я только что попробовал дополнительный хак ( pHandle->Init.Timing = 0x00500C6F
в bus_i2c_hal.c
вне зависимости от разгона) и даже установил все определения I2C?_OVERCLOCK
в false
в common_fc_pre.h
. Но это совсем не помогло; по-прежнему нет компаса. (Протестировано с текущими master
.)
@andrejpodzimek Как я отмечал в предыдущем комментарии, я думаю, вы установили некоторое значение предделителя спуска для Timing
.
И … у вас был логический анализатор и dss? Я бы не стал заниматься подобным с подходящими измерительными приборами. Это просто пустая трата времени на догадки и полуслепой взлом.
Ребята, извините, если это не то место, чтобы спросить. Я изо всех сил пытался заставить свои GPS и Mag работать уже 3 недели (плюс 3 дня, пытаясь создать собственную прошивку с использованием всех связанных потоков на RCG и GitHub).
Пожалуйста, порекомендуйте:
- Плата: OMNIBUS F4 SD
- GPS: Ublox Neo-M8N,
- Mag: чип говорит L883-2122 (я думаю, это HMC5883 …)
- Inav: после того, как я снизил время до 200, он был наконец обнаружен, откалиброван и, казалось, работал, но подсчет ошибок i2c со скоростью около 2 ошибок каждые десять секунд …
- BetaFlight и Cleanflight: Ничего не помогает … Назначение последовательных 3 TX и RX на NONE и назначение i2c 2 на B10 и B11 — ничего. Ручная установка mag_hardware на HMC5883 — ничего. Компас не определяется.
В Betaflight после того, как я назначил I2C SCL и SDA для B10 и B11, Gyro и Acc каким-то образом затронуты: сначала они не обнаруживаются, а через пару раз плата подключается / отключается от USB — они, кажется, начинают работать правильно, но иногда они снова отключаются.
У меня проблемы с настройкой windows-ubuntu-sygwin-bash … для компиляции пользовательских сборок (я над этим работаю).
Пожалуйста, скомпилируйте для меня сборку скорости i2c 200 кГц. Или дайте мне какой-нибудь другой совет.
С нетерпением жду вашего ответа, ребята.
@yetipuk
Откройте шайбу GPS, сделайте снимок в высоком разрешении печатной платы внутри, стороны без антенны и загрузите снимок сюда.
@yetipuk
Вам нужен подтягивающий резистор на SCL и SDA.
Установите резисторы 2K2 между SCL и 3V3, а также SDA и 3V3.
Одна из 3-контактных ИС между контактной площадкой 5 В и NEO (вероятно, ~ нижний ~ верхний правый) обеспечивает 3V3.
Чувак, я не очень хорошо разбираюсь в таком оборудовании, и после того, как вы попросили фото, я начал просматривать другие сообщения с этой проблемой и понял, что я ошибся элементом между микросхемой магнитометра и паяльными площадками scl-sda. Я думал, что это был подтягивающий резистор, о котором все говорили. Спасибо за ваши ответы! С уважением!
Извините, что вернулся, но я также прошу вас сделать шестнадцатеричную сборку QMC5883, пожалуйста. Покупка и пайка подтягивающих резисторов займет некоторое время, но у меня есть компас GY-271 и, похоже, на нем есть микросхема QMC. А пока я бы попробовал.
@yetipuk К сожалению, QMC5883 НЕ совместим с текущим BF. Все усилия, представленные здесь для QMC5883, сделаны без моего вмешательства.
@jflyper извините за https://github.com/iNavFlight/inav/issues/1877 или удалить вообще. Я просто не мог поверить, что мне вообще придется паять эти нанорезисторы где-нибудь в моей жизни. Это сработало. Я очень счастлива! Спасибо вам, ребята!
@yetipuk Рад, что это сработало.
Да, и вы можете использовать большие осевые резисторы 😉
Также может быть полезна матрица резисторов . Он обеспечит подтягивающие резисторы для двух шин I2C, все в одной. Не требует специальных навыков пайки или оборудования.
Спасибо, Андрей!
Вот как я это сделал: сначала — с крошечными проводами, прикрепленными к резисторам smd. Второй — осевые резисторы. Не надо складывать руки, ребята!
Думаю, у меня тоже есть проблема.
FC — это Matek F405CTR.
GPS — это Radiolink TS100
http://www.radiolink.com.cn/doce/product-detail-136.html
На сайте говорится, что магномометр представляет собой «QMC5883L, использующий ту же технологию, что и HMC5983 от Honeywell».
У Radiolink действительно есть веб-сайт, а не случайный продавец на ebay / amazon, поэтому можно будет связаться с ними и получить некоторую информацию, если позволяют языковые барьеры: www.radiolink.com.
Это контактная страница: http://www.radiolink.com.cn/doce/contact.html, которая включает следующие адреса электронной почты: [email protected] или [email protected]
Я пробовал BF3.2.3 и версию 3.2.4 с сайта Matek с сопоставлением ресурсов, описанным ниже.
Ресурсы после стирания флеш-памяти:
Войдите в режим командной строки, введите «exit», чтобы вернуться, или «help»
ресурс
ресурс BEEPER 1 C13
ресурс ДВИГАТЕЛЬ 1 C06
ресурс ДВИГАТЕЛЬ 2 C07
ресурс ДВИГАТЕЛЬ 3 C08
ресурс ДВИГАТЕЛЬ 4 C09
ресурс ДВИГАТЕЛЬ 5 А15
ресурс ДВИГАТЕЛЬ 6 А08
ресурс ДВИГАТЕЛЬ 7 B08
ресурс PPM 1 A03
ресурс ШИМ 1 А00
ресурс PWM 2 A01
ресурс PWM 3 A02
ресурс LED_STRIP 1 B06
ресурс SERIAL_TX 1 A09
ресурс SERIAL_TX 2 A02
ресурс SERIAL_TX 3 C10
ресурс SERIAL_TX 4 A00
ресурс SERIAL_TX 5 C12
ресурс SERIAL_RX 1 A10
ресурс SERIAL_RX 2 A03
ресурс SERIAL_RX 3 C11
ресурс SERIAL_RX 4 A01
ресурс SERIAL_RX 5 D02
ресурс I2C_SCL 1 B06
ресурс I2C_SDA 1 B07
светодиод ресурса 1 B09
светодиод ресурса 2 А14
ресурс SPI_SCK 1 A05
ресурс SPI_SCK 2 B13
ресурс SPI_SCK 3 B03
ресурс SPI_MISO 1 A06
ресурс SPI_MISO 2 B14
ресурс SPI_MISO 3 B04
ресурс SPI_MOSI 1 A07
ресурс SPI_MOSI 2 B15
ресурс SPI_MOSI 3 B05
ресурс ESCSERIAL 1 A03
ресурс ADC_BATT 1 C05
ресурс ADC_RSSI 1 B01
ресурс ADC_CURR 1 C04
Сделаны эти переназначения ресурсов:
Ресурсы
ресурс ДВИГАТЕЛЬ 5 НЕТ
ресурс ДВИГАТЕЛЬ 6 НЕТ
ресурс ДВИГАТЕЛЬ 7 НЕТ
ресурс LED_STRIP 1 A15
ресурс I2C_SCL 2 A08
ресурс I2C_SDA 2 B08
разница
версия
Betaflight / MATEKF405 (MKF4) 3.2.4 10 января 2018 г. / 22:56:21 (90d32fd56) API MSP: 1.36
имя
название 1337flite F1-6
Ресурсы
ресурс ДВИГАТЕЛЬ 5 НЕТ
ресурс ДВИГАТЕЛЬ 6 НЕТ
ресурс ДВИГАТЕЛЬ 7 НЕТ
ресурс LED_STRIP 1 A15
ресурс I2C_SCL 2 A08
ресурс I2C_SDA 2 B08
Смеситель
сервопривод
сервомикс
характерная черта
особенность -СОФТЦЕРИАЛЬНЫЙ
функция MOTOR_STOP
функция GPS
функция LED_STRIP
функция ESC_SENSOR
особенность ANTI_GRAVITY
функция DYNAMIC_FILTER
пищалка
beeper -GYRO_CALIBRATED
beeper -RX_LOST
beeper -RX_LOST_LANDING
beeper -ОБЕДАЮЩИЙ
beeper-ARMING
beeper -ARMING_GPS_FIX
beeper -BAT_CRIT_LOW
beeper -BAT_LOW
beeper -RX_SET
beeper -ACC_CALIBRATION
beeper -ACC_CALIBRATION_FAIL
beeper -READY_BEEP
beeper -DISARM_REPEAT
бипер -РУЖЕННЫЙ
beeper -SYSTEM_INIT
beeper -ON_USB
beeper -BLACKBOX_ERASE
карта
серийный
серийный 2 2048 115200 57600 0 115200
серийный 3 2 115200 115200 0 115200
серийный 4 1024 115200 57600 0 115200
светодиод
светодиод 0 0,0 :: CO: 2
светодиод 1 1,0 :: S: 2
светодиод 2 2,0 :: CO: 2
светодиод 3 0,1 :: AO: 2
светодиод 4 1,1 :: АО: 2
светодиод 5 2,1 :: AO: 2
светодиод 6 0,2 :: CO: 2
светодиод 7 1,2 :: G: 2
привело 8 2,2 :: CO: 2
цвет
mode_color
mode_color 6 1 2
вспомогательный
доп 0 0 0 1600 2100
доп. 1 2 1 900 1300
доп 2 13 2 1625 2100
доп 3 15 5 1650 2100
доп. 4 19 4 1650 2100
доп 5 28 1 1675 2100
доп 6 35 3 1625 2100
доп 7 36 6 1625 2100
отложить
rxrange
vtx
rxfail
мастер
установить mag_hardware = AUTO
установить min_check = 1015
установить max_check = 1985
установить rssi_channel = 12
установить serialrx_provider = CRSF
установить blackbox_p_ratio = 64
установить motor_pwm_protocol = DSHOT600
установить small_angle = 180
установить gps_provider = UBLOX
установить gps_auto_baud = ON
установить pid_process_denom = 1
установить osd_vbat_pos = 2060
установить osd_rssi_pos = 2068
установить osd_tim_1_pos = 2519
установить osd_tim_2_pos = 407
установить osd_flymode_pos = 2541
установить osd_throttle_pos = 2049
установить osd_vtx_channel_pos = 320
установить osd_ah_sbar = 200
установить osd_ah_pos = 200
установить osd_current_pos = 2072
установить osd_mah_drawn_pos = 385
установить osd_craft_name_pos = 2440
установить osd_gps_speed_pos = 2425
установить osd_gps_lon_pos = 2496
установить osd_gps_lat_pos = 2464
установить osd_gps_sats_pos = 2056
установить osd_home_dist_pos = 2381
установить osd_compass_bar_pos = 266
установить osd_altitude_pos = 247
установить osd_pid_roll_pos = 423
установить osd_pid_pitch_pos = 455
установить osd_pid_yaw_pos = 487
установить osd_debug_pos = 1
установить osd_power_pos = 7
установить osd_pidrate_profile_pos = 2400
установить osd_warnings_pos = 2409
установить osd_avg_cell_voltage_pos = 2487
установить osd_pit_ang_pos = 2481
установить osd_rol_ang_pos = 2513
установить osd_battery_usage_pos = 392
установить osd_nheading_pos = 311
установить osd_nvario_pos = 279
установить osd_esc_tmp_pos = 58
установить osd_esc_rpm_pos = 33
установить osd_stat_max_dist = ON
установить osd_stat_endbatt = ON
установить osd_stat_tim_1 = ON
установить debug_mode = GYRO_RAW
профиль
профиль 0
установить anti_gravity_gain = 2500
установить setpoint_relax_ratio = 85
установить dterm_setpoint_weight = 85
профиль
рейтинг 0
установить rc_rate = 115
установить rc_rate_yaw = 115
установить rc_expo = 20
установить rc_expo_yaw = 20
установить roll_srate = 85
установить pitch_srate = 85
установить yaw_srate = 85
положение дел
Время работы системы: 71 секунда
Напряжение: 47 * 0,1 В (батарея 0S — НЕТ)
Тактовая частота процессора = 168 МГц, гироскоп = MPU6000, ACC = MPU6000
SD-карта: Производитель 0x95, 15645696kB, 08/2016, v0.7, ‘5WCGO’
Файловая система: Готово
Размер стека: 2048, адрес стека: 0x10010000
Ошибок I2C: 5, размер конфигурации: 2084, максимально доступная конфигурация: 16384
ЦП: 8% , время цикла: 129, частота гироскопа: 7751, частота приема: 49, частота системы: 9
Флаги отключения постановки на охрану: RXLOSS NOPREARM CLI
задания
Частота списка задач / Гц макс. / США сред. / США макс. Загрузка средняя загрузка всего / мс
00 — (СИСТЕМА) 9 3 1 0,5% 0,5% 0
01 — (ГИРО / ФИД) 7874 52 43 41,4% 34,3% 23123
02 — (ACCEL) 985 17 9 2,1% 1,3% 675
03 — (ОТНОШЕНИЕ) 100 18 12 0,6% 0,6% 82
04 — (Прием) 49 40 32 0,6% 0,6% 114
05 — (ПОСЛЕДОВАТЕЛЬНЫЙ) 99 10055 1100,0% 0,5% 33
07 — (НАПРЯЖЕНИЕ БАТАРЕИ) 49 4 2 0,5% 0,5% 5
08 — (БАТАРЕЯ_ТОК) 49 5 1 0,5% 0,5% 4
09 — (BATTERY_ALERTS) 4 4 2 0,5% 0,5% 0
10 — (СИГНАЛ) 100 7 1 0,5% 0,5% 6
11 — (GPS) 99 45 9 0,9% 0,5% 75
16 — (ТЕЛЕМЕТРИЯ) 492 23 2 1,6% 0,5% 78
17 — (LEDSTRIP) 99 94 60 1,4% 1,0% 441
18 — (OSD) 59 500 50 3,4% 0,7% 229
19 — (ESC_SENSOR) 99 9 3 0,5% 0,5% 20
20 — (CMS) 59 4 1 0,5% 0,5% 3
21 — (VTXCTRL) 4 41 36 0,5% 0,5% 12
22 — (CAMCTRL) 4 3 0 0,5% 0,0% 0
Функция проверки приема 5 1 5
Итого (без СЕРИЙНОЙ) 56,5% 43,5%
Bugger только что увидел, что QMC5883 не поддерживает примечание от jflyper.
Это прискорбно — iNav считает, что QMC5883L можно найти в большинстве шайб GPS.
Кто-то с QMC5883L и вариантами должен выйти с рабочим PR.
Могу сделать рабочий пиар (по крайней мере, для своего варианта). Но для этого потребуется разрешить настраиваемый разгон I2C, тайм-аут I2C и игнорировать усиление mag, если оно недопустимо. Но, похоже, на все диковинные варианты этого не хватит.
Сколько существует вариантов? Я в курсе двух атм.
Если не ошибаюсь, вроде как минимум три:
- Оригинал QMC со своим адресом и поведением.
- Тот, который является клоном HMC, похоже, работает с моим хаком
- Тот, который не работал с моим хаком. Может быть, это ошибка FC или что-то подобное, но кто знает.
Это было довольно читаемое. Я думаю, будет проще просто заказать или найти мою старую поврежденную доску компаса и нагреть ИС на новую плату. Какая головная боль для I2C mag @ _ @
В худшем случае всегда есть AK89 **.
Есть идеи, как скоро эти GPS / компас появятся в последней сборке?
Решите ту же проблему с Omnibus F4 V3 Pro и TS100
Ожидается ли обновление?
@artempolikarpov TS100 использует настоящий QMC, который действует как QMC. Драйвер нужно добавить в код. Другое решение.
Ознакомьтесь с последней бета-версией 1.9.0 для исправления компаса Radiolink SE100.
@alanfj
Что насчет Radiolink TS100?
Возможно ли добавить драйвер в код в следующем выпуске?
Попробуйте новую версию INAV Beta 1.9.0. TS100 использует тот же компас и GPS. Исправления сделаны.
@alanfj
Спасибо!
Кстати, Betaflight хорошо работает с режимами полета GPS?
Я думаю, @alanfj говорит об iNav. И нет, поддержка в Betaflight очень плохая.
@McGiverGim
О да. Спасибо!
INAV — правильный выбор. Лучше всего использовать для дронов Q330 и более крупных. Лучше всего подходит для аэрофотосъемки и полета по карте / путевой точке.
Но у него нет DShot. : разочаровано: https://github.com/iNavFlight/inav/issues/1393 Я построил ~ 3 дрона, которые могут делать как аэрофотосъемку, так и двойные флипы или 5g + тяги, но все еще нет подходящей прошивки, чтобы управлять ими все , так сказать.
@artempolikarpov у тебя есть TS100? Думаю попробовать добавить драйвера в Betaflight. Я купил один, но его хватит на некоторое время. Интересно попробовать прошивку?
@McGiverGim Да, он у меня есть. Пожалуйста, позвольте мне попробовать вашу новую прошивку. Цель — OMNIBUSF4SD (V3 PRO)
Я еще не закончил. Надеюсь, мне понадобится один-два дня. Я буду держать вас в курсе.
@artempolikarpov Я закончил код. Я использую тот же FC, поэтому, если он вам подходит, он будет работать и у меня, когда придет мой GPS 😄
Вы найдете две версии:
- betaflight_3.3.0_OMNIBUSF4SD_QMC5883.hex -> Эта версия является основной веткой, добавляющей драйвер
- betaflight_3.3.0_OMNIBUSF4SD_QMC5883_SLOW.hex -> Это то же самое, что и первое, но с добавлением двух хаков, необходимых для SE100 (LONG_TIMEOUT и деактивация I2C_OVERCLOCK).
Вам нужно переходить к defaults
каждый раз, когда вы перепрограммируете другую прошивку, в противном случае изменение I2C_OVERCLOCK игнорируется.
Возьмите их здесь:
https://drive.google.com/open?id=1ghWTgPvPbLoj6o98p2HN_blOW7Doh-Ig
Спасибо за тест !!!
@McGiverGim Спасибо! Я попробую в эти выходные и дам вам отзыв
Да, это основные тесты:
- Проверьте, определяется ли он как QMC5883
- Если нет, настройте его как QMC5883 с помощью CLI.
- Посмотрите, есть ли ошибки I2C в нижней панели
- Если обнаружено и ошибок нет, то можно попробовать откалибровать и протестировать …
Я пробовал обе ваши цели на OmnibusF4SD, и они не работают. Я использую модуль GPS / компас Radiolink SE100. У меня их 2 и «компас» работать не будет. Я попытался поменять полярность, но все равно ничего. GPS работает нормально.
Отправлено из почты https://go.microsoft.com/fwlink/?LinkId=550986 для Windows 10
От: Мигель Анхель Мулеро Мартинес [email protected]
Отправлено: пятница, 23 февраля 2018 г. 2:36
Кому: betaflight / betaflight [email protected]
Копия: alanfj [email protected] ; Упомяните упоминание@noreply.github.com
Тема: Re: [betaflight / betaflight] Некоторые I2C MAG не работают (# 4531)
@artempolikarpov https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fartempolikarpov&data=02%7C01%7C%7C633bc756e4314c1e1f8508d57a901ff0%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636549681778330091&sdata=9S5d22cN%2FS5yLJWy6HdIAGftJb3PlOcHwUTKtqrbOhE % 3D & reserved = 0 Я закончил код. Я использую тот же FC, поэтому, если он вам подходит, он будет работать и у меня, когда придет мой GPS 😄
Вы найдете две версии:
- betaflight_3.3.0_OMNIBUSF4SD_QMC5883.hex -> Эта версия является основной веткой, добавляющей драйвер
- betaflight_3.3.0_OMNIBUSF4SD_QMC5883_SLOW.hex -> Это то же самое, что и первое, но с добавлением двух хаков, необходимых для SE100 (LONG_TIMEOUT и деактивация I2C_OVERCLOCK).
Вам нужно переходить к настройкам по умолчанию каждый раз, когда вы запускаете другую прошивку, в противном случае изменение I2C_OVERCLOCK игнорируется.
Возьмите их здесь:
https://drive.google.com/open?id=1ghWTgPvPbLoj6o98p2HN_blOW7Doh-Ig https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdrive.google.com%2Fopen%3Fid% 3D1ghWTgPvPbLoj6o98p2HN_blOW7Doh-Ig ,
Спасибо за тест !!!
—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fbetaflight%2Fbetaflight%2Fissues%2F4531%23issuecomment-367932901&data=02 % 7C01% 7C% 7C633bc756e4314c1e1f8508d57a901ff0% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636549681778330091 & SData = SlhwBLm1HOZuR6bHwmO1xydn7% 2FYqnUoLHBQyFlbIz7I% 3D & зарезервирован = 0 , или приглушить нить https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F% 2Fgithub.com% 2Fnotifications% 2Funsubscribe-AUTH% 2FAcryEVaPYxEOcIGgjuJYZuNMSPzc7m2Eks5tXmpvgaJpZM4QZNNl & данные = 02% 7C01% 7C% 7C633bc756e4314c1e1f8508d57a901ff0% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636549681778330091 & SData = pnO4mumw4z0Urowv3p4Nvv8% 2fn% 2BzphJcok2nAIpfqdcw% 3D & зарезервирован = 0 .
@alanfj этот мод был для TS100. Для SE100 необходимы другие изменения, вы можете увидеть их в этой ветке. Можете ли вы собрать собственную прошивку для Betaflight?
Нет, я не такой уж смекалистый.
Я могу построить для вас такой @alanfj OMNIBUSF4SD?
@McGiverGim
Я протестировал оба шестнадцатеричных кода, выполнив указанные выше действия. Mag не распознается, даже если установлен вручную mag_hardware = QMC5883
@artempolikarpov плохие новости 🤔 правильно ли вы распределили ресурсы? Если они верны, единственное, что я могу сделать, это опубликовать ветку как PR, чтобы увидеть, видит ли какой-нибудь другой разработчик ошибку.
@McGiverGim
правильно ли вы распределили ресурсы?
Я установил «none» для. Не помогло
resource SERIAL_TX 3 B10
resource SERIAL_RX 3 B11
@artempolikarpov да, и это тоже:
resource I2C_SCL 2 B10
resource I2C_SDA 2 B11
@McGiverGim Не помогло
Хорошо, я еще раз посмотрю на код, чтобы посмотреть, смогу ли я найти какую-нибудь ошибку.
@artempolikarpov Я открыл PR, чтобы посмотреть, может ли нам помочь кто-то более опытный.
@McGiverGim Спасибо. Буду ждать обновлений
@McGiverGim — будьте очень счастливы протестировать ваше исправление Ts100 / QMC5883L на Matek F4 или F7 Target, когда оно будет готово к тестированию.
digitalalentity знает о проблеме и делает исправление для INAV 1.9 RC2
@McGiverGim, вы можете попробовать INAV 1.9-RC2 (загружено сегодня). Он должен поддерживать компасы TS100 / SE100.
Также № 5309 выглядит нормально.
цифровая жизнь, вы сделали это! Мой Radiolink SE100 теперь работает. Я использовал АВТО, и компас отображается как HMC5883, и на графике компас работает правильно. Путь в путь! Спасибо! (INAV 1.90 RC2)
(INAV 1.90 RC2) Только что попробовал Radiolink SE100 на моем копировальном квадроцикле F330, и Radiolink GPS / Compass — «Rock Solid!» Он работает намного, намного лучше, чем NAZA GPS / Compass, который я использовал. В удержании положения и высоты он не вздрагивает ни на дюйм. Лучшее исполнение, которое я когда-либо видел. Я очень доволен! Еще раз спасибо за дигитальность!
Я обнаружил возможную ошибку в своем коде. Исправил и сгенерировал новые версии для тестирования в том же месте, что и раньше: https://drive.google.com/open?id=1ghWTgPvPbLoj6o98p2HN_blOW7Doh-Ig
@artempolikarpov, можешь ли ты протестировать их, когда будет время?
@ 1337flite ты про MATEKF405? Я сгенерировал для вас версии этого FC, так что, если вы сможете их протестировать, будет здорово.
@McGiverGim
Обе прошивки тестировал.
- Оба они обнаружили MAG после переназначения ресурсов. (статус — MAG = QMC5883)
- Калибровка в порядке.
- Вкладка «Датчики» — все три оси отображают данные для MAG.
- Ошибки I2C вообще не обнаруживаются.
Я не видел твоего сообщения! Хорошие новости! Так вроде работает? Север на своем месте?
Я создам одну последнюю версию, очистив код и удалив несколько повторных попыток из inav, которые Betaflight не использует.
Если получится, то PR будет готов к слиянию. Спасибо за тест!
Так вроде работает? Север на своем месте? <
Собственно у меня вопрос.
Если я открою вкладку «Датчики» — магнит на 3 оси работает нормально.
Если я открою начальную вкладку (первую) с графической доской компаса — стрелка показывает движение компаса, только если я поверну сам квадроцикл (даже если модуль GPS продырявлен). И наоборот — поворот модуля CW GPS — вообще не включает индикатор компаса.
Это нормально?
Да, на начальный компас влияет совместная работа компаса и гироскопа.
@McGiverGim Спасибо за это.
Я думаю, что Matek F405 hex видит Магнометр.
Моя шкала компаса перемещается, когда у меня включен магнометр в GU (10.2.0) I, и не перемещается, когда я выключаю магнометр.
Я не уверен, как откалибровать, но я считаю, что датчик распознается и инициализируется.
Я не вооружал и не летал на квадроцикле.
Графический интерфейс пользователя также не «подсвечивает» значок магнитометра в верхней части окна.
@ 1337flite
- Чтобы быть уверенным, что mag работает, вы должны активировать его на вкладке config, сохранить, и в типе интерфейса командной строки «status» вы увидите, обнаружен ли QMC5883. Иконка вверху должна «загореться», если не что то не так.
РЕДАКТИРОВАТЬ: Забыл сказать, что для его калибровки на первой вкладке вы увидите кнопку «Калибровать МАГ».
@artempolikarpov, если это
@McGiverGim Я завтра протестирую ваши очищенные двоичные файлы и дам отзыв
@McGiverGim — Мне не удалось заставить
Я еще раз посмотрю на выходных. Спасибо за ваши старания.
@McGiverGim Хорошо, у меня проблема с оборудованием, я считаю, что ваш образ работает на Matek F405.
Значок вверху загорается, и устройство отображается в выводе состояния:
положение дел
Время работы системы: 15 секунд
Напряжение: 145 * 0,1 В (батарея 4S — в порядке)
Тактовая частота процессора = 168 МГц, Vref = 3,31 В, температура ядра = 43 ° C, GYRO = MPU6000, ACC = MPU6000, BARO = BMP280, MAG = QMC5883
SD-карта: Производитель 0x95, 15645696kB, 08/2016, v0.7, ‘5WCGO’
Файловая система: Готово
Размер стека: 2048, адрес стека: 0x1000fff0
Ошибок I2C: 2, размер конфигурации: 2274, максимально доступная конфигурация: 16384
ЦП: 6% , время цикла: 129, частота гироскопа: 7751, частота приема: 49, частота системы: 9
Флаги отключения постановки на охрану: RXLOSS NOPREARM CLI MSP
@ 1337flite отлично! Это с моим последним наговором? Или первое, что я вам написал?
@McGiverGim последующее шестнадцатеричное значение из этого комментария: https://github.com/betaflight/betaflight/issues/4531#issuecomment -369500081
Однако есть одна проблема — я не могу вооружиться.
Глядя на вкладку приемника, я вижу, что радио отправляет значения ШИМ на правильные каналы.
Глядя в канал режима, я вижу указатель, который указывает, что значение ШИМ находится в диапазоне для режима охраны и режима предварительной постановки на охрану.
Метка режима предварительной постановки на охрану слева желтая / подсвечена, но метка режима постановки на охрану не подсвечена желтым.
В состоянии я получаю сообщение NOPREARM, хотя я активировал режим охраны.
Сообщение NOPREARM остается независимо от положения переключателя ARM.
положение дел
Время работы системы: 57 секунд
Напряжение: 140 * 0,1 В (батарея 4S — в порядке)
Тактовая частота процессора = 168 МГц, Vref = 3,30 В, температура ядра = 44 ° C, GYRO = MPU6000, ACC = MPU6000, BARO = BMP280, MAG = QMC5883
SD-карта: Производитель 0x95, 15645696kB, 08/2016, v0.7, ‘5WCGO’
Файловая система: Готово
Размер стека: 2048, адрес стека: 0x1000fff0
Ошибок I2C: 2, размер конфигурации: 2274, максимально доступная конфигурация: 16384
ЦП: 7% , время цикла: 125, частота гироскопа: 8000, частота приема: 149, частота системы: 9
Флаги отключения постановки на охрану: NOPREARM CLI MSP ARMSWITCH
положение дел
Время работы системы: 73 секунды
Напряжение: 140 * 0,1 В (батарея 4S — в порядке)
Тактовая частота ЦП = 168 МГц, Vref = 3,30 В, температура ядра = 44 ° C, GYRO = MPU6000, ACC = MPU6000, BARO = BMP280, MAG = QMC5883
SD-карта: Производитель 0x95, 15645696kB, 08/2016, v0.7, ‘5WCGO’
Файловая система: Готово
Размер стека: 2048, адрес стека: 0x1000fff0
Ошибок I2C: 2, размер конфигурации: 2274, максимально доступная конфигурация: 16384
ЦП: 7% , время цикла: 130, частота гироскопа: 7692, частота приема: 149, системная частота: 9
Флаги отключения постановки на охрану: NOPREARM CLI MSP **
Я также устал убирать режим предварительной постановки, перезагружался, и когда я ставлю на охрану значение ШИМ на вкладке режимов, находится в правильном диапазоне, но четверка не ставится на охрану.
Состояние с активным переключателем на охрану и удаленным режимом предварительной постановки на охрану показано ниже.
Если я выключу рычаг, то ARMSWITCH будет удален из строки флагов отключения постановки на охрану.
Не уверен, что это может быть актуально, но четверка использует CRSF в качестве протокола последовательного управления.
Войдите в режим командной строки, введите «exit», чтобы вернуться, или «help»
÷ tARM; УГОЛ; ГОРИЗОНТ; GPS HOME; GPS HOLD; HEADFREE; FAILSAFE; ANTI GRAVITY; HEADADJ; BEEPER; OSD DISABLE SW; BLACKBOX; AIR MODE; FPV ANGLE MIX; BLACKBOX ERASE (> 30s); УПРАВЛЕНИЕ КАМЕРОЙ 1; УПРАВЛЕНИЕ КАМЕРОЙ 2; УПРАВЛЕНИЕ КАМЕРОЙ 3; ПРЕДВАРИТЕЛЬНОЕ УПРАВЛЕНИЕ; СЧЕТЧИК СПУТНИКОВ GPS СИГНАЛИЗАЦИЯ; РЕЖИМ VTX PIT; ÷ $ M> ????) n ?? ü ‘:
Войдите в режим командной строки, введите «exit», чтобы вернуться, или «help»
положение дел
Время работы системы: 23 секунды
Напряжение: 137 * 0,1 В (батарея 4S — ВНИМАНИЕ)
Частота процессора = 168 МГц, Vref = 3,30 В, температура ядра = 40 ° C, GYRO = MPU6000, ACC = MPU6000
SD-карта: Производитель 0x95, 15645696kB, 08/2016, v0.7, ‘5WCGO’
Файловая система: Готово
Размер стека: 2048, адрес стека: 0x1000fff0
Ошибок I2C: 7, размер конфигурации: 2274, максимально доступная конфигурация: 16384
ЦП: 6% , время цикла: 127, частота гироскопа: 7874, частота приема: 148, системная частота: 9
Флаги отключения постановки на охрану: CLI MSP ARMSWITCH
Вы убрали связь с конфигуратором? Подключено только поставит на охрану вкладку двигателей, проверяя переключатель.
@McGiverGim
Финальная версия протестирована, все в порядке, как и раньше.
Нет необходимости set mag_hardware = QMC5883
, после переназначения ресурсов MAG обнаруживается автоматически
Отлично! Меня нет дома, через несколько часов я закончу PR, и, если хотите, я могу собрать 3.3 final версии с добавленным патчем для компаса.
Спасибо за вашу помощь!
@McGiverGim — нет может я USB не
Думаю раньше можно было поставить на охрану с подключенным USB?
@McGiverGim — вы правы, при загрузке без USB работает.
Извиняюсь за недоумение.
Спасибо за старания.
@ 1337flite @artempolikarpov Я обновил шестнадцатеричные файлы, теперь последняя версия 3.3 с добавленным QMC5883. Если вам нужен гекс для какого-нибудь другого ФК, я тоже могу его построить.
PR был объединен и будет официально доступен в версии 3.4 (запланирована на 1 июля).
Здравствуйте.
У меня проблема с контроллером CC3D REVO.
Inav не обнаружил встроенный компас, поэтому продал
Купил внешний GPS с компасом (Radiolink SE100)
GPS работает inav определяет компас как MHC5883, но все значения равны 0 и не реагируют в дюймах.
Я прочитал ветку и, вероятно, столкнулся с такой же проблемой в коде контроллера.
Может ли кто-нибудь мне в этом помочь? Я новичок в этой области.
С уважением.
У вас проблема с inav или с betaflight? Если проблема в inav, то вы не в том месте 😉
Вставил последнюю версию betaflight и теперь не могу определить компас в дюймах
У вас разные проблемы.
Во-первых, если вы используете cc3d, поддержка mag была отключена из-за нехватки места. Сначала вам нужно создать свою собственную версию.
Во-вторых, вы должны открыть SE100, чтобы увидеть, есть ли у него настоящая HMC или эмулированная, основанная на QMC (дополнительную информацию по этой проблеме читайте сверху).
Раньше я использовал CC3D на процессоре F1, но из-за проблем перешел на F4 Revo.
и у меня проблема с этим контроллером.
У него есть встроенный компас, но из-за помех он был припаян, и я хочу использовать внешний. У моего SE100 настоящий HMC5983
Если у вас есть настоящая HMC, возможно, вам нужно назначить ресурс для I2C. Вы делали это?
Я, наверное, этого не делал.
Я думал, что подключение к i2c2 и выбор чипа HMC автоматически обнаружит его, например, барометр находится под i2c1 и автоматически его обнаружил
Я не эксперт, поэтому не знаю, нужно ли вам удалить компас, назначить ресурс и т. Д. Спросите в rcgroups или в чате Betaflight Slack, я почти уверен, что другие вам помогут. GitHub больше предназначен только для разработки.
@ 1337flite @artempolikarpov один вопрос, вы включаете GPS на 5 В или 3,3 В? Моя прибыла сегодня и умерла, я запитал ее на 5В, не знаю, проблема ли в этом
@artempolikarpov Да вот тут подключал (у меня такой же ФК). Подключил к USB, работает, подключил липо … а GPS сдох. Я не знаю, подключили ли вы липо с подключенным USB. Это мой третий или четвертый GPS, мертвый за последние месяцы, поэтому я не знаю, что у меня не так
Когда я сказал «Rock Solid», я использовал INAV 1.90 RC2. У меня были опции «Удержание навигации» и «Удержание позиции», оба были включены. Я использовал Radiolink SE100 Gps / Mag. Он держался без особого движения, почти идеально!
Отправлено из почты https://go.microsoft.com/fwlink/?LinkId=550986 для Windows 10
От: andrejpodzimek [email protected]
Отправлено: пятница, 9 марта 2018 г., 18:47:19
Кому: betaflight / betaflight
Копия: Alan W. Farms Jr; Упоминание
Тема: Re: [betaflight / betaflight] Некоторые I2C MAG не работают (# 4531)
@alanfj https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Falanfj&data=02%7C01%7C%7Cae189e77e943475701d708d5861818e8%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636562360407302410&sdata=CXyNcQdNMspmdFP5tuOzkzlTG7ulvlrWR67DY37r3nU%3D&reserved = 0 Не могли бы вы уточнить, что вы подразумеваете под «Rock Solid»? Моя проблема с Betaflight в том, что у меня никогда не хватало смелости переключиться на удержание позиции просто потому, что удержание высоты не работает в Betaflight (# 3823 https://nam01.safelinks.protection.outlook.com/?url=https%3A % 2F% 2Fgithub.com% 2Fbetaflight% 2Fbetaflight% 2Fissues% 2F3823 и данные = 02% 7C01% 7C% 7Cae189e77e943475701d708d5861818e8% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636562360407302410 & SData = bu1f7rCZAdeTbgxUHhIQSFQp3bGnm5d8y50MPgoC37o% 3D & зарезервирован = 0 ) , и это довольно трудно представить себе держать позиции без высоты трюма. Итак, вы пробовали без удержания высоты? Или вы нашли способ обойти # 3823 https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fbetaflight%2Fbetaflight%2Fissues%2F3823&data=02%7C01%7C % 7Cae189e77e943475701d708d5861818e8% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636562360407302410 & sdata = bu1f7rCZAdeTbgSFMUHpIs Или, возможно, он работает с другими устройствами, кроме MS5611? Мне это очень любопытно, потому что удержание высоты — единственное, что мешает моим дронам GPS + mag + baro делать все эти потрясающие аэрофотоснимки с Betaflight.
—
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fbetaflight%2Fbetaflight%2Fissues%2F4531%23issuecomment-371977512&data=02 % 7C01% 7C% 7Cae189e77e943475701d708d5861818e8% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636562360407302410 & SData = i7lmJhytHgqdwGgeiWs8iEA372D6% 2BseHqiWxbfw7h7U% 3D & зарезервирован = 0 , или приглушить нить https://nam01.safelinks.protection.outlook.com/?url=https%3A%2F% 2Fgithub.com% 2Fnotifications% 2Funsubscribe-AUTH% 2FAcryEbOh3zHWOs3Zd6bJyZC9ZS-Ojiyfks5tcxSHgaJpZM4QZNNl и данные = 02% 7C01% 7C% 7Cae189e77e943475701d708d5861818e8% 7C84df9e7fe9f640afb435aaaaaaaaaaaa% 7C1% 7C0% 7C636562360407302410 & SData = f8bYYcqQn5vHGts6iR9oJjewfu0e7gXd5zqBm2s6lSw% 3D & зарезервирован = 0 .
Если можно, на eBay есть продавец, который снова продает оригинальные платы gy-271 / HMC5883L. Я только что взял два, чтобы избавиться от этой проблемы и наконец подняться в воздух. Я следил за многочисленными усилиями здесь, чтобы попытаться заставить любую из моих химер / замен qmc работать с Omnibus v3 pro (ранее v3 non SD) с нулевым практическим прогрессом с моей стороны. Я понимаю, почему @jflyper сказал, что это будет адресах производителя и т. Д. Эта проблема усугубляется полным отсутствием понимания поставщиками между старым hmc и новым qmc (для них это всего лишь виджет). Я собираюсь посмотреть, смогу ли я найти катушку с микросхемами hmc, и я построю (продам) несколько оптовых плат для расширений FC i2c, ad hoc. У меня есть вопрос к моим друзьям по поводу их исследования новых плат gy-271. Обнаружил ли кто-нибудь разницу в ИС новой платы и старой? QMC разработан как капля в замене пакета у всех поставщиков? Лучшее, что я мог сказать, это так.
Спасибо всем за вашу тяжелую работу и преданность делу!
-А
@McGiverGim
Привет, я прочитал всю эту ветку, чтобы попытаться заставить мой Mag работать в Betaflight 3.3, но безрезультатно.
Я прилагаю фотографию своей платы GPS Puck, но на чипе Mag нет маркировки, поэтому я не уверен, что это проблемный чип QMC5883.
Я думаю, что правильно настроил ресурсы I2C для RX3 и TX3, вот выдержка из моего списка ресурсов в CLI:
ресурс SERIAL_TX 1 A09
ресурс SERIAL_TX 6 C06
ресурс SERIAL_RX 1 A10
ресурс SERIAL_RX 6 C07
ресурс ИНВЕРТОР 3 C09
ресурс ИНВЕРТОР 6 C08
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
GPS работает нормально, я получаю значения SATS, долготы и широты, так что PUCK включен и работает.
Я абсолютно счастлив купить другую шайбу, совместимую с Betaflight, поскольку я не хочу использовать iNav, так как после попытки я не могу настроить свой квадроцикл для полета, как это происходит в Betaflight.
Если кто-то может порекомендовать компас GPS, который будет работать со стандартным Betaflight и может нацеливаться, как указано ниже, я куплю его, чтобы избавить меня от попыток справиться с проблемами, выходящими за рамки моего текущего уровня знаний и понимания, я был бы очень признателен.
Betaflight / OMNIBUSF4SD (OBSD) 3.3.0 2 марта 2018 г. / 03:56:35 (177472b4f) API MSP: 1.37
@BlueFishUK Я не могу сказать, какая это микросхема на картинке, но поведение, которое вы описываете, очень похоже на мои микросхемы QMC.
Какой у тебя ФК?
Если это какой-нибудь старый GPS M8N, предполагается, что они будут поставляться с HMC5883L, но, как и каждая плата, оснащенная HMC, у нового производителя будет чип QMC. Из того, о чем мы здесь говорили, я понимаю, что QMC будет иметь другую схему адресации, чем гомогенная ИС HMC. Мне не удалось заставить QMC работать на моей плате F4, было меньше работы искать повсюду настоящую плату HMC5883L (лазерная надпись гласит L8832012>, QMC всегда начинается с DA из того, что я видел). На eBay есть ОДИН продавец, но я не думаю, что ребята хотели бы, чтобы я публиковал ссылки на eBay. Купил два, отлично работают.
@BlueFishUk код для «стандартного» QMC5883 был объединен в мастер, готовый для версии 3.4. Я вижу в вашем сообщении, что вы используете версию 3.3. Если хотите, попробуйте ночную версию, чтобы убедиться, что она работает: https://ci.betaflight.tech/
Проверьте команду «status», чтобы узнать, распознан ли компас.
Если вам нужен компас, который работает напрямую, Beitian bn-880 работает с HMC5883, а RadioLink TS100 имеет QMC5883 и будет работать с 3.4 или любой другой ночью. Я предпочитаю второй, первый был чувствителен к помехам от моего Runcam Split 2, но если у вас обычная камера, обе будут работать без проблем.
Я делаю несколько тестов с компасом IST8310, но ось X не работает, но если вы хотите попробовать узнать, распознается ли она, я могу дать вам прошивку для нее.
@avidtech My FC — это [email protected], поскольку я хочу улететь как можно скорее.
@McGiverGim Я с удовольствием протестирую ночную версию, но я не уверен, что делать по ссылке, которую вы отправили, я не вижу возможности загрузить файл HEX, я новичок в этой области и пока что скачал и установил только стабильные версии через интерфейс Betaflight. Я нашел устройство Beitian BN-880 и закажу один из них, если avidtech не может мне помочь по какой-либо причине.
Есть идеи, когда 3.4 выйдет как стабильная?
Я должен поблагодарить вас, ребята, за ваш вклад, преданность делу и широту знаний в этом сообществе, это просто потрясающе. Я надеюсь, что со временем я приобрету опыт, чтобы внести свой вклад и помочь другим.
@McGiverGim Большое спасибо, попробую позже и дам вам отзывы
Хорошо, я завершил свои тесты на обоих устройствах GPS. GPS отлично работает на 3.3 и 3.4, но Mag не работает ни на одной из версий ни для одной из шайб GPS. На одной шайбе с версией 3.4 Betaflight сообщил о 4 ошибках I2C.
Я пробовал настройки mag_hardware на AUTO, HMC5883 и QMC5883 на 3.3 и 3.4.
Чтобы быть уверенным, что я не схожу с ума и не упускаю что-нибудь глупое, вот настройки моих ресурсов:
ресурс SERIAL_TX 1 A09
ресурс SERIAL_TX 6 C06
ресурс SERIAL_RX 1 A10
ресурс SERIAL_RX 6 C07
ресурс ИНВЕРТОР 3 C09
ресурс ИНВЕРТОР 6 C08
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
И моя настройка get mag:
получить маг
align_mag = ПО УМОЛЧАНИЮ
Допустимые значения: DEFAULT, CW0, CW90, CW180, CW270, CW0FLIP, CW90FLIP, CW180FLIP, CW270FLIP.
mag_bustype = I2C
Допустимые значения: NONE, I2C, SPI, SLAVE
mag_i2c_device = 2
Допустимый диапазон: 0–3
mag_i2c_address = 0
Допустимый диапазон: 0 — 119
mag_spi_device = 0
Допустимый диапазон: 0–3
mag_hardware = HMC5883
Допустимые значения: AUTO, NONE, HMC5883, AK8975, AK8963.
mag_declination = 0
Допустимый диапазон: -18000 — 18000
magzero_x = 0
Допустимый диапазон: -32768 — 32767
magzero_y = 0
Допустимый диапазон: -32768 — 32767
magzero_z = 0
Допустимый диапазон: -32768 — 32767
Я надеялся, что второй блок GPS будет работать, надеясь, что первый был неисправен, может быть, оба неисправны! Я запитываю их 5V, что я считаю правильным.
Мне нужно сделать перерыв, так как мне нужно подумать, что делать дальше, я люблю это хобби
Я только что установил iNav с той же проводкой без изменений, и Mag сразу заработал отлично. Теперь я запуталась: -0
@BlueFishUK Не ранее заявил
РЕДАКТИРОВАТЬ: Я добавлю, что я НЕ пробовал последнюю ночную сборку. Мне нужно переустановить cygwin и скомпилировать. У меня нет на это времени до следующей недели.
@BlueFishUK
Я попробовал несколько своих QMC (все платы GY-271) на распи, и три из них имеют разные подписи адреса при развертке / автоопределении диапазона. У меня есть информация, которую я могу опубликовать в более ранней теме (# 1582) для @jflyper и других, чтобы узнать о проблеме с барометром I2C на наших досках. но до тех пор, пока у вас есть правильные ресурсы I2C, вы застряли с проблемой адреса QMC, которая должна быть полностью решена в ночной сборке 3.3.0. Я буду придерживаться RC, так как он решил для меня другие проблемы с заменой MS5611 baro. Удачи вам, если вам нужна помощь, не стесняйтесь спрашивать, я посмотрю, смогу ли я воспроизвести ваши результаты с тем, что у меня есть на скамейке!
Я бы определенно попробовал ночную сборку, прежде чем вы сделаете что-нибудь еще. Особенно, если он работает на iNav, как и все / большинство QMC.
Пожалуйста, ознакомьтесь с другими проблемами, некоторые из которых более актуальны для вашей проблемы, чем другие. Может быть, вы найдете что-нибудь полезное, специальное. # 3605 # 3853 # 1582
РЕДАКТИРОВАТЬ: Я не могу заставить свой компилятор работать на всю жизнь, проблемы с маршрутизацией моей среды и команды не найдены. Извините, BlueFish, может быть, позже.
@BlueFishUK, если iNav работает, то его надо как-то детектировать. Что обнаруживает MAG в iNav, команда status
? Если он определяется как QMC, он должен работать в Betaflight с ночной сборкой. Если он определен как HMC, возможно, это QMC, использующий адрес HMC, и ему потребуется взлом моего сообщения (LONG_TIMEOUT и отключение разгона).
@McGiverGim @avidtech Привет, ребята, ниже приведены мои данные о состоянии интерфейса командной строки iNAV, никаких изменений в кабелях или оборудовании и на том же FC между iNav и Betaflight 3.3 и 3.4, а также сопоставление ресурсов RX и TX3 с I2C SDA и SCL в CLI было идентичным. iNAV работает Betaflight не распознает Mag.
положение дел
Время работы системы: 20 секунд
Текущее время: 0000-01-01T00: 00: 00.000 + 00: 00
Напряжение: 0,0 В (батарея 1S — НЕТ)
Тактовая частота ЦП = 168 МГц, GYRO = MPU6000, ACC = MPU6000, BARO = BMP280, MAG = HMC5883
Системные часы STM32:
SYSCLK = 168 МГц
HCLK = 168 МГц
PCLK1 = 42 МГц
PCLK2 = 84 МГц
Состояние датчика: GYRO = OK, ACC = OK, MAG = OK, BARO = OK, RANGEFINDER = NONE, OPFLOW = NONE, GPS = OK
SD-карта: не вставлена
Размер стека: 6144, адрес стека: 0x10010000
Ошибки I2C: 0, размер конфигурации: 3382, максимально доступная конфигурация: 131072
Использование канала АЦП:
АККУМУЛЯТОР: настроен = АЦП 2, используется = АЦП 2
RSSI: настроен = АЦП 3, используется = нет
ТОК: настроен = АЦП 1, используется = нет
ВОЗДУШНАЯ СКОРОСТЬ: настроено = нет, используется = нет
Системная нагрузка: 0, время цикла: 2004, частота PID: 499, частота приема: 49, частота системы: 9
Флаги выключения постановки на охрану: ANGLE ACC RX CLI
Он определяется как HMC, поэтому, возможно, это QMC, имитирующий HMC. Какой у вас ФК? Может быть, я смогу собрать тестовую версию с хаком, чтобы посмотреть, работает ли он.
Это Omnibus F4 OSD V5, и на диаграмме показано, как он подключен с использованием TX1 и RX1 для настройки GPS, которая работает, а RX3 и TX3 переназначены как ресурс I2C с помощью следующих команд CLI
ресурс serial_TX 3 нет
ресурс serial_RX 3 нет
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
@McGiverGim После того, как я проведу тесты и сообщу об этом. Спасибо за вашу помощь.
Прошивал вчера прошивку? Решение состоит в том, чтобы использовать кнопку / контакты загрузки для входа в режим загрузчика, а затем прошить его.
Да, я прошил его, и теперь я не могу подключиться из Windows 10 ни в обычном режиме, ни в режиме загрузчика.
Вы говорите, что нажатие кнопки загрузки FC (которая входит в FC в режиме DFU) не работает?
Моя кнопка загрузки была сломана из-за чрезмерного использования, я удалил ее и теперь прошил еще один шестнадцатеричный символ, и я могу снова подключиться.
Хорошо, вчера я загрузил одну прошивку с «ошибкой», но сегодня утром я снова загрузил ее из более ранней версии кода без ошибки. Вы можете установить его, чтобы увидеть, работает ли он.
Я могу нормально подключиться, используя новую сборку, но все еще не обнаруживаю Mag. Пробовал AUTO, HMC5883 и QMC5883 в настройке mag_hardware. Я очень ценю вашу помощь, но, пожалуйста, не чувствуйте себя обязанным продолжать, поскольку я знаю, сколько времени вы на это вкладываете. Я не уверен, актуально ли это, но с этим кодом я получаю 7 ошибок I2C.
Время работы системы: 25 секунд
Напряжение: 0 * 0,1 В (батарея 0S — НЕТ)
Частота процессора = 168 МГц, Vref = 3,31 В, температура ядра = 35 ° C, GYRO = MPU6000, ACC = MPU6000
Размер стека: 2048, адрес стека: 0x1000fff0
Ошибок I2C: 7, размер конфигурации: 2287, максимально доступная конфигурация: 16384
ЦП: 5% , время цикла: 125, частота гироскопа: 8000, частота приема: 49, частота системы: 10
Флаги отключения постановки на охрану: ANGLE CLI MSP
получить маг
align_mag = ПО УМОЛЧАНИЮ
Допустимые значения: DEFAULT, CW0, CW90, CW180, CW270, CW0FLIP, CW90FLIP, CW180FLIP, CW270FLIP.
mag_bustype = I2C
Допустимые значения: NONE, I2C, SPI, SLAVE
mag_i2c_device = 2
Допустимый диапазон: 0–3
mag_i2c_address = 0
Допустимый диапазон: 0 — 119
mag_spi_device = 0
Допустимый диапазон: 0–3
mag_hardware = АВТО
Допустимые значения: AUTO, NONE, HMC5883, AK8975, AK8963, QMC5883.
mag_declination = 0
Допустимый диапазон: -18000 — 18000
mag_calibration = 0,0,0
Длина массива: 3
Не волнуйся. Я с радостью помогу кодить, если смогу. Но я не эксперт, поэтому не знаю, доберусь ли я до чего-нибудь. В iNav работает, сравню, не увижу ли что-то другое. Правильно ли вы разместили команды ресурсов?
ресурс serial_tx 3 нет
ресурс serial_rx 3 нет
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
Спасибо, это то, что я назначаю с помощью команды ресурсов
@BlueFishUK последняя попытка …
Сравнивая iNav с Betaflight, единственная «большая» разница в драйвере состоит в том, что iNav несколько раз пытается определить компас в цикле. Betaflight делает это только один раз. Я добавил эту «функцию» в Betaflight, но я не уверен, что это решит вашу проблему, но, возможно …
Вот и прошивка:
https://drive.google.com/drive/folders/1ghWTgPvPbLoj6o98p2HN_blOW7Doh-Ig?usp=sharing
Если у вас это не сработает, думаю, я не могу вам помочь. Разница должна быть не в драйвере, а у меня нет оборудования или инструментов для поиска проблемы.
Кто-нибудь решил проблему?
У меня проблема точно такая же. Магнитометр распознается, но значения не опускаются ниже нуля. После калибровки получаются большие значения.
В cleanflight такая же проблема. В iNav все работает нормально, распознается как HMC5883 и нормально калибруется.
Пользуюсь MiniAP GPS, в котором добавил подтягивающие резисторы по линии I2C, чтобы компас начал определяться
@ denis73 ваш mag работает правильно, это ошибка связи с конфигуратором, но mag работает. В ночных сборках это исправлено, но, как я уже сказал, вы можете использовать его без проблем, потому что не работает только при подключении к конфигуратору.
@McGiverGim Сегодня вечером попробую прошивку, спасибо. Я получил некоторую обратную связь от Teralift о RC-группах, после того, как я проверил напряжение между SC и SDA и землей при включении, оно составило ноль вольт.
Он мне посоветовал следующее, я жду поставки резисторов и тоже попробую.
Установите подтягивающие резисторы 2K2 между SCL и 3V3 и между SDA и 3V3.
@BlueFishUK FYI Я думаю, что наконец-то получил свою работу, и я использую очень похожую настройку, что и упомянутые в этой теме. Вот только что снятое мной видео с описанием моей проблемы. Что в итоге заставило его работать, так это копирование и вставка некоторых из ваших настроек, которые вы перечислили здесь. Я также подключил странную установку резистора 2k2 3v3 по запросу https://youtu.be/n4JidJXsJPU
Посмотрите это видео, чтобы увидеть, как я добавил 2 дополнительных компонента, а затем вот мой результат: https://gist.github.com/coreysnyder/260603a2d93b1432ccff7f3cf89e7f9b
Вот его фотография.
Конечно, я еще не откалибровал его и не убедился, что он знает, где север … но тот факт, что я получаю данные датчиков, которые меняются, когда я вращаю компас, я думаю, что он действительно работает. Следующий шаг — установить его, откалибровать и убедиться, что он работает. Надеюсь, это вам тоже поможет!
Вот моя схема подключения без двух добавленных резисторов:
@BlueFishUK Также я хотел спросить, поскольку вы используете ту же плату FC:
- Если ваш экран GPS в Betaflight «перезагружается» каждую секунду, данные 3D-блокировки и карты очищаются и перезагружаются. Мне было интересно, было ли это из-за того, что что-то подключено или плохо настроено, или это происходит со всеми.
- Как вы подключили интеллектуальное аудио передатчика.
- UART1 = Crossfire
- UART3 = компас
- UART6 = GPS
- ?? = TBS Smart Audio?
Также вот документ Google, который я сделал, пытаясь отслеживать все, что люди рассказывали мне о том, как заставить это работать: https://docs.google.com/document/d/1T1sWsNB3dv1kif2I2h7aW-8At4Mf3ymNyZM35nRl6C4/edit?usp=sharing
Дополнительные вопросы для всех: Страница GPS в конфигураторе betaflight мигает каждую секунду.
- Один человек сказал, что на омнибусе F4 pro v3 они перевернули TX6, к которому я припаял мой GPS RX / TX. Это правда? Что мне нужно с этим делать? Если бы он был перевернут, я бы по-прежнему отображал данные GPS в Betaflight?
@BlueFishUK
Извините за запоздалый ответ, товарищ. Я готов был добавить полнофункциональный омнибус в свой новый EFXtra, когда он появится сегодня. ✈️
В худшем случае, если вы все еще боретесь с программной стороной дела, эта быстрая смена оборудования должна помочь вам разобраться. Я возился с вариантом QMC, который у меня есть, находя смешанные результаты для данных ожиданий в зависимости от цели (не только BF или даже программное обеспечение для полета). Как бы я ни ценил здесь блестящие и преданные своему делу умы, ориентированные на программное обеспечение, оборудование всегда будет моим препятствием, так что я в этом не разбираюсь. Тем не менее, я нашел старую плату 3v3 (GY-273?) L883 2012 mag. Я распаял пакет горячим воздухом и заменил пакет QMC на плате GY-271, и вуаля, PnP 5v mag в BF 3.3 примерно за 5 минут, менее чем за 5 долларов. Работа должна быть легкой для вашего устройства GPS.
@coreysnyder Я смотрел
Если ваш магнит все еще не обнаружен, сделайте это
set mag_i2c_device = 2
Я только что попробовал тег v3.3.1 и master
head с хаками, которые пробовал раньше, но мой компас по-прежнему работает только в iNav, а не в Betaflight. Доступны ли какие-либо из новых хаков, предложенных выше, в ветке / репозитории для исправления? Я хотел бы потратить день или два на эксперименты с моими контроллерами OMNIBUSF7V2
и ANYFCF7
, к которым подключено устройство, поэтому я предпочитаю код двоичным файлам.
@coreysnyder извиняется за задержку с ответом, но попытка решить эту проблему поместила меня в реабилитационный центр на неделю 😀 Я уничтожил 2 совершенно новых FC и одну шайбу, но со дня на день прибывают новые @jflyper любезно помогает мне, и я собираюсь попробовать подтягивающие резисторы. Ваше видео было полезно, так как я не думаю, что правильно подключил свое, возможно, именно так я заблокировал шайбу.
Как только я все это настрою, я отвечу на ваши вопросы и дам вам знать, как у меня все работает.
Я подключаю smartaudio к выводу светодиода, я подробно рассмотрю все детали и настройки интерфейса командной строки для этого, когда все будет готово.
Скрестив пальцы, мы все рассортируем, чтобы летать на большие расстояния!
@BlueFishUK Я брошу эту информацию сюда, чтобы, если кто-то еще
Купил GPS: Holybro Micro M8N. Сначала я столкнулся с проблемами, когда MAG / Compass не распознавался как датчик. Это было исправлено путем пайки схемы повышающего резистора 3v3 2k2 для подачи напряжения на схему. Затем я начал переключать значения в CLI для mag (используя некоторые настройки @BlueFishUK ), пока он не появился как датчик. Я подумал: «ОТЛИЧНО! Это работает», но даже тогда я получал совершенно ненадежные результаты чтения компаса. Это «HMC5983L», который не входит в число перечисленных 5 или около того типов в команде CLI. Я думаю, что наиболее близким является «HMC5883», который выбирает автоматически, но, может быть, там есть проблема? Юрген обнаружил некоторую полезную информацию: «Технические данные от Honeywell показывают, что ваша магнитола имеет гораздо более высокую выходную частоту 220 Гц по сравнению с HMC 5883, которая имеет выходную частоту 75 Гц. Также тактовая частота i2C вашего мага составляет 3400 кГц по сравнению с 400 кГц HMC5883. Это может быть причиной ваших проблем ». Услышав это, я практически отказался от того, чтобы магнит работал должным образом. Я тестировал сборку BF, которая использует другую технику для определения вашего курса вместо компаса, и она неплохо работает.
@coreysnyder вы говорите, что MAG автоматически определяется как HMC5883, но вы получаете странные значения. Не могли бы вы добавить снимок вкладки датчиков в конфигураторе, перемещая МАГ, чтобы посмотреть, как это выглядит?
@McGiverGim Вот видео, на котором я показываю вкладку датчиков, когда я меняю ориентацию компаса. https://youtu.be/uadsVpOe6EU Если вам нужны более структурированные данные, дайте мне знать.
@coreysnyder В вашем видео я вижу две вещи:
- Во-первых, нет отрицательных чисел. Вы используете код мастера? Несколько дней назад была устранена ошибка.
- Во-вторых, значения больше единицы, что тоже странно. После решения первой задачи будет здорово, если вы сможете использовать ведение журнала модема в конфигураторе для экспорта некоторых значений в Excel.
@coreysnyder @jflyper Привет, ребята, сегодня доставили мою новую шайбу, основываясь на вашем видео и вашем совете jpflyer, правильно ли выглядит проводка ниже, прежде чем я закрою еще один блок GPS?
@BlueFishUK Мне кажется. Я бы просто удостоверился, что вы по умолчанию подаете на эту линию только 3 В, иначе все должно быть в порядке.
Эврика, наконец, теперь я вижу свой Mag благодаря @jflyper и @coreysnyder, но компас, когда я указываю стрелку GPS на 0 градусов относительно севера, выходит за пределы линии в Betaflight и вращается на 1 градус в секунду или около того. У меня также есть пульсирующий экран GPS, например @coreysnyder.
Могут ли пульсации и движение Mag быть из-за наличия подтягивающих резисторов на моем FC, а не в шайбе GPS, как предложил @jaisor ?
Я не уверен, что делать дальше, чтобы заставить его работать, я выполнил калибровку и повернул на 360 градусов по всей оси.
Посмотрите это видео, чтобы узнать, как движется Mag, когда коптер неподвижен, пульсирует экран GPS и мои настройки Get Mag. https://youtu.be/V93uxlUqQio
@BlueFishUK Пульсинг не имеет ничего общего с подтягиваниями 3 на 3. Я проверил это, отключив все это, и это все еще происходит. Какой Mag находится на устройстве GPS? Надеюсь, не HMC5983L. Я считаю, что мерцание связано с тем, что данные поступают с другой скоростью, чем того ожидает Betaflight.
@McGiverGim Я использую код из ветки 3.4.0 для «Rescue Mode», который вы можете (см. Здесь) [https://github.com/dbasch/betaflight/tree/gps_rescue_pid]. Я сомневаюсь, что они полностью обновлены с помощью master, но я предполагаю, что могу установить master как удаленный локально и внести эти изменения? Я никогда не использовал функцию tethering logging
но если вы можете связать меня с ней, я могу дать ей вихрь, когда у меня будет время. К сожалению, я буду отключен от сети на несколько недель, начиная с завтрашнего дня, но я вернусь!
@coreysnyder Я не уверен, что такое Mag в шайбе GPS, на чипе написано A983 2623.
@coreysnyder ветка https://github.com/dbasch/betaflight/tree/gps_rescue_pid, которую вы мне отправляете, это
слишком старый. Патч, о котором я говорю: https://github.com/betaflight/betaflight/pull/5451, который был объединен в 3.3.1 и отсутствует в вашей ветке. Вы уверены, что ваша прошивка из той ветки?
@BlueFishUK A983 — это HMC5983, теоретически совместимый с HMC5883. Когда квадроцикл движется, как на видео, это иногда происходит из-за неправильной настройки MAG ALIGN. Правильное ли направление (север, юг, восток, запад) показывает конфигуратор в начале?
@McGiverGim Я выровнял стрелку своей GPS-шайбы так же хорошо, как я могу, рядом с ручным компасом, указывающим на север 0 градусов, и несколько раз включил мой FC и шайбу, и каждый раз курс в Betaflight поворачивается от 0 градусов до 176 градусов и останавливается там (см. рис. ниже)
Учитывая, что я нахожусь в помещении, и магнитный чип может немного не совпадать со стрелкой на шайбе, похоже, что я нахожусь на 180 градусов, где четверка, указывающая на север, показывает юг в Betaflight. Их команды интерфейса командной строки настраивают азимут на 180 градусов?
На вкладке конфигурации у вас есть mag align. Вы должны посмотреть на магнитный чип, обычно он не совмещен со стрелкой.
@McGiverGim Я установил для mag_align на вкладке конфигурации значение CW 270 градусов, и теперь он работает, когда я указываю на север, который отображается в конфигураторе Betaflight!
Эта команда меняет только ориентацию магнита? Повлияет ли это на летные характеристики?
@McGiverGim, спасибо, я думал, что он у меня есть, но когда я указываю квадроцикл на восток на 90 градусов, он показывает запад на 270 градусов в Betaflight. arrrrgh sooo close, мне нужно повторно откалибровать после изменения этого параметра?
Нет, это хорошо, но для этого не нужно. Я полагаю, вы не правы. Может быть, у вас есть магнитный флип.
@McGiverGim Я установил параметр на CW 270 Flip, и он работает Я не могу поверить в это и поблагодарить вас, @jflyper, @coreysnyder и всех остальных, кто помог мне решить эту проблему.
Я очень-очень благодарен и взволнован, что смог завершить свою первую сборку на длинные дистанции и протестировать ее в полевых условиях.
Здравствуйте и спасибо за работу над интеграцией QMC5883! = D
Я скомпилировал 3.4, и мой QMC5883 был обнаружен, но теперь у меня есть пики в показаниях магнитного поля.
FC — это клон Omnibus F4 SD.
МАГ откалиброван и север кажется северным, квадрокоптер движется правильно на вкладке настроек, за исключением сбоев
МАГ неисправен?
Я не совсем уверен. Я видел эту проблему в других журналах, но чаще. Вы откалибровали магнит? -1.06 кажется слишком большим.
Да, есть, питание от батареи с помощью команды стика.
Что-то я упустил, нужно что-то патчить или должен сделать мастер?
теперь, когда он «разогрелся», вроде нормально … хммм он будет так летать = — |
Нет, хозяин в порядке. Возможно, это неизвестная ошибка. Завтра тестирую свой QMC5883.
Если я могу что-то протестировать или вам нужны дополнительные данные, пожалуйста.
Как вы думаете, там все нормально? Спереди под камерой?
Мне это кажется хорошим 😉
Так вы свой QMC5883 тестировали?
Я получаю боулинг …
Да, забыл прокомментировать. Я протестировал свой, и он работал нормально.
@jflyper Возвращаясь к этому через некоторое время, я все еще смущен вашим комментарием выше:
@andrejpodzimek Как я уже отмечал в предыдущем комментарии, я думаю, что вы установили некоторое значение предделителя спуска для времени.
И … у вас был логический анализатор и dss? Я бы не стал заниматься подобным с подходящими измерительными приборами. Это просто пустая трата времени на догадки и полуслепой взлом.
Я наконец выяснил, что такое значение прескалера, но еще слишком много вещей, которые я вообще не понимаю. Итак, я продолжаю с другими глупыми вопросами.
IIUC, предварительный делитель — это знаменатель, который делит входную тактовую частоту на другую частоту, и последняя частота должна быть примерно 6,7–13,3 МГц или 9–12 МГц (источники различаются). Какая частота на входе? Это часы MCU? Так что, если у меня F7 216 МГц, можно быстро предположить, что нужно установить предварительный делитель на 20, чтобы получить 10,8 МГц, частоту в допустимом диапазоне. К сожалению, исходя из определений HAL в lib/main/STM32F7/Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f745xx.h
около строк 8979–8981, я думаю, что значение предварительного делителя занимает только 4 бита в регистре. Так что я могу установить максимум 15. :смущенный:
Кроме того, я не совсем уверен, что делает нулевое значение предварительного делителя. I2C_HandleTypedef::Init::Timing
, который входит в регистр синхронизации, устанавливается в 0x00500D1D
(800 кГц) или 0x00500C6F
(400 кГц), поэтому 4 бита высшего порядка равны нулю.
Регистр времени отличается в iNav , но его часть предварительного
- 100 кГц:
0x60100544
← Ненулевое значение предварительного делителя! - 200 кГц:
0x00A01EDF
- 400 кГц:
0x00A01B5B
- 800 кГц:
0x00401B1B
Итак, следует ли мне попытаться скопировать и вставить значение регистра синхронизации 400 кГц из iNav в Betaflight? Или что-то еще, с ненулевым предделителем? Прежде чем приступить к еще одному сеансу работы с осциллографом, я просто пытаюсь понять, что мне на самом деле нужно настроить и проверить. :вопрос:
Наблюдаю ту же проблему. У меня есть GPS-модуль Holybro Micro M8N со встроенным цифровым компасом HMC5983L.
На OMNIBUSF4V3 1.9.1 под управлением INAV МАГ работает без проблем. Он определяется как HMC5883.
На OMNIBUSF4SD (та же физическая плата FC) с Betaflight 3.3.2 MAG не обнаруживается.
Вот изменения, которые я сделал по сравнению со стандартной конфигурацией:
resource SERIAL_TX 3 NONE
resource SERIAL_RX 3 NONE
resource I2C_SCL 2 B10
resource I2C_SDA 2 B11
Не работает, даже если я заставляю set mag_hardware = HMC5883
@branob вы уверены, что это HMC5883? Эта проблема обычно возникает из-за того, что QMC5883 действует как HMC5883. Вы видите текст чипа MAG?
Да. Это не первый раз, когда в описании говорится, что HMC, а в конце — QMC, который действует как HMC (и, таким образом, определяется iNav как HMC).
Я не уверен, что понимаю, о чем вы говорите. Вы хотите сказать, что мой GPS / MAG — это подделка QMC? На основании чего вы делаете такой вывод?
Я купил его на авторитетном сайте, у меня нет оснований полагать, что это не настоящий Holybro GPS M8N с HMC5983L. При осмотре устройства ничто не указывает на то, что оно не подлинное.
Можете ли вы окончательно сказать, что Betaflight работает с устройствами HMC5983L / HMC5883?
Нет, я не говорю, что это так. Только это возможность в зависимости от того, что вы проверили, и результатов. Может быть, и нет, и проблема в другой части, но если вы откроете его, вы будете уверены, так оно или нет.
И да, Betaflight работает (если где-то бага нет) с HMC5883 без проблем. Является ли компас наиболее используемым, поэтому он есть у многих пользователей.
Вот мой модуль. Описание на MAG (микросхема рядом с разъемом справа) — A983 2327
@branob, значит, это HMC5983, и он кажется такой же шайбой, как @BlueFishUK, если я не ошибаюсь, ему нужно было припаять два резистора, чтобы заставить его работать. Сообщения с проблемой и обсуждение — это некоторые сообщения, вернитесь к некоторым сообщениям в этом обсуждении, и вы их увидите.
Ладно, я могу попробовать. Но все же мне интересно, чем отличается от INAV? В INAV работает тот же дрон, тот же FC, тот же MAG, никакие другие изменения, кроме перепрошивки с INAV, не работают. Нет подтягивающих резисторов.
Отличий много, начиная со скорости шины I2C. В BF он работает на 800, а iNav — на 400. iNav по умолчанию активировал PULL UP программно, BF отключил его. Может быть, с некоторыми изменениями в коде вы сможете заставить его работать в BF, но у меня нет этого журнала, поэтому я не могу вам помочь.
Хм, было бы интересно попробовать подтягивание SW в BF, если это вариант … придется посмотреть код.
Итак, наконец, у меня было успешное обнаружение компаса в Betaflight, достигнутое путем применения следующего патча к v3.3.3:
diff --git a/src/main/drivers/bus_i2c_hal.c b/src/main/drivers/bus_i2c_hal.c
index e3bc13da9..97e6ba9ec 100644
--- a/src/main/drivers/bus_i2c_hal.c
+++ b/src/main/drivers/bus_i2c_hal.c
@@ -32,7 +32,7 @@
#include "drivers/bus_i2c.h"
#include "drivers/bus_i2c_impl.h"
-#define CLOCKSPEED 800000 // i2c clockspeed 400kHz default (conform specs), 800kHz and 1200kHz (Betaflight default)
+#define CLOCKSPEED 400000 // i2c clockspeed 400kHz default (conform specs), 800kHz and 1200kHz (Betaflight default)
// Number of bits in I2C protocol phase
#define LEN_ADDR 7
@@ -261,9 +261,9 @@ void i2cInit(I2CDevice device)
if (pDev->overClock) {
// 800khz Maximum speed tested on various boards without issues
- pHandle->Init.Timing = 0x00500D1D;
+ pHandle->Init.Timing = 0x00401B1B; // magic number from iNav
} else {
- pHandle->Init.Timing = 0x00500C6F;
+ pHandle->Init.Timing = 0x00A01B5B; // magic number from iNav
}
pHandle->Init.OwnAddress1 = 0x0;
diff --git a/src/main/drivers/bus_i2c_impl.h b/src/main/drivers/bus_i2c_impl.h
index 42cb32751..372b28a14 100644
--- a/src/main/drivers/bus_i2c_impl.h
+++ b/src/main/drivers/bus_i2c_impl.h
@@ -24,7 +24,7 @@
#define I2C_SHORT_TIMEOUT ((uint32_t)0x1000)
#define I2C_LONG_TIMEOUT ((uint32_t)(10 * I2C_SHORT_TIMEOUT))
-#define I2C_DEFAULT_TIMEOUT I2C_SHORT_TIMEOUT
+#define I2C_DEFAULT_TIMEOUT I2C_LONG_TIMEOUT
#define I2C_PIN_SEL_MAX 4
diff --git a/src/main/target/common_fc_pre.h b/src/main/target/common_fc_pre.h
index 7ca03d37a..428ab5735 100644
--- a/src/main/target/common_fc_pre.h
+++ b/src/main/target/common_fc_pre.h
@@ -28,8 +28,8 @@
//#define SCHEDULER_DEBUG // define this to use scheduler debug[] values. Undefined by default for performance reasons
#define DEBUG_MODE DEBUG_NONE // change this to change initial debug mode
-#define I2C1_OVERCLOCK true
-#define I2C2_OVERCLOCK true
+#define I2C1_OVERCLOCK false
+#define I2C2_OVERCLOCK false
#ifdef STM32F1
#define MINIMAL_CLI
@@ -64,8 +64,8 @@
#ifdef STM32F7
#define USE_DSHOT
#define USE_ESC_SENSOR
-#define I2C3_OVERCLOCK true
-#define I2C4_OVERCLOCK true
+#define I2C3_OVERCLOCK false
+#define I2C4_OVERCLOCK false
#define USE_GYRO_DATA_ANALYSE
#endif
Вот и все, что касается автобусной стороны. Но теперь он, конечно, показывает нули, поэтому мне придется убрать расчеты усиления.
Хорошо, мне удалось получить некоторые ненулевые значения и успешную калибровку в Betaflight.
# get magzero
magzero_x = 268
Allowed range: -32768 - 32767
magzero_y = -162
Allowed range: -32768 - 32767
magzero_z = 39
Allowed range: -32768 - 32767
Но мне пришлось просто супер-некрасиво удалить весь код усиления:
diff --git a/src/main/drivers/compass/compass_hmc5883l.c b/src/main/drivers/compass/compass_hmc5883l.c
index 1a074a658..1e30bf22f 100644
--- a/src/main/drivers/compass/compass_hmc5883l.c
+++ b/src/main/drivers/compass/compass_hmc5883l.c
@@ -198,8 +198,8 @@ static void hmc5883SpiInit(busDevice_t *busdev)
}
#endif
-static int16_t parseMag(uint8_t *raw, int16_t gain) {
- int ret = (int16_t)(raw[0] << 8 | raw[1]) * gain / 256;
+static int16_t parseMag(uint8_t *raw) {
+ int ret = (int16_t)(raw[0] << 8 | raw[1]);
return constrain(ret, INT16_MIN, INT16_MAX);
}
@@ -217,9 +217,9 @@ static bool hmc5883lRead(magDev_t *mag, int16_t *magData)
// During calibration, magGain is 1.0, so the read returns normal non-calibrated values.
// After calibration is done, magGain is set to calculated gain values.
- magData[X] = parseMag(buf + 0, mag->magGain[X]);
- magData[Z] = parseMag(buf + 2, mag->magGain[Z]);
- magData[Y] = parseMag(buf + 4, mag->magGain[Y]);
+ magData[X] = parseMag(buf + 0);
+ magData[Z] = parseMag(buf + 2);
+ magData[Y] = parseMag(buf + 4);
return true;
}
@@ -235,12 +235,6 @@ static bool hmc5883lInit(magDev_t *mag)
int16_t magADC[3];
int i;
- int32_t xyz_total[3] = { 0, 0, 0 }; // 32 bit totals so they won't overflow.
- bool bret = true; // Error indicator
-
- mag->magGain[X] = 256;
- mag->magGain[Y] = 256;
- mag->magGain[Z] = 256;
delay(50);
@@ -269,25 +263,14 @@ static bool hmc5883lInit(magDev_t *mag)
delay(20);
hmc5883lRead(mag, magADC); // Get the raw values in case the scales have already been changed.
- // Since the measurements are noisy, they should be averaged rather than taking the max.
-
- xyz_total[X] += ((polarity == polPos) ? 1 : -1) * magADC[X];
- xyz_total[Y] += ((polarity == polPos) ? 1 : -1) * magADC[Y];
- xyz_total[Z] += ((polarity == polPos) ? 1 : -1) * magADC[Z];
-
// Detect saturation.
if (-4096 >= MIN(magADC[X], MIN(magADC[Y], magADC[Z]))) {
- bret = false;
break; // Breaks out of the for loop. No sense in continuing if we saturated.
}
LED1_TOGGLE;
}
}
- mag->magGain[X] = (int)(660.0f * HMC58X3_X_SELF_TEST_GAUSS * 2.0f * 10.0f * 256.0f) / xyz_total[X];
- mag->magGain[Y] = (int)(660.0f * HMC58X3_Y_SELF_TEST_GAUSS * 2.0f * 10.0f * 256.0f) / xyz_total[Y];
- mag->magGain[Z] = (int)(660.0f * HMC58X3_Z_SELF_TEST_GAUSS * 2.0f * 10.0f * 256.0f) / xyz_total[Z];
-
// leave test mode
busWriteRegister(busdev, HMC58X3_REG_CONFA, HMC_CONFA_8_SAMLES | HMC_CONFA_DOR_15HZ | HMC_CONFA_NORMAL); // Configuration Register A -- 0 11 100 00 num samples: 8 ; output rate: 15Hz ; normal measurement mode
@@ -296,12 +279,6 @@ static bool hmc5883lInit(magDev_t *mag)
delay(100);
- if (!bret) { // Something went wrong so get a best guess
- mag->magGain[X] = 256;
- mag->magGain[Y] = 256;
- mag->magGain[Z] = 256;
- }
-
hmc5883lConfigureDataReadyInterruptHandling(mag);
return true;
}
Кто-нибудь узнал, как заставить работать расчеты усиления? Они нужны? Компас показывает что-то, казалось бы, разумное на панели инструментов, хотя кажется, что он дрейфует и колеблется очень медленно (например, когда он направлен на север, он имеет тенденцию медленно поворачиваться на 10 ° вперед и назад в течение минуты или около того).
Кроме того, было бы здорово, если бы некоторые из этих параметров I2C настраивались (по крайней мере) через интерфейс командной строки, как в iNav.
Несколько недель назад, как и в iNav, убрали усиление HMC. Вы используете последнюю версию мастера?
Нет, я перебазировал свои хаки на тег v3.3.3
, так что это действительно может быть несколько недель назад.
Возьмите драйвер у мастера, и все готово.
Да, у меня работает драйвер от master
. Калибровка дала очень похожие числа. Итак, после ~ 6 месяцев экспериментов я мог наконец найти в себе смелость попробовать удержание компаса / рысканья или даже GPS. :улыбка:
Я думаю, что единственное, что вы можете протестировать, это GPS Rescue с последним мастером: D
GPS Hold не работает в Betaflight (в мастере удалено).
Это печально. : cry: А почему так? Разве его нельзя просто портировать с iNav, где он (по слухам) работает? Я хотел бы попробовать iNav один раз, но пока в нем нет DShot, я буду игнорировать его.
@McGiverGim Я не думаю, что GPS_RESCUE
может работать до тех пор, пока не будут разрешены # 6028 и # 6019. Когда компас наконец-то обнаружен, я вернулся ко всем другим дронам с компасом и понял, что компас никогда не работал в Betaflight (в гораздо более общем смысле, чем просто проблема с шиной I2C) и, следовательно, использовал режимы полета, требующие компаса. откровенно опасно. Если вы смотрите на север, а ваш компас поворачивается на юг и обратно каждые 2–3 минуты, это практически все равно, что просить об аварии.
@andrejpodzimek : Весь смысл GPS_RESCUE
том, что он устраняет необходимость в компасе, поэтому # 6028 будет полностью устаревшим в версии 3.4.
6019 также станет устаревшим, поскольку удержание позиции было удалено с 3.4.
будет ли исправление для mag HMC5883 включено в следующий выпуск Betaflight? … Я пытаюсь настроить Omnibus F7 pro … но контроллер не обнаруживает I2C
По идее HMC работает «из коробки». Проблема с QMC.
Он работает над INAV, но я не могу заставить его работать с BF
@McGiverGim Нет, HMC из коробки не работает на BF. Однако это работает на INAV. … вышеупомянутые исправления, надеюсь, решат проблему обнаружения BF HMC.
Я думаю, что вышеперечисленные патчи не будут включены. Я спросил, но по дизайну шина I2C имеет большой разгон, который устраняется этими изменениями.
То же самое, мой HMC5883 не работает с v3.4, надеюсь скоро это будет исправлено!
@McGiverGim : Я думал, что HMC5883 работает с Betaflight, но не QMC5883?
@mikeller да, работает. По крайней мере, некоторые из них. У меня один работает без проблем. Но некоторые сборки не работали под Betaflight и работали под iNav. Некоторые пользователи исправляют их с помощью подтягивающего резистора, но я недостаточно понимаю, чтобы знать, может ли это решение работать для всего программного решения.
@andrejpodzimek вы заставили его работать на какой-нибудь плате F7? У меня не получается заставить работать с хаком в матеке f722 …
@McGiverGim Доска, на которой у меня работает хак, — это Omnibus F7 v2.
@andrejpodzimek Хорошо, я думаю, мне не хватает временных магических чисел, я попробую еще раз.
Если используются внешние магазины, это может быть связано с подтягивающими резисторами. Некоторые платы и большинство датчиков не имеют физических резисторов. В этом случае необходимо активировать внутренние подтягивающие резисторы STM. Поскольку они составляют около 50 кОм, они не подходят для более длинных кабелей и работают только с датчиками, установленными на печатной плате, или с меньшей скоростью шины I2C. Рекомендуется использовать внешние подтягивания в диапазоне от 4,7 до 10 кОм.
@ MJ666 тема в том, что в iNav работает. Я не знаю, делает ли iNav какое-то мягкое подтягивание, но тот же самый магнит из коробки работает в iNav.
@andrejpodzimek в моем Matek F722 плата не загружается с изменениями MAG. Может я что-то не так делаю. У вас есть ветка с изменениями? Таким образом я могу сравнить их, чтобы увидеть, не сделал ли я что-то не так. Вы тестировали последний мастер с изменениями?
Последняя версия, которую я когда-либо тестировал со взломом, была 3.3. У меня есть дополнительное изменение, чтобы использовать слот для SD-карты для SmartPort (то есть, дополнительное определение таймера), но это не должно сильно измениться … Если он больше не работает с мастером, это звучит как много деления пополам.
@McGiverGim Для справки, это моя текущая разница с тегом v3.3.3
. Если я правильно помню, после того, как вы указали, что расчеты усиления уже были сброшены с master
, я просто взял головную версию драйвера mag в то время (~ 2 месяца назад) и скопировал ее в свою ветку коренится в v3.3.3
. Вот как появился этот конкретный diff.
Да, я безуспешно использовал эту разницу. Может, что-то изменилось или моя доска немного отличается от вашей. Если в какой-то момент вы протестируете его с какой-либо более новой версией, дайте мне знать.
Вы когда-нибудь заставляли M8Q-5883 работать в Betaflight? Подключил к своему Kakute F7 всеми кабелями, но индикатор GPS в BF даже не загорается …
Мне просто нужно направление по компасу, скорость GPS и расстояние. Компас, кажется, обнаруживается BF, но не GPS
Странно, стоит ublox M8, значит по идее должен работать. Здесь у нас проблемы с другим компасом, но до сих пор у нас не было проблем с каким-либо ublox GPS.
Вы уверены, что он правильно подключен? По словам Матека, это должно сработать …
Странно, стоит ublox M8, значит по идее должен работать. Здесь у нас проблемы с другим компасом, но до сих пор у нас не было проблем с каким-либо ublox GPS.
Вы уверены, что он правильно подключен? По словам Матека, это должно сработать …
Я подключил 5V к 5V и G к G на моей плате. RX и TX идут к R3 и T3 (я выбрал GPS для входа в Betaflight для UART 3), а SDA и SCL также идут к этим портам на плате.
Я также пробовал эти команды в CLS:
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
Но это тоже не сработало: / Что-нибудь еще я делаю не так? Компас распознается, и модуль также получает питание. Спасибо за помощь!
Вы подключили RX к R3 и TX к T3? Вы должны подключить его в обратном порядке: RX к T3 и TX к R3. Убедитесь в этом.
Я использую плату F7, я подумал, что мне не нужно их инвертировать, но я попробую это прямо сейчас.
Что ж, теперь работает! Большое тебе спасибо!
@Dustinhoefer : «Инверсия»
Я разбирался с проблемой неработающего магнитометра QMC5883L на Radiolink SE100 для клиента, использующего мой полетный контроллер Falcon 2.
Радиолинк переключился с Honeywell HMC5883L / HMC5983 на компас QST QMC5883L на их модуле GPS SE100, поскольку устройства Honeywell были сняты с производства.
QMC5883L основан на HMC5883L / HMC5983, потому что Honeywell лицензирует свою технологию для QST, однако регистры двух устройств совершенно разные.
Причина проблем с подключением к QMC5883L заключается в том, что есть аппаратная ошибка в версии «A» (DA 5883) этих устройств. Невероятно, но устройство QMC5883L (предположительно с адресом I2C: 0x0D) на самом деле будет отвечать на проверку идентификатора HMC5883L / HMC5983 (с использованием адреса I2C устройства Honeywell: 0x1E) с правильными байтами идентификатора HMC5883L / HMC5983: 0x48 0x34 0x33. Однако после этого он не будет реагировать на команды HMC5883L / HMC5983.
Естественно, полетный контроллер, проверяющий наличие HMC5883L / HMC5983 или QMC5883L с использованием идентификационных кодов устройства HMC5883L / HMC5983, не сможет определить, какое устройство подключено, поскольку QMC5883L ошибочно отвечает, что это устройство HMC5883L / HMC5983.
К счастью, эта аппаратная ошибка была исправлена в микросхеме QMC5883L ревизии «B» (DB 5883).
Далее к моему последнему посту. Оказывается, моя версия A (DA 5883) устройства QMC5883L на самом деле является HMC5983 (???), за исключением того, что, похоже, опрос бита готовности данных в регистре состояния работает некорректно. Удалите опрос битов готовности данных, и компас оживает.
С другой стороны, моя коммутационная плата QMC5883L с версией ревизии «B» (DB 5883) работает в соответствии с таблицей данных QMC5883L с совершенно другими регистрами.
Непонятно, мягко говоря.
Насколько мне известно, ревизия QMC компаса радиолиния — это специальная версия, которая эмулирует HMC, включая регистры. Он не имитирует его идеально, он был создан для другой четырехъядерной платформы и работал только с инструкциями / временем отклика и т.д., используемыми на другой платформе.
@ MartinL1 : Интересные выводы. Означает ли это, что можно выполнить эту работу для HMC5883 и QMC5883L (версии «A» и «B»), если сначала выполняется проверка идентификатора для QMC5883L, а затем проверяются на HMC5883 только микросхемы, не распознаваемые как QMC5883L?
@McGiverGim : Спасибо, что подняли эту проблему на форуме, он отметил, что что-то не так с QMC5883L.
Я постепенно начал подозревать, что была произведена какая-то специальная версия, просто жаль, что QST не смогли зафиксировать это в своей таблице данных, поскольку версии «A» и «B» — совершенно разные чипы.
@mikeller : Да, это должно быть возможно. К сожалению, QST использовал идентификатор чипа: 0xFF (который вместе с 0x00), вероятно, не является лучшим выбором для кодов идентификатора чипа. В версии «B» QMC5883L iNav просто проверяет, установлен ли регистр состояния на 0x00 во время инициализации, просто для уверенности.
Я собираюсь исследовать регистр состояния QMC5883L версии A еще немного, чтобы определить, действительно ли он вообще работает? Я сообщу о своих выводах.
Проблема с версией A в том, что она не работает и на частоте betaflight i2c. Вы можете увидеть несколько сообщений в этой теме, в которых говорится об этом. У меня он работал, но только для F4.
В прошлом у меня были проблемы с блокировкой компаса HMC5983 при тестировании прототипа полетного контроллера на базе ARM Cortex M4F по длинным 6-дюймовым кабелям с использованием шины I2C на частоте 400 кГц. Оказалось, что на компас повлиял микроконтроллер. резкая (спадающая) скорость переключения на шине I2C.
Раньше я использовал более медленный ARM Cortex M0 + для своих полетных контроллеров с HMC5983 на длинных линиях без каких-либо проблем.
Не уверен, что это помогает, но, в конце концов, решение заключалось в добавлении резисторов серии 120 Ом (от 47R до 220R, вероятно, тоже в порядке), как для линий SCL, так и для SDA в дополнение к стандартным подтягивающим резисторам. Ограничивая ток, последовательные резисторы снижают скорость нарастания сигнала, звон и перекрестные помехи, тем самым предотвращая неисправность компаса.
@mikeller : Я просканировал все доступные адреса регистров QMC5883L версии A, и, похоже, на устройстве нет действующего регистра состояния.
Однако я обнаружил, что на неиспользуемых адресах I2C, включая регистр состояния по адресу: 0x09, версия «A» просто возвращает последнее значение данных, записанное в устройство. Это может предоставить полезные средства для определения того, является ли устройство версией QMC5883L ‘A’ или оригинальной HMC5883L / HMC5983.
Я также проверил данные компаса на отсутствие регистра состояния и бит готовности данных. Можно просто опросить регистры данных примерно с частотой преобразования устройства (я установил ее на 75 Гц). Если микроконтроллер выполняет опрос выше этой частоты, версия QMC5883L ‘A’ просто повторяет последние значения данных из последнего чтения. Так что, по крайней мере, устройство можно использовать.
@ MartinL1 : Вау, версия A полностью сломана. Интересно, сколько мы можем там сделать, чтобы на самом деле обнаружить / поддержать это, и где это просто начнет мешать обнаружению других устройств, если предположить, что шина I2C проверяется на наличие ряда различных устройств …
@mikeller : Извините, я должен был сказать, что сканировал подадрес I2C всего устройства (а не сканировал адрес I2C). Я написал небольшую программу для чтения всех внутренних регистров QMC5883L версии A от 0 до 127, и ни один из них не вернулся с разумными значениями регистров состояния.
За исключением того, что регистр состояния не работает, насколько я могу судить, QMC5883L ‘A’ обычно работает как HMC5883L / HMC5983 с адресом I2C по адресу: 0x1E, поэтому он не должен мешать работе других устройств на шине I2C.
Я тестировал QMC5883L ‘A’, совместно использующий шину I2C с гироскопом / акселерометром MPU-9250, а также барометром MS5611 (на моем контроллере полета Falcon 2 на базе шины I2C), и все работает нормально.
Оказывается, можно также читать HMC5883L / HMC5983, не прибегая к опросу бита готовности в регистре состояния.
Я считаю, что код iNav для HMC5883L / HMC5983 не опрашивает регистр статуса, поэтому он может вместить как это устройство, так и QMC5883L ‘A’.
Альтернативой является просто считывание регистра состояния после инициализации, если это 0x00, то это HMC5883L / HMC5983, если, с другой стороны, это последнее значение, записанное в устройство, это QMC5883L ‘A’.
У меня была такая же проблема с OmnibusF4SD (из RTFQ), даже после того, как я добавил Holybro M8N GPS. Магнит никогда не работал, но у меня всегда был график заголовков на экранном меню. Я мигал в iNav, и значок мага продолжал переключаться между синим и красным. Аппаратное состояние тоже было плохим. Я изменил «set i2c_speed = 400KHZ» на 200KHZ, и теперь, похоже, он работает нормально.
@McGiverGim Как указано выше , просто сообщаю вам, что мой Radiolink SE100 теперь работает с 4.0.0 и 4.0.1, используя тот же метод «медленного I2C». Вот мой код, отличный от 4.0.1 . Дифференциал включает в себя взлом src/main/target/OMNIBUSF7/target.c
который позволяет мне использовать MOSI слота SD-карты в качестве softserial (для SmartPort). Это не имеет отношения к проблемам с I2C, но я упоминаю об этом, чтобы показать полную рабочую настройку. Вот и diff all
от этой штуки. Магнитометр показывает что-то ненулевое, плавное и отзывчивое на вкладке «Датчики». Счетчик ошибок I2C в конфигураторе показывает ноль. (Для справки, я не пробовал, будет ли это работать без взлома в этой версии Betaflight.)
Спасибо за продолжение @andrejpodzimek !! Я попробую еще раз протестировать на этой неделе. Я уже забыл, что с GPS Betaflight определяет более-менее правильное направление. Но если получится, точнее будет.
Здравствуйте. Я уже некоторое время борюсь, пытаясь заставить компас на Matek GPS & Compass M8Q-5883 работать с Matek F722 STD или Matek F722SE. FC прекрасно видят компас на вкладке датчиков без каких-либо взломов после того, как вы активируете магнитометр на вкладке конфигурации. Тем не менее, у квадроцикла на вкладке «Настройка» появляется странный отскок назад после изменения курса на реальном квадроцикле, а также смещение заголовка на экране.
Я откалибровал ускорение. и магазин, но это не помогает.
Я даже вручную откалибровал магнит, используя метод проб и ошибок, чтобы датчик показывал ровное + — перемещение по всем трем осям. После этого я получаю полное отклонение от +1,3 до -1,3 по осям X, Y и Z на вкладке датчика при повороте устройства по каждой оси … но он все равно работает не так, как должен.
Одна интересная вещь, которую я обнаружил, заключалась в том, что, когда компас, казалось, не работал нормально, если я снял его с ремня аккумулятора и держал за край (антенна обращена вбок), то реакция квадрокоптера на экране была почти идеально во вкладке Setup. При удерживании блока GPS / компаса за каждый край на поверхности стола показания составляли 0, 90, 180 и 270 в пределах одного-двух градусов.
Во вкладке датчика:
X, Y, Z
0 = 1,25, 0, 0
90 = 0, 1,25, 0
180 = -1,25, 0, 0
270 = 0, -1,25, 0
Однако когда вы устанавливаете прибор на стол и вращаете его по оси z, значения датчика практически не меняются? Я перепробовал все варианты ориентации магнита на вкладке «Конфигурация» в BF. По словам Матека, это должно быть 270FLIP, и эта настройка дает результаты, указанные выше. Это как магнитометр обнаруживает не ту ось ??
Я понятия не имею, что делать дальше. Это тестирование проводилось на BF4.0.2. Я пробовал это на Matek F722 и F722SE FC, используя 3 разных устройства Matek M8Q-5883. (один новенький из сумки)
Если у кого-то есть другие идеи для тестирования, я готов попробовать. Благодарю.
Хорошо ……….. после всего этого я заметил, что то, насколько туго я затянул ремешок батареи (у меня был прибор на ремешке), сильно изменилось в показаниях. Я переместил его над полетной камерой, сделал еще одну калибровку, и, похоже, теперь он работает. Я сделал дамп и сохранил эту конфигурацию. После выполнения другой калибровки Acc, его показания снова были неверными, даже после нескольких калибровок магнитного поля. Я перезагрузил сохраненный дамп, и он снова заработал. Я назову это днем и просто полетим с этим!
Думаю, у меня тоже есть проблема. GPS — это Radiolink TS100. Настраиваю плату Matek F405-CTR и получаю вот это.
INAV / MATEKF405 2.2.0 18 июня 2019 г. / 14:50:40 (5e5551bd3)
GCC-7.3.1 20180622 (выпуск) [ARM / embedded-7-branch revision 261907]
положение дел
Время работы системы: 79 секунд
Текущее время: 2019-07-01T17: 57: 25.039 + 00: 00
Напряжение: 11,32 В (батарея 3S — в порядке)
Тактовая частота процессора = 168 МГц, гироскоп = MPU6000, ACC = MPU6000
Системные часы STM32:
SYSCLK = 168 МГц
HCLK = 168 МГц
PCLK1 = 42 МГц
PCLK2 = 84 МГц
Состояние датчика: GYRO = OK, ACC = OK, MAG = UNAVAILABLE, BARO = UNAVAILABLE, RANGEFINDER = NONE, OPFLOW = NONE, GPS = OK
SD-карта: сбой при запуске
Размер стека: 6144, адрес стека: 0x10010000, доступная куча: 1828
Ошибок I2C: 60, размер конфигурации: 5372, максимально доступная конфигурация: 131072
Использование канала АЦП:
АККУМУЛЯТОР: настроен = АЦП 1, используется = АЦП 1
RSSI: настроен = АЦП 3, используется = АЦП 3
ТОК: настроен = АЦП 2, используется = АЦП 2
ВОЗДУШНАЯ СКОРОСТЬ: настроено = нет, используется = нет
Системная нагрузка: 4, время цикла: 518, частота PID: 1930, частота приема: 49, частота системы: 9
Флаги выключения постановки на охрану: HWFAIL RX CLI
INAV_cli_dump_file.txt
Я перепробовал практически все. Я поменял порт UART, SDA и контакт SCL. BF распознает барометр, компас и GPS. INAV этого не делает. Я пытаюсь понять почему. Без помощи мне не добиться успеха. Так что если у кого-то есть идея поделиться
@rakiata ошибается Github, это Betaflight, а не iNav.
К вашему сведению, упомянутый выше трюк также работает для меня на OMNINXT7
(4.0.6).
@andrejpodzimek Теперь я понимаю, что мой журнал не работает с OMNINXT7. Какие строки мода вы ввели в CLI, чтобы он работал?
Что именно это означает: нужно ли мне делать аппаратную модификацию, чтобы магнитометр распознавался? И есть ли на борту OMNINXT7 магнит на складе или мне нужно подключить внешний (вместе с оборудованием GPS)?
@RipperDrone
Внимание, эта ошибка / ветка касается устройства Radiolink SE100 GPS + mag (черный шестиугольник), а не в частности, OMNINXT7
.
Какие строки мода вы ввели в CLI, чтобы он работал?
Чтобы мой Radiolink SE100 работал (также) с OMNINXT7
, я применил упомянутый выше патч , «перенеся» любые специфичные для цели изменения с OMNIBUSF7V2
на OMNINXT7
. (Однако наиболее важные изменения не относятся к конкретным целям.) Это никоим образом не отображается в CLI, это просто изменение кода. Единственный вариант интерфейса командной строки, который может иметь значение, — это правильный номер устройства I2C для mag. Однако, поскольку в любом случае это уже изменение кода, я обычно просто устанавливаю значение по умолчанию в target.c
чтобы указывать на правильное устройство, а затем нечего настраивать в CLI.
И есть ли на борту OMNINXT7 магнит на складе или мне нужно подключить внешний (вместе с оборудованием GPS)?
На моем OMNINXT7
не было магнита. Перепроверьте веб-сайт производителя, потому что иногда производители предлагают более поздние обновленные версии, содержащие дополнительное оборудование (барометр, компас и т. Д.). Но я предполагаю, что на борту нет компаса. Вот почему я использую компас в GPS-модуле Radiolink SE100.
Нужно ли делать аппаратный мод, чтобы магнитометр распознавался?
Специально для подключения OMNINXT7
+ Radiolink SE100 я не делал никаких модификаций оборудования; не уверен, что они нужны / рекомендуются. На печатной плате Radiolink уже есть подходящие подтягивающие резисторы AFAICT, поэтому нет необходимости добавлять дополнительные. (Я добавляю резисторы только тогда, когда я (например) припаиваю MS5611 baro напрямую без промежуточной печатной платы; это единственный случай, когда они мне действительно нужны.) Вы также можете включить дополнительные подтягивающие резисторы с программным управлением в MCU в коде ( target.c
), но в большинстве случаев они не приносят особой пользы; потому что те, что на плате GPS + mag, в любом случае имеют намного меньшее сопротивление.
Мне пришлось добавить подтягивающие резисторы на 2 кОм к линиям SCL и SDA, чтобы Holybro Micro GPS работал с Betaflight. Мне удалось подключить резисторы для поверхностного монтажа внутри корпуса GPS. Он был крошечным, но вместо него можно было использовать внешние резисторы с выводами. Затем мне пришлось изменить ресурсы, чтобы OmnibusF4SD распознал mag.
ресурс SERIAL_TX 3 НЕТ
ресурс SERIAL_RX 3 НЕТ
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
@andrejpodzimek Я завершил настройку: Matek QMC5883 mag не обнаруживается BF на OMNINXT7, тогда как iNAV обнаруживает его безупречно. Ресурсы такие же, контакты B08 / B09 для I2C1 SCL / SDA. аппаратное обеспечение явно установлено на QMC5883 как в iNAV, так и в BF. Подтягиваний пока нет. Это связано с разной скоростью шины / разгоном, и можно ли как-то решить эту проблему в BF без компиляции собственной специальной прошивки? Любую настройку я мог бы попробовать?
проводка к OMNINXT7: вот так …
Ресурсы iNAV, которые работают (то же самое в BF нет):
Есть новости @ripperdrone ??
@Asizon Мне кажется очевидным: iNAV по умолчанию реализовал более медленный и, следовательно, более надежный протокол шины I2C, поэтому QMC5883 работает в iNAV, но не в Betaflight. Если разработчики Betaflight не согласятся настроить протокол по умолчанию на «настройки стиля iNAV по умолчанию», нам придется использовать iNAV, чтобы он работал «из коробки».
Это связано с разной скоростью шины / разгоном, и можно ли как-то решить эту проблему в BF без компиляции собственной специальной прошивки? Любую настройку я мог бы попробовать?
@RipperDrone Настройки шины I2C, скопированные из iNav, до сих пор были единственным решением, которое позволило мне обнаружить компас. Настройки нигде в конфигураторе не отображаются.
@andrejpodzimek Знаете ли вы, есть ли в пути разработки BF история, когда настройки шины I2C были намеренно изменены, чтобы они отличались от настроек iNAV? Я не понимаю, почему немного более низкая скорость шины I2C без разгона должна наносить ущерб такой простой функции, как GPS Rescue. С другой стороны, могли быть случаи, когда другим периферийным устройствам требовалась более высокая производительность I2C в BF, поэтому они изменили ее: — /
Мне кажется ясным: iNAV по умолчанию включил более медленный и, следовательно, более надежный протокол шины I2C, поэтому QMC5883 работает в iNAV, но не в Betaflight.
Это не имеет ничего общего с самим протоколом. Эти «магические числа» в регистрах конфигурации устанавливают синхронизацию шины и параметры разгона для I2C. IIUC, Betaflight использует разные настройки в основном по причинам, связанным с более коротким временем цикла — чтение I2C является синхронным и останавливает основной цикл каждый раз, когда происходит. Betaflight настроен на минимизацию этих задержек, не обязательно для поддержки всех видов оборудования компаса.
Если разработчики Betaflight не согласятся настроить протокол по умолчанию на «настройки стиля iNAV по умолчанию», нам придется использовать iNAV, чтобы он работал «из коробки».
Я бы скептически отнесся к «нестандартной» части, потому что я никогда не видел рабочего компаса на самодельном дроне. Все мои сборки, в которых есть компас (уже> 10), также имеют эту критическую проблему . Таким образом, даже несмотря на то, что компас «работает» с точки зрения обнаружения на I2C и предоставления разумно выглядящих значений при вращении рамки, он совершенно непригоден для чего-либо, связанного с управлением полетом. Оглядываясь назад, я думаю, что это не вина Betaflight, просто HMC5983 / HMC5883 / QMC5883 — плохой выбор оборудования для компаса. (Он может работать с какой-то непрерывной калибровкой на основе GPS (но тогда как это будет работать во время стационарного зависания?).) Я не думаю, что у iNav есть волшебный рецепт для решения этой проблемы. Кроме того, для меня остается загадкой, почему эта проблема (AFAIK) не была воспроизведена другими.
Хорошо, звучит так, будто я откажусь от своих недавно заказанных 2шт HMC5883 и останусь только с GPS / без компаса для спасения GPS … 🙄
Я не понимаю, почему немного более низкая скорость шины I2C без разгона должна наносить ущерб такой простой функции, как GPS Rescue.
К счастью, для работы спасательных служб GPS компас не является обязательным. TBH, учитывая мой опыт с показаниями компаса, которые совершают полный поворот на 360 ° в течение ~ минут сидения на скамейке, я определенно не хотел бы, чтобы мой компас был включен во время спасения GPS …: fearful: (Который я все равно не использую ; попытка автономного полета (неиспользованного и, следовательно, непроверенного в стандартной работе) при потере соединения звучит гораздо более рискованно, чем просто снятие с охраны и падение.)
<offtopicrant> Кроме того, GPS не работает на 7 из 9 моих сборок, оснащенных GPS, из-за RunCam Split. Нужно полностью выключить RunCam, иначе нет исправления GPS. Никакое экранирование и никакое расстояние (в пределах кадра) не смогли исправить это. Вот и все, что касается приложений GPS в моем автопарке. В любом случае, это проблема с оборудованием, и Betaflight не может ее решить. </offtopicrant>
@Asizon : Отрицательно …
(Я пробовал mag_hardware = QMC5883 вместо AUTO, но оба не дали результата)
@andrejpodzimek Интересно, что у моей сборки Mark 4 есть Turtle на борту, а количество полученных спутников сильно различается, во время полета часто опускается ниже 6. Еще не заслуживает доверия …: -o
Кажется, это не зависит от того, включен или выключен Wi-Fi — я всегда выключаю его во время полета … GPS-приемник находится в самой задней части квадроцикла, может быть частично заблокирован антенной FPV, плюс из-за этого может возникать помехи. …
В прошлом у меня тоже были проблемы с разделением ринкам, но у некоторых GPS есть хорошая фильтрация, которая очень помогает. Теперь он работает без особых проблем. Один с компасом (hmc), а другой без (qmc). Я доволен обоими результатами.
@RipperDrone , @andrejpodzimek : Что касается различий в драйвере шины I2C, я думаю, что одним из факторов является то, что в прошлом Betaflight пытался поддерживать как можно более быстрое время цикла для нескольких моделей контроллеров полета (в основном ранних SPRACINGF3 / клонов), которые используют гироскоп, подключенный к I2C, тогда как iNav, где важна рабочая поддержка (в основном I2C) компасных устройств, использует другой подход.
Я думаю, что теперь, когда поддержка плат на базе F3 была прекращена в Betaflight, нет поддерживаемых контроллеров полета с гироскопом I2C, поэтому мы определенно можем пересмотреть это решение.
Кроме того, отсутствие необходимости в компасе было одним из важнейших дизайнерских решений при спасении GPS, которое отличает его от функциональности RTH, реализованной в iNav. Т.е. нет возможности поддерживать какую-либо форму «удержания позиции» при спасении с помощью GPS, поскольку данные об ориентации не поступают от GPS, когда аппарат не движется.
Мы должны быть осторожны с уменьшением скорости шины I2C, так как драйверы HAL могут ждать, что приведет к большему джиттеру времени цикла. Драйверы Iirc, F4 (и F1) делают побайтовое прерывание, так что это не будет проблемой. HAL, мы должны выяснить, что он делает.
Если мы наконец перейдем к прерываниям dma в Betaflight, проблема джиттера будет исправлена?
Похоже, это вариант. В любом случае, прерывания dma связаны с множеством других проблем, как можно было видеть с частями кода, чувствительными к таймеру, такими как rpm bidir, где вмешательство таймера и / или наложенные / повторяющиеся назначения вызывают ошибки. Я чувствую, что mag не считается важным в BF в целом, поэтому прикладывать эти усилия для того, чтобы он работал, кажется бессмысленным. Дойдя до предложения отказаться от поддержки магнита, чтобы быть последовательным. Если система GPS Rescue полностью независима от наложенной магнитной информации / компаса, зачем ее поддерживать?
Если мы наконец перейдем к прерываниям dma в Betaflight, проблема джиттера будет исправлена?
Могу только сказать, наверное. I2C DMA очень сложен, поскольку цикл шины I2C не является простым чтением (вводом) / записью (выводом). Не видел библиотечных кодов F4 (а также F1 и F3), поддерживающих DMA. HAL может иметь один. Однако DMA намного менее интенсивно использует процессор, чем то, что мы делаем в настоящее время, поэтому он удобен для чувствительных к джиттеру кодов.
Дойдя до предложения отказаться от поддержки магнита, чтобы быть последовательным.
Смешно. Зачем отбрасывать рабочий код из-за неработающего чипа, о котором мы даже не знаем, есть ли опубликованная спецификация чипа?
У меня есть Beitian BN-880 с HMC5883L с 4.1 MAMBA-F7, который также не обнаруживается, несмотря на правильную настройку и подтягивания.
Я хотел бы попробовать сборку с i2c, работающим на нормальной скорости 400 кбит / с и не разогнанным. Здесь есть какие-то оговорки? Я нашел определение скорости в bus_i2c_hal.c — еще нужно найти, где установлен разгон.
Поддельные (помеченные как) HMC5883 на самом деле являются QMC5883 и имеют другой адрес и регистр, чем HMC. Правильный адрес и регистр для QMC5883 — 0x0D и 0x1D соответственно.
Поддельные (помеченные как) HMC5883 на самом деле являются QMC5883 и имеют другой адрес и регистр, чем HMC. Правильный адрес и регистр для QMC5883 — 0x0D и 0x1D соответственно.
Honeywell, производитель HMC5883L и HMC5983 (тот же компас, но с температурной компенсацией), прекратил выпуск этих устройств примерно в 2016 году. Однако они передали лицензию на разработку китайской компании QST Corporation.
Корпорация QST выпустила две версии QMC5883L, версии «A» и «B», с каждым устройством, маркированным «DA5883» и «DB5883» соответственно.
Устройство «DA5883» версии «A» ведет себя идентично исходному HMC5883L и отвечает на адрес I2C 0x1E, за исключением того, что его регистр состояния не работает.
Версия «B» DB5883 — совершенно другое устройство, ведет себя в соответствии с таблицей данных QMC5883L и, как вы упомянули, отвечает на адрес I2C 0x0D.
К сожалению, эта информация остается полностью недокументированной QST. Тот факт, что регистр состояния не работает на устройствах версии «A», означает, что они не работают при использовании вместо оригинальных магнитометров Honeywell. Хотя можно обойти проблему, настроив прошивку. Устройство версии «B» имеет совершенно другой набор внутренних регистров, и любая прошивка для управления полетом должна обрабатывать это как совершенно новый и отдельный чип.
К сожалению, существует большая путаница, так как многие коммутационные платы «HMC5883L» продаются с этим компасом, замененным на версии «A» или «B» QMC5883L, ни одна из которых не работает со стандартным кодом HMC5883L.
Дойдя до предложения отказаться от поддержки магнита, чтобы быть последовательным.
Смешно. Зачем отбрасывать рабочий код из-за неработающего чипа, о котором мы даже не знаем, есть ли опубликованная спецификация чипа?
@jflyper, ты меня неправильно понял, лол. Отказ от поддержки Mag типа QMC для спасения GPS в BF должен был быть моим более кратким предложением. Неизвестно, что ЛЮБОЙ тип mag QMC в настоящее время работает с BF, но он существует как опция mag_hardware.
Сегодня я сам потратил некоторое время на решение этой проблемы.
Я использую Mamba F722 FC, на котором нет контактов I2C.
Я использовал очень ценную информацию из этой ветки и пришел к решению для этого FC и модуля GPS BN880.
Я использую рекомендованные колодки RX3 и TX3 для I2C.
это мои изменения в CLI:
Ресурсы
ресурс SERIAL_TX 3 НЕТ
ресурс SERIAL_RX 3 НЕТ
ресурс I2C_SCL 2 B10
ресурс I2C_SDA 2 B11
мастер
установить align_mag = CW270FLIP
установить mag_bustype = I2C
установить mag_i2c_device = 2
установить mag_hardware = HMC5883
«Блуждания» магнитометра пока не заметил, но подключение по usb иногда занимает больше времени …
установить align_mag = CW270FLIP
установить mag_bustype = I2C
установить mag_i2c_device = 2
установить mag_hardware = HMC5883
большое вам спасибо !!! он также работал у меня на моей мамбе f722 с gps + mag matek m8q.
у меня осталась только одна проблема, gps долго ловит спутники
@ bizio996 : это известная проблема, над которой ведется работа: # 9194
Привет, @MoppelMat , вы упомянули, что используете Mamba F722 FC, это мини или полноразмерный?
Я использую Mamba F722 mini FC и видеопередатчик Rush Tank Mini. Пэды Video и Smart Audio на передатчике подключены к TX3 и VTX соответственно. Можно ли перенести эти провода на TX2 / RX2, чтобы освободить TX3 для I2C? Затем я подключаю провода SCL / SDA от BN-880 к TX3? Где RX3?
Благодаря!
Была ли эта страница полезной?
0 / 5 — 0 рейтинги
В этой статье вы узнаете, что делать, если квадрокоптер не запускается (не запускает двигатели, не армится), а также, обсудим основные проблемы, которые могут возникать при снятии с охраны квадрокоптера.
Оригинал: https://oscarliang.com
Содержание
- Основные проверки
- Как проверить проблему арминга в Betaflight
- Betaflight Configurator
- CLI
- Пищалка (Buzzer beeper)
- Таблица для поиска проблем с запуском квадрокоптера посредством сравнения числа из Arming flag
- Другие проблемы
- Акселерометр
- Большая загрузка процессора
- Газ, он же Throttle, он же дроссельная заслонка
- Порог Морона
Основные проверки
Для идентификации проблемы, нужно выполнить ряд проверок:
- Проверить, корректно ли работает приемник. Для этого нужно зайти в Betaflight во вкладку «Receiver» и подвигать стики пульта — каждое движение должно правильно отображаться на графике (должны двигаться полоски состояния).
- Проверьте, настроен ли пункт ARM во вкладке Modes, должен быть выбран правильный канал (обычно это AUX1), а желтые ползунки расположены в правой части, определяющие положение переключателя. При перемещении переключателя в положение ON, нижний индикатор должен быть в зоне желтых ползунков.
- Если к дрону подключен USB (к ПК), то будет активна автоматическая защита. Отсоедините USB-кабель.
Если эти пункты проверены, но проблема не решена, то читайте дальше.
Как проверить проблему арминга в Betaflight
Если у вас есть OSD Betaflight, добавьте на экран отображение «Warnings» и выберите отображение «Arming Disabled«, это позволит понять, что именно не дает запустить двигатели квадрокоптера.
Если у вас нет OSD Betaflight, то вы можете проверить флажок «Arming Disable Flag» в Betaflight, так вы тоже сможете понять, что мешает заармиться дрону.
Есть несколько способов проверить проблему с помощью «Arming Disable Flag», для этого потребуется:
- Betaflight Configurator
- CLI
- Пищалка (Buzzer)
Betaflight Configurator
Зайдите в Betaflight конфигуратора с помощью компьютера во вкладку «Setup», блок «Info», там будет строчка «Arming Disable Flag»:
CLI
Альтернативной проверкой будет комнадная строка. Зайдите в CLI (Betaflight) и введите команду «status«, в конце будет информация о «Arming Disable Flags»:
Команда доступна в прошивке Betaflight версии 3.2 и выше.
Пищалка (Buzzer beeper)
Если нет возможности оперативно подключиться к компьютеру, можно использовать пищалку как индикатор конкретной проблемы. Звук можно разделить на следующие части:
- 5 коротких сигналов — не обращаем внимания, это норма;
- несколько длинных звуковых сигналов;
- несколько коротких звуковых сигналов с длинными интервалами.
Каждый длинный звуковой сигнал соответствует цифре 5, а короткий — 1. Цифру arming flag можно рассчитать по формуле:
5 x <количество длинных сигналов> + <количество коротких сигналов>
Пример:
- 0 длинных сигналов и 2 коротких = 2
- 1 длинный сигнал и 3 коротких = 8
- 2 длинных сигнала + 0 коротких = 10
Таблица для поиска проблем с запуском квадрокоптера посредством сравнения числа из Arming flag
Как только вы узнаете цифру флага или название проблемы, смотрите эту таблицу для определения проблемы и ее решения. Таблица взята из Betaflight wiki и переведена для profpv.ru:
Название | Описание | Код пищалки | Что нужно сделать | ||
---|---|---|---|---|---|
BF 3.2 | BF 3.3 | BF 3.4 | |||
NOGYRO | гироскоп не найден или поврежден | 1 | 1 | 1 | Это может быть аппаратный сбой. Попробуйте залить прошлую версию прошивки если она работает, то дело в прошивке, а не в аппаратной части. |
FAILSAFE | Активирован Failsafe | 2 | 2 | 2 | Исправьте условия активации Failsafe. |
RX LOSS | Сигнал приемника не обнаружен | 3 | 3 | 3 | Приемник неисправен или нет связи с пультом. |
BAD RX | После срабатывания Failsafe приемник остался включеным | 4 | 4 | 4 | Выключите и включите питания к приемнику (дрону). |
BOXFAILSAFE | Включен переключатель «FAILSAFE» | 5 | 5 | 5 | Смотрите FAILSAFE». |
RUNAWAY | Активировалась функция «Runway Takeoff Prevention» | 6 | 6 | Это функция проверяет несколько параметров для безопасного старта и если проверка обнаружит, что моторы настроены не в том порядке, гироскоп не смог определить правильное положение (дрон наклонен), установлены неправильные пропеллеры и тд., то сработает эта функция. Для исправления: отключите и включите питание квадрокоптера. | |
THROTTLE | Стик газа (Throttle) настроен на слишком большое значение | 6 | 7 | 7 | Убедитесь, что значение стика газа настроено верно — min_check. |
ANGLE | Летательный аппарат не соответствует уровню | 7 | 8 | 8 | Установить уровень в пределах small_angle степени (25 по умолчанию). |
BOOT GRACE | Попытка запуска сразу после включения питания | 8 | 9 | 9 | После включения питания подождать pwr_on_arm_grace секунд (по умолчанию 5). |
NO PREARM | Переключатель арминга не настроен или не включен | 9 | 10 | 10 | Поменяйте положение переключателя или настройте его. |
LOAD | Система слишком нагружена для безопасного полета | 10 | 11 | 11 | Пересмотрите настройки полетного контроллера и отключите ненужные функции. |
CALIB | Датчики еще калибруются | 11 | 12 | 12 | Дождитесь окончания калибровки датчиков. |
CLI | Активирована командная строка (CLI) | 12 | 13 | 13 | Выйдите из командной строки (CLI). |
CMS | CMS (меню настроек) активировано через OSD или другой экран | 13 | 14 | 14 | Выйдите из настроек (или из OSD). |
OSD | Включено меню OSD | 14 | 15 | 15 | Выйдите из меню OSD. |
BST | Устройство Black Sheep Telemetry (TBS Core Pro, например) выключено и не позволяет запустить дрон | 15 | 16 | 16 | Прочитайте инструкцию к своему доп.оборудованию. |
MSP | Активно соединение MSP, возможно через Betaflight Configurator | 16 | 17 | 17 | Разорвите соединение с Betaflight Configurator. |
PARALYZE | Активен режим Paralyze | 18 | Отключите питание, затем включите. | ||
GPS | GPS не нашел нужное количество спутников | 19 | Ожидайте соединение с нужным количеством спутников GPS. | ||
ARM SWITCH | Стик газа в опасном положении | 17 | 18 | 20 | Переместите стик газа в безопасное положение (на минимум, обычно это нижнее положение). |
Другие проблемы
Акселерометр
Квадрокоптер может находиться на неровной поверхности, либо акселерометр не откалиброван. Попробуйте откалибровать датчик на ровной поверхности и взлетать пробуйте тоже с ровной поверхности. Если это не помогло, попробуйте увеличить в CLI параметр small_angle degrees, по умолчанию он 25. В крайнем случае, можно отключить акселерометр, если вы не летаете в режиме стабилизации.
Большая загрузка процессора
Если вы включили все что нужно и ненужно, то скорее всего, процессор будет загружен на полную. Отключите лишние функции и постарайтесь добиться загрузки процессора до 50%. В противном случае, при полной загрузке полетный контроллер запретит взлет.
Газ, он же Throttle, он же дроссельная заслонка
Вам нужно проверить, какое нижнее значение у стика газа, по-хорошему, у всех каналов нижнее значение должно быть 1000, а верхнее 2000. Настройки производятся в зависимости от аппаратуры — либо в пульте, либо в конфигураторе во вкладке Configuration или Receiver. Также при подаче питания дрону, нужно убедиться, что стик газа в нижнем положении.
В прошивке Betaflight есть автоматическая защита, регулируется параметром «Min_Check», по умолчанию установлен на 1050 и, если к примеру, у вас стик газа в нижнем положении на 1060, то прошивка не даст запустить двигатели. Вам нужно настроить значения нижнего предела стика в разделах конфигурация и ресивер. Нужно добиться того, чтобы стик газа в нижнем положении показывал цифру ниже 1050.
Порог Морона
Некоторые FC могут иметь более чувствительные гироскопы, и квадрокоптер откажется запускаться после включения питания. При увеличении порога Moron в CLI может снизить чувствительность гироскопа во время инициализации. Попробуйте установить его на 100 или даже 120.
Ошибка по шине i2c
Поиск неисправностей в системной шине I 2 C
Напряжение питания как к линии SDA , так и к линии SCL подводится через нагрузочные резисторы. Значение этого напряжения обычно составляет от 4,5 В до 5,5 В и должно точно соответствовать приведенному в сервисной документации уровню. Поиск неисправностей, поэтому следует начинать с измерения питающего шину напряжения. К прекращению обмена информацией в шине могут привести также колебания питающего напряжения питания, особенно в тех случаях, когда появляется какая-нибудь нерегулярная неисправность. Пульсации могут составлять всего лишь несколько милливольт, поэтому в сомнительных случаях проверку питающего системную шину напряжения надо проводить с помощью осоцилографа.
Обычно на входах блоков, подключаемых к системной шине, или перед микросхемами в этих блоках располагают еще и развязывающие резисторы. С помощью измерения напряжения на этих резисторах можно установить наличие короткого замыкания в соответствующем блоке. Если такая неисправность присутствует, то измеренное напряжение на выводе резистора, со стороны подключенного блока или микросхемы, имеет существенно более низкое значение, чем на другом выводе резистора. Если же в проверяемых узлах короткое замыкание отсутствует, то падение амплитуды сигнала на соответствующих развязывающих резисторах незначительное из-за достаточно низкого их номинала (от 100 Ом до 1 кОм). Поиск неисправностей усложняется, когда отдельные узлы и схемы подключены к системной шине без развязывающих резисторов, так как в этом случае любой неисправный узел может полностью заблокировать обмен информацией по системной шине. В этом случае придется последовательно отсоединять подключенные к шине отдельные узлы и схемы.
Уже измерение напряжения до и после нагрузочных резисторов может дать указание на вероятную неисправность в одном из устройств, подключенных к системной шине, если падение напряжения на этих резисторах слишком велико.
Необходима также проверка наличия сигналов в линиях SCL и SDA шины. Отсутствие сигнала синхронизации в линии SCL указывает на необходимость проверки работоспособности центрального управляющего устройства, а также внешнего кварцевого резонатора тактового генератора ЦУУ. Неисправности частотозадающих элементов тактового генератора могут быть причиной отличия тактовой частоты от номинальной, что также может привести к нарушению обмена информацией в шине.
Тактовый сигнал может представлять собой синусоидальный сигнал, либо сигнал прямоугольной или трапециевидной формы.
Наличие импульсных сигналов номинальной амплитуды в линии SDA -шины само по себе не дает достоверной информации о правильности обмена данными между узлами ВМ, подключенными к системной шине, но при их наличии можно условно считать, что обмен данными в системе происходит правильно.
Источник
Обработка ошибок и перезапуск модуля I2C
Сегодня в комментариях меня попросили рассмотреть работу I2C более подробно, обратить внимание на нетривиальные случаи: например, что будет в случае возникновения ошибок на линии, как такие ошибки обрабатывать? Дело в том, что при появлении таких ошибок модуль I2C часто «зависает», и не реагирует на дальнейшие обращения — нужно ловить такую ситуацию и перезапускать модуль.
Стандартная процедура общения с I2C-модулем предусматривает отправку байт и проверку флага — передано или нет. Флаг проверяется в цикле while, и именно этот цикл подвержен зависаниям — если флаг не устанавливается из-за ошибки, из этого цикла мы уже не выйдем никогда.
Я предлагаю простой способ выхода из этой ситуации — вместо простого while нужно сделать «while с условием». К примеру, если цикл опроса флага безрезультатно прокрутился более 200 раз — наверное ситуация уже не изменится, т.к. возникла ошибка. Значит нужно перезагружать модуль I2C.
Сделать это просто: добавим переменную «таймаут» = 200, и в цикле опроса флага будем её декрементировать. Как только она дошла до нуля — сбрасываем текущую передачу и перезапускаем модуль. Очень важно именно отменить передачу, потому что иначе после перезапуска модуля она продолжится с того места, где застряла в прошлый раз — ну и ни к чему хорошему это не приведёт.
Код примера, демонстрирующего эту «безопасную передачу», таков:
И в заключение пару слов, почему я сделал именно так, ведь более логичным было бы добавление прерываний на ошибки и обработка этих прерываний. Я просто хотел как можно меньше менять исходный код, сделать это проще всего оказалось именно расширив стандартный while до такого «while с таймаутом». Более того, так можно обойтись без глобальных переменных, а это всегда очень хорошо.
Введение обработчиков прерываний ошибок раздуло бы код и спрятало бы основную логику. Мне это неудобно. Кстати, подобная проблема встречалась у меня при работе микроконтроллера LM3S с RFID-ридером, я думаю такой подход решил бы её.
Источник
Многобукфф
Vladislav’s personal blog site
Нестабильная работа с I2C под STM32
Волею судеб мне пришлось разрабатывать прошивку для одного устройства на основе микроконтроллера STM32F103. Функций у устройства много, в том числе и общение с EEPROM подключенным посредством протокола I 2 C. Кто не знает, микроконтроллеры STM32 во многих своих версиях поддерживают работу по данному протоколу на аппаратном уровне. Это значит, что у микросхемы микроконтроллера присутствуют специальные выводы, которые можно использовать в том числе и для работы по протоколу I 2 C, а все издержки по этому протоколу выполняются «железом» микроконтроллера.
Вообще, I 2 C — штука популярная. Реализуется не так сложно, для его работы требуется всего два сигнальных провода. По одному подаются тактовые импульсы, по второму происходит передача данных, привязанная к тактам первого провода. К шире или выводам I 2 C можно подключить несколько устройств, они не будут мешать друг-другу, т.к. при обращении к конкретному устройству указывается его уникальный адрес.
Шина I 2 C не высокоскоростная и предназначена в первую очередь для обмена данными с различными датчиками, модулями и внешними системами. Через шину прокачать много информации не выйдет, но этого и не требуется. Главное, что она проста, дешева и универсальна. Ну много ли данных передает в секунду датчик температуры или давления? Сущие байты. Этого вполне достаточно.
Как правило в шине I 2 C применяется система с одним ведущим устройством и подключаемыми к нему ведомыми. В качестве ведущего устройства, разумеется, используется микроконтроллер. И он опрашивает подключенные устройства, в надежде получить с них данные. Каким же образом передаются данные по-фактически одному проводу? Конечно, передача данных по одному проводу в I 2 C не является полнодуплексной. Нет возможности в стандарте по одному проводу передавать и принимать данные одновременно. Поэтому, команды на передачу дает ведущее устройство, а все остальные слушают и отвечают, когда это им позволяется.
Простота протокола I 2 C иногда оборачивается и обратной стороной. Отлаживать проблемы, возникающие в коммуникации с внешними устройствами зачастую очень не просто. Ведь в цифровом мире либо устройство работает, либо нет. А еще больше усложняет проблему случай, когда вроде бы работает, а потом, по какой-то причине не совсем работает. Вот именно такая петрушка и произошла в моем случае.
Для реализации микропрограммы был выбран фреймворк STM32Arduino, так как требовалось использовать некоторые библиотеки, которые легче взять готовые, нежели разрабатывать их заново. К чипу же STM32 подключена обычная микросхема EEPROM на несколько килобит. EEPROM используется для частых записей, для чего не предназначена Flash-память на чипе STM32. Все аппаратные подключения проведены в строгом соответствии с документацией как производителя микроконтроллера, так и микросхемы EEPROM. И именно проверка того, как сделаны аппаратные подключения, надежно ли питание, есть ли все необходимые подтяжки и прочее, должна происходить в самую первую очередь, если возникла проблема. Иначе можно потратить годы на то, чтобы найти программную причину ошибки, особенно там, где ее нет.
В моем случае проблема заключалась в выдаче недостоверных результатов с EEPROM и невозможность записи. Точнее запись проходила, но на конечный осмысленный результат они никак не влияла. Причем неполадка появлялась только после аппаратного перезапуска устройства и примерно один раз из десяти. Присутствие какой-либо адекватной реакции от всех программах слоев, на которые опирается STM32Duino ожидать не стоит. I 2 C протокол простой и он либо работает, либо нет. И он работал, выдавал данные, причем даже если данные с EEPROM приходили откровенно левые, то никакие ошибки обращения с библиотекой Wire не возникало. Пришлось начать копать интернет в поисках похожих ошибок и методов их решения.
Как оказалось, проблема при работе с I 2 C на чипах STM32, особенно семейства F103, возникает чуть ли не у каждого второго пользователя чипов. Причем независимо от того, на чем он пишет свой код: HAL, Arduino, Mbed или еще чего. Проблем возникает много, у кого-то ничего не работает сразу, что несколько легче, так как искать ошибку проще, а у других все работает из коробки, но не постоянно. Основные проблемы, на которые натыкаются пользователи кроются в некоторых, назовем их так, особенностях структуры чипов STM32F10x, да ошибках, которые присутствуют в HAL.
Приведу основные причины возникновения неполадок с I 2 C, полученные после изучения «всего интернета»:
- Ненадежное аппаратное подключение, ненадежное неверное питание, несоблюдение рекомендаций по подключению.
- Блокировка шины на стороне микроконтроллера со статусом Busy.
- Перепутанные выходы, перепутанная инициализация при добавлении второго канала I 2 C на многоканальных чипах. Ошибка из серии «Я скопировал оттуда, где работало, а тут не работает».
Кстати, последняя ошибка встречается не столько при простом копировании кода, завязанного на работу через I 2 C, а сколько на его инициализацию. STM32 штука сложная и если невнимательно работать с Cube или писать инициализацию своими руками, то наверняка куда-то может затесаться мизерная ошибочка, которую замыленный глаз уже не в состоянии разглядеть. Вторая же ошибка по большей части связана с неверной (а зачастую с бездумной) инициализацией микроконтроллера, но присутствуют и особенности реализации (читай ошибки) в самом чипе. С ними (обнаруженными и признанными) и объясняется что делать в замечательном документе Errata sheet (ссылка внизу статьи).
В общем наилучшее, что мог создать коллективный разум, это код принудительной переинициализации функции I 2 C через HAL с дополнительными задержками:
/* USER CODE BEGIN SysInit */
HAL_RCC_I2C1_CLK_ENABLE();
HAL_Delay(100); HAL_RCC_I2C1_FORCE_RESET();
HAL_Delay(100);
__HAL_RCC_I2C1_RELEASE_RESET();
HAL_Delay(100);
/* USER CODE END SysInit */
В Arduino на STM32 данный блок так же можно применить, но он не помогает, по крайней мере, в моем случае. Пришлось еще немного пораскинуть мозгами и попытаться докопаться до причины проблемы, а потом попытаться ее решить. В моем случае обмен данными с EEPROM по I 2 C идет без каких-либо проблем. Данные читаются, записываются, никаких ошибок не возникает. Только вот в одном разе из 10 после аппаратной перезагрузки всей системы, EEPROM начинает выдавать совершенно левые данные, при этом никаких ошибок не возникает. С записью тоже в такие моменты не все гладко, проверить-то никак.
Как известно, чипы STM32 многофункциональны и многие из выводов микросхем могут быть использованы под различные функции. У многих микроконтроллеров, не только у STM32, после перезагрузки, некоторые выводы могут переключиться в так называемые неинициализированные состояния. Обычный софтверный разработчик, как правило не задумывается над тем, какой у него уровень на выводах микроконтроллера после его перезагрузки. Высокий? Низкий? Серединный? При использовании фирменного конфигуратора STM32Cube есть возможность настроить инициализацию выводов и некоторых других функций микроконтроллера путем относительно простого конфигурирования. Но данная процедура может быть опущена, а инициализацию можно провести позже, например, при процедуре вызова той или иной функции. Именно последним путем и пошли разработчики STM32Duino. При загрузке микроконтроллера происходит так называемая базовая инициализация функций микроконтроллера, ножки выводов принимают значения по умолчанию. А вот если с данной конкретной ножки требуется другая функция, то ее инициализация происходит при первом вызове соответствующей функции.
В чипах STM32 инициализация происходит очень быстро, ну сами чипы скоростные, это, во-первых, а во-вторых, загрузчик не тормозит загрузку пользовательского кода, так как вызывается при соответствующей аппаратной комбинации. Значит, проблема неинициализированных «ног», когда на них болтается неизвестно что, встает не в полный рост. А вот на других чипах микроконтроллеров, где загрузчик некоторое время ожидает подачу ему сигнала и только потом переходит на пользовательский код, проблема может существенно попортить жизнь. Представьте, что на такой «ноге», которая еще не определилась с уровнем своего сигнала, «висит» управляющий контакт реле. И вот на реле идет жуткая последовательность непонятных сигналов. Что ему делать? Дергаться туда-сюда, пока микроконтроллер не определиться со своим выводом?
Опытный читатель или электронщик, уже догадался, в чем изюминка порылась. Микросхема EEPROM возвращает неверные данные, а библиотека, работающая с I 2 C, говорит, что все нормально, ошибок нет. Суть нестабильного поведения кроется в следующем. На универсальных чипах STM32F103 многие из выводов многофункциональны. При неверной инициализации или отсутствии инициализации, на «ногах», подключенных к микросхеме EEPROM, может появиться произвольный сигнал, который «сведет с ума» саму микросхему EEPROM (команды на обмен данными с EEPROM та еще китайская азбука, куча условностей, задержек и прочего). Да, она будет как-то реагировать на команды, но вот выдавать данные может совсем не те, что должна. Повторная инициализация I 2 C в микроконтроллере ничего не даст, так как ведомое устройство уже не в себе и вывести его из себя можно только аппаратной перезагрузкой микросхемы EEPROM (перезагрузка микроконтроллера тут не помогает, по той же причине, что и переинициализация через HAL).
Именно такая ситуация возникла в моем случае. Проблема возникала случайным образом, но статистически она присутствовала. Если код инициализации Wire поместить ближе к началу программного кода, то вероятность возникновения ошибки уменьшается, если отодвинуть его куда-то подальше, то ошибка будет возникать чаще. И спастись от проблемы можно только аппаратным сбросом всего оборудования (передергиванием питания).
Так как же можно избавиться от проблемы «сумасшествия» ведомой микросхемы EEPROM? Очевидно, что нужно максимально быстро проинициализировать соответствующие терминалы ввода-вывода, дабы успеть в тот момент времени, пока EEPROM не начнет жить по своим собственным законам, повинуясь непонятным сигналам с микроконтроллера. Другими словами, подвинуть код инициализации Wire в самое начало программы. Но… Данный трюк не решает полностью описанное поведение EEPROM. Все еще остается вероятность отказа EEPROM (и опыты это подтверждают). Почему? Потому, что выполнение кода инициализации Wire занимает какое-то время, бесценные микросекунды, которых хватает на то, чтоб EEPROM удалились в мир грез и фантазий. Что в этом случае можно сделать?
pinMode(I2C_SCL, OUTPUT);
pinMode(I2C_SDA, OUTPUT);
Оказалось, что достаточно только проинициализировать порты микроконтроллера, ответственные за I 2 C как выходные цифровые выводы, как можно быстрее. В этом случае цифровое, а скорее аналоговое, шатание отменяется и невменяемость EEPROM тоже. В STM32Duino при инициализации пина как выходящего, он автоматически включается на низкий уровень. Если этого не происходит, например, поменялась идеология разработчиков фреймворка или вышла новая плата, на которой все не так, то дополнительно можно принудительно установить низкий уровень, что должно обеспечить нормальную работоспособность всей связки.
А что же до любителей HAL и особенно STM32Cube? Если работать только на HAL и не прибегать к Cube, как к средству конфигурирования, то проблема будет ровно такой же. Если не применить четкую инициализацию «ног» I 2 C как можно быстрее, то нормально с EEPROM не поработаешь. Впрочем, с Cube тоже не все так гладко как хотелось бы. Да, утилита помогает провести инициализацию микроконтроллера, которая сама по себе не отличается простотой. Но и тут могут быть нюансы. Во-первых, код инициализации I 2 C из Cube может быть выполнен в самую последнюю очередь, когда уже поздно, во-вторых, могут наступить и прочие конфликты, связанные с неверной инициализацией (Cube только выглядит просто, на самом деле без понимания туда лезть не стоит). Более подробно о потенциальных проблемах можно почитать в ссылках ниже.
- STM32 WRITE AND READ EEPROM OVER I2C BUS — статья детально разжевывающая методы обращения с EEPROM подключенным посредством I 2 C.
- STM32F10xx8 STM32F10xxB Errata sheet (medium-density device limitations) — бюллетень от STMicroelectronics описывающий возможные затруднения и способы борьбы с ними по различным блокам своих микроконтроллеров. Проблем работы с I 2 C в документе указано аж 7.
- STM32 — I2C — HAL_BUSY — статья что делать, если возникает Busy.
Опубликовано 12.09.2020 автором kvv в следующих категориях:
DIYSoftстатья
Источник
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.