Rev 1868 | Rev 1870 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1868 | Rev 1869 | ||
---|---|---|---|
Line 76... | Line 76... | ||
76 | * reason for the export is that the ENC-03_FC1.3 modules needs them for calibrating |
76 | * reason for the export is that the ENC-03_FC1.3 modules needs them for calibrating |
77 | * the offsets with the DAC. |
77 | * the offsets with the DAC. |
78 | */ |
78 | */ |
79 | volatile int16_t rawGyroSum[3]; |
79 | volatile int16_t rawGyroSum[3]; |
80 | volatile int16_t acc[3]; |
80 | volatile int16_t acc[3]; |
81 | volatile int16_t filteredAcc[2] = { 0, 0 }; |
81 | volatile int16_t filteredAcc[2] = { 0,0 }; |
- | 82 | volatile int32_t stronglyFilteredAcc[3] = { 0,0,0 }; |
|
Line 82... | Line 83... | ||
82 | 83 | ||
83 | /* |
84 | /* |
84 | * These 4 exported variables are zero-offset. The "PID" ones are used |
85 | * These 4 exported variables are zero-offset. The "PID" ones are used |
85 | * in the attitude control as rotation rates. The "ATT" ones are for |
86 | * in the attitude control as rotation rates. The "ATT" ones are for |
Line 270... | Line 271... | ||
270 | case 8: // Z acc |
271 | case 8: // Z acc |
271 | if (ACC_REVERSED[Z]) |
272 | if (ACC_REVERSED[Z]) |
272 | acc[Z] = accOffset[Z] - sensorInputs[AD_ACC_Z]; |
273 | acc[Z] = accOffset[Z] - sensorInputs[AD_ACC_Z]; |
273 | else |
274 | else |
274 | acc[Z] = sensorInputs[AD_ACC_Z] - accOffset[Z]; |
275 | acc[Z] = sensorInputs[AD_ACC_Z] - accOffset[Z]; |
- | 276 | ||
- | 277 | stronglyFilteredAcc[Z] = |
|
- | 278 | (stronglyFilteredAcc[Z] * 99 + acc[Z] * 10) / 100; |
|
- | 279 | ||
275 | break; |
280 | break; |
Line 276... | Line 281... | ||
276 | 281 | ||
277 | case 11: // yaw gyro |
282 | case 11: // yaw gyro |
278 | rawGyroSum[YAW] = sensorInputs[AD_GYRO_YAW]; |
283 | rawGyroSum[YAW] = sensorInputs[AD_GYRO_YAW]; |
Line 286... | Line 291... | ||
286 | if (ACC_REVERSED[PITCH]) |
291 | if (ACC_REVERSED[PITCH]) |
287 | acc[PITCH] = accOffset[PITCH] - sensorInputs[AD_ACC_PITCH]; |
292 | acc[PITCH] = accOffset[PITCH] - sensorInputs[AD_ACC_PITCH]; |
288 | else |
293 | else |
289 | acc[PITCH] = sensorInputs[AD_ACC_PITCH] - accOffset[PITCH]; |
294 | acc[PITCH] = sensorInputs[AD_ACC_PITCH] - accOffset[PITCH]; |
Line -... | Line 295... | ||
- | 295 | ||
290 | 296 | filteredAcc[PITCH] = |
|
- | 297 | (filteredAcc[PITCH] * (ACC_FILTER - 1) + acc[PITCH]) / ACC_FILTER; |
|
291 | filteredAcc[PITCH] = (filteredAcc[PITCH] * (ACC_FILTER - 1) + acc[PITCH]) |
298 | |
- | 299 | stronglyFilteredAcc[PITCH] = |
|
- | 300 | (stronglyFilteredAcc[PITCH] * 99 + acc[PITCH] * 10) / 100; |
|
- | 301 | ||
292 | / ACC_FILTER; |
302 | |
293 | measureNoise(acc[PITCH], &accNoisePeak[PITCH], 1); |
303 | measureNoise(acc[PITCH], &accNoisePeak[PITCH], 1); |
Line 294... | Line 304... | ||
294 | break; |
304 | break; |
295 | 305 | ||
296 | case 13: // roll axis acc. |
306 | case 13: // roll axis acc. |
297 | if (ACC_REVERSED[ROLL]) |
307 | if (ACC_REVERSED[ROLL]) |
298 | acc[ROLL] = accOffset[ROLL] - sensorInputs[AD_ACC_ROLL]; |
308 | acc[ROLL] = accOffset[ROLL] - sensorInputs[AD_ACC_ROLL]; |
- | 309 | else |
|
299 | else |
310 | acc[ROLL] = sensorInputs[AD_ACC_ROLL] - accOffset[ROLL]; |
- | 311 | filteredAcc[ROLL] = |
|
300 | acc[ROLL] = sensorInputs[AD_ACC_ROLL] - accOffset[ROLL]; |
312 | (filteredAcc[ROLL] * (ACC_FILTER - 1) + acc[ROLL]) / ACC_FILTER; |
- | 313 | ||
- | 314 | stronglyFilteredAcc[ROLL] = |
|
301 | filteredAcc[ROLL] = (filteredAcc[ROLL] * (ACC_FILTER - 1) + acc[ROLL]) |
315 | (stronglyFilteredAcc[ROLL] * 99 + acc[ROLL] * 10) / 100; |
302 | / ACC_FILTER; |
316 | |
Line 303... | Line 317... | ||
303 | measureNoise(acc[ROLL], &accNoisePeak[ROLL], 1); |
317 | measureNoise(acc[ROLL], &accNoisePeak[ROLL], 1); |
304 | break; |
318 | break; |
Line 495... | Line 509... | ||
495 | for (axis = PITCH; axis <= YAW; axis++) { |
509 | for (axis = PITCH; axis <= YAW; axis++) { |
496 | gyroOffset[axis] = (deltaOffsets[axis] + GYRO_OFFSET_CYCLES / 2) / GYRO_OFFSET_CYCLES; |
510 | gyroOffset[axis] = (deltaOffsets[axis] + GYRO_OFFSET_CYCLES / 2) / GYRO_OFFSET_CYCLES; |
497 | // DebugOut.Analog[20 + axis] = gyroOffset[axis]; |
511 | // DebugOut.Analog[20 + axis] = gyroOffset[axis]; |
498 | } |
512 | } |
Line 499... | Line 513... | ||
499 | 513 | ||
500 | // Noise is relative to offset. So, reset noise measurements when changing offsets. |
514 | // Noise is relativ to offset. So, reset noise measurements when changing offsets. |
Line 501... | Line 515... | ||
501 | gyroNoisePeak[PITCH] = gyroNoisePeak[ROLL] = 0; |
515 | gyroNoisePeak[PITCH] = gyroNoisePeak[ROLL] = 0; |
502 | 516 | ||
503 | accOffset[PITCH] = GetParamWord(PID_ACC_PITCH); |
517 | accOffset[PITCH] = GetParamWord(PID_ACC_PITCH); |