mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-10-30 02:21:05 +00:00 
			
		
		
		
	SymaX impove rates in headless mode.
This commit is contained in:
		
							parent
							
								
									5f7c598a34
								
							
						
					
					
						commit
						f13701b120
					
				| @ -30,6 +30,7 @@ | |||||||
| #define SYMAX_FLAG_VIDEO			0x02 | #define SYMAX_FLAG_VIDEO			0x02 | ||||||
| #define SYMAX_FLAG_PICTURE			0x04 | #define SYMAX_FLAG_PICTURE			0x04 | ||||||
| #define SYMAX_FLAG_HEADLESS			0x08 | #define SYMAX_FLAG_HEADLESS			0x08 | ||||||
|  | #define SYMAX_XTRM_RATES			0x10 | ||||||
| 
 | 
 | ||||||
| #define SYMAX_PAYLOADSIZE			10		// receive data pipes set to this size, but unused
 | #define SYMAX_PAYLOADSIZE			10		// receive data pipes set to this size, but unused
 | ||||||
| #define SYMAX_MAX_PACKET_LENGTH		16		// X11,X12,X5C-1 10-byte, X5C 16-byte
 | #define SYMAX_MAX_PACKET_LENGTH		16		// X11,X12,X5C-1 10-byte, X5C 16-byte
 | ||||||
| @ -58,6 +59,7 @@ static void __attribute__((unused)) SYMAX_read_controls() | |||||||
| { | { | ||||||
| 	// Protocol is registered AETRF, that is
 | 	// Protocol is registered AETRF, that is
 | ||||||
| 	// Aileron is channel 1, Elevator - 2, Throttle - 3, Rudder - 4, Flip control - 5
 | 	// Aileron is channel 1, Elevator - 2, Throttle - 3, Rudder - 4, Flip control - 5
 | ||||||
|  | 	// Extended (trim-added) Rates - 6, Photo - 7, Video - 8, Headless - 9
 | ||||||
| 	aileron  = convert_channel_s8b(AILERON); | 	aileron  = convert_channel_s8b(AILERON); | ||||||
| 	elevator = convert_channel_s8b(ELEVATOR); | 	elevator = convert_channel_s8b(ELEVATOR); | ||||||
| 	throttle = convert_channel_8b(THROTTLE); | 	throttle = convert_channel_8b(THROTTLE); | ||||||
| @ -67,6 +69,9 @@ static void __attribute__((unused)) SYMAX_read_controls() | |||||||
| 	// Channel 5
 | 	// Channel 5
 | ||||||
| 	if (Servo_AUX1) | 	if (Servo_AUX1) | ||||||
| 		flags = SYMAX_FLAG_FLIP; | 		flags = SYMAX_FLAG_FLIP; | ||||||
|  | 	// Channel 6
 | ||||||
|  | 	if (Servo_AUX2) | ||||||
|  | 		flags |= SYMAX_XTRM_RATES; | ||||||
| 	// Channel 7
 | 	// Channel 7
 | ||||||
| 	if (Servo_AUX3) | 	if (Servo_AUX3) | ||||||
| 		flags |= SYMAX_FLAG_PICTURE; | 		flags |= SYMAX_FLAG_PICTURE; | ||||||
| @ -76,6 +81,7 @@ static void __attribute__((unused)) SYMAX_read_controls() | |||||||
| 	// Channel 9
 | 	// Channel 9
 | ||||||
| 	if (Servo_AUX5) | 	if (Servo_AUX5) | ||||||
| 		flags |= SYMAX_FLAG_HEADLESS; | 		flags |= SYMAX_FLAG_HEADLESS; | ||||||
|  | 	    flags &= ~SYMAX_XTRM_RATES;	// Extended rates & headless incompatible
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define X5C_CHAN2TRIM(X) ((((X) & 0x80 ? 0xff - (X) : 0x80 + (X)) >> 2) + 0x20) | #define X5C_CHAN2TRIM(X) ((((X) & 0x80 ? 0xff - (X) : 0x80 + (X)) >> 2) + 0x20) | ||||||
| @ -98,9 +104,15 @@ static void __attribute__((unused)) SYMAX_build_packet_x5c(uint8_t bind) | |||||||
| 		packet[1] = rudder; | 		packet[1] = rudder; | ||||||
| 		packet[2] = elevator ^ 0x80;  // reversed from default
 | 		packet[2] = elevator ^ 0x80;  // reversed from default
 | ||||||
| 		packet[3] = aileron; | 		packet[3] = aileron; | ||||||
| 		packet[4] = X5C_CHAN2TRIM(rudder ^ 0x80);// drive trims for extra control range
 | 		if (flags & SYMAX_XTRM_RATES) {	// drive trims for extra control range
 | ||||||
| 		packet[5] = X5C_CHAN2TRIM(elevator); | 			packet[4] = X5C_CHAN2TRIM(rudder ^ 0x80); | ||||||
| 		packet[6] = X5C_CHAN2TRIM(aileron ^ 0x80); | 			packet[5] = X5C_CHAN2TRIM(elevator); | ||||||
|  | 			packet[6] = X5C_CHAN2TRIM(aileron ^ 0x80); | ||||||
|  | 		} else { | ||||||
|  | 			packet[4] = 0x00; | ||||||
|  | 			packet[5] = 0x00; | ||||||
|  | 			packet[6] = 0x00; | ||||||
|  | 		} | ||||||
| 		packet[7] = 0xae; | 		packet[7] = 0xae; | ||||||
| 		packet[8] = 0xa9; | 		packet[8] = 0xa9; | ||||||
| 		packet[9] = 0x00; | 		packet[9] = 0x00; | ||||||
| @ -138,9 +150,14 @@ static void __attribute__((unused)) SYMAX_build_packet(uint8_t bind) | |||||||
| 		packet[2] = rudder; | 		packet[2] = rudder; | ||||||
| 		packet[3] = aileron; | 		packet[3] = aileron; | ||||||
| 		packet[4] = (flags & SYMAX_FLAG_VIDEO   ? 0x80 : 0x00) | (flags & SYMAX_FLAG_PICTURE ? 0x40 : 0x00); | 		packet[4] = (flags & SYMAX_FLAG_VIDEO   ? 0x80 : 0x00) | (flags & SYMAX_FLAG_PICTURE ? 0x40 : 0x00); | ||||||
| 		packet[5] = (elevator >> 2) | 0xc0; //always high rates (bit 7 is rate control)
 | 		packet[5] = 0xc0;	//always high rates (bit 7 is rate control)
 | ||||||
| 		packet[6] = (rudder >> 2)  | (flags & SYMAX_FLAG_FLIP ? 0x40 : 0x00); | 		packet[6] = flags & SYMAX_FLAG_FLIP ? 0x40 : 0x00; | ||||||
| 		packet[7] = (aileron >> 2) | (flags & SYMAX_FLAG_HEADLESS ? 0x80 : 0x00); | 		packet[7] = flags & SYMAX_FLAG_HEADLESS ? 0x80 : 0x00; | ||||||
|  | 		if (flags & SYMAX_XTRM_RATES) {	    // use trims to extend controls
 | ||||||
|  | 			packet[5] |= elevator >> 2; | ||||||
|  | 			packet[6] |= rudder >> 2; | ||||||
|  | 			packet[7] |= aileron >> 2; | ||||||
|  | 		} | ||||||
| 		packet[8] = 0x00; | 		packet[8] = 0x00; | ||||||
| 	} | 	} | ||||||
| 	packet[9] = SYMAX_checksum(packet); | 	packet[9] = SYMAX_checksum(packet); | ||||||
|  | |||||||
| @ -7,9 +7,9 @@ The Deviation project (on which this project was based) have a useful list of mo | |||||||
| <img src="http://img2.cheapdrone.co.uk/images/upload/2014/12/X5C%203/SKU115108-7.jpg" Width="200" Height="200" /> | <img src="http://img2.cheapdrone.co.uk/images/upload/2014/12/X5C%203/SKU115108-7.jpg" Width="200" Height="200" /> | ||||||
| 
 | 
 | ||||||
| ## Channel Map | ## Channel Map | ||||||
| CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8 | CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9 | ||||||
| ---|---|---|---|---|---|---|--- | ---|---|---|---|---|---|---|---|--- | ||||||
| A|E|T|R|FLIP|RATES|PICTURE|VIDEO | A|E|T|R|FLIP|RATES|PICTURE|VIDEO|HEADLESS | ||||||
| 
 | 
 | ||||||
| ## Binding | ## Binding | ||||||
| There are no special binding instructions.  The model powers up in Autobind mode and expects the bind sequence from the transmitter within the first 4-5 seconds.  | There are no special binding instructions.  The model powers up in Autobind mode and expects the bind sequence from the transmitter within the first 4-5 seconds.  | ||||||
| @ -45,6 +45,25 @@ One of the most annoying functions on the Syma X5C is that the motors stop when | |||||||
| 1. When you want to fly in "idle-up" mode flick the switch and your stabilization will always be active.   | 1. When you want to fly in "idle-up" mode flick the switch and your stabilization will always be active.   | ||||||
| 1. Remeber to switch off idle-up as soon as the quad lands (or crashes - to avoid damage to the motors) | 1. Remeber to switch off idle-up as soon as the quad lands (or crashes - to avoid damage to the motors) | ||||||
| 
 | 
 | ||||||
|  | ### Additional notes on rates: | ||||||
|  | 
 | ||||||
|  | The SymaX driver can add full trim to the control output.  Doing so enables | ||||||
|  | dramatic rates, steep angles, and high speeds.  If CH6 is low, the usual Syma | ||||||
|  | full rates will be in effect.  If CH6 is high, the SymaX extreme trim rates will be | ||||||
|  | in effect.  Be cautious when first trying out the extreme rates. | ||||||
|  | 
 | ||||||
|  | The extreme rates do not work with with headless mode because in this | ||||||
|  | mode the trim and the primary control directions may not be aligned - the | ||||||
|  | primary control directions will be based on the headless mode, but the trims | ||||||
|  | remain based upon the quadcopter's heading.  So extreme rates are disabled | ||||||
|  | when headless mode is selected. | ||||||
|  | 
 | ||||||
|  | Be aware that the use of extreme rates and the resulting steep angles will | ||||||
|  | disorient the gyro responsible for maintaining headless mode, and that the | ||||||
|  | direction the quadcopter thinks you selected for headless mode may not be | ||||||
|  | correct after especially wild flights. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # Inductrix (Horizon Hobby) | # Inductrix (Horizon Hobby) | ||||||
| 
 | 
 | ||||||
| <img src="https://s7d5.scene7.com/is/image/horizonhobby/BLH8700_a0" Width="200" Height="200" /> | <img src="https://s7d5.scene7.com/is/image/horizonhobby/BLH8700_a0" Width="200" Height="200" /> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user