simpleBGC engine_drv
2016-12-09 11:09:29 0 举报
AI智能生成
simpleBGC engine_drv 是一款高性能的图形驱动引擎,专为游戏和多媒体应用而设计。它采用了先进的渲染技术和优化算法,能够实现高质量的图像输出和流畅的动画效果。此外,engine_drv还支持多种硬件平台和操作系统,具有良好的兼容性和可扩展性。通过使用 simpleBGC engine_drv,开发者可以轻松地创建出令人惊叹的游戏和多媒体作品,为用户提供极致的视觉体验。
作者其他创作
大纲/内容
setPWM(pwm, phi, power)
-> pwm[3]
-> pwm[3]
PID pid.c
TIM 8,1,(5,4)
CCR1
CCR2
CCR3
TIM8_channel_1 占空比
pointingCmd - sensors.margAttitude500Hz
setPWMData( int *target, int *pwm)
pwm [3] -> phase [3]
pwm [3] -> phase [3]
angle=testPhase = -1.0f * D2R
phase [3]
roll
pitch
yaw
MAX_CNT (PWM_PERIOD * 8 / 10) =800
sensors.margAttitude500Hz[ROLL ] = atan2f(2.0f * (q0q1 + q2q3),
q0q0 - q1q1 - q2q2 + q3q3);
q0q0 - q1q1 - q2q2 + q3q3);
sensors.margAttitude500Hz[PITCH] = -asinf(2.0f * (q1q3 - q0q2));
sensors.margAttitude500Hz[YAW ] = atan2f(2.0f * (q1q2 + q0q3),
q0q0 + q1q1 - q2q2 - q3q3);
q0q0 + q1q1 - q2q2 - q3q3);
TIM8->CCR1 = rollPhase[0];
maxCnt[ROLL] = 0;
minCnt[ROLL] = PWM_PERIOD + 1;
minCnt[ROLL] = PWM_PERIOD + 1;
cnt
TIM1_UP_IRQHandler
TIM8->CNT = timer4timer5deadTimeDelay(80) + 5 + PWM_PERIOD * 2 / 3 (666) =751
TIM1->CNT = timer4timer5deadTimeDelay + 3 + PWM_PERIOD / 3; = 416
TIM4->CNT = timer4timer5deadTimeDelay =80
TIM5->CNT
TIM_BDTRInitStructure.TIM_DeadTime = timer1timer8deadTimeRegister =200
(this is not just a delay value, check CPU reference manual for TIMx_BDTR DTG bit 0-7)
(this is not just a delay value, check CPU reference manual for TIMx_BDTR DTG bit 0-7)
cnt 作用
make sure there is enough time to make all changes
make sure there is enough time to make all changes
setPIDintegralError
zeroPIDintegralError
setPIDstates
zeroPIDstates
iTerm += error * deltaT
ANGULAR?
return(P * error +
I * PIDparameters->iTerm +
D * dAverage);
else
P * PIDparameters->B * command +
I * PIDparameters->iTerm +
D * dAverage -
P * state);//计算增量
dTerm = (error - lastDcalcValue) / deltaT
dTermFiltered-> dAverage
eepromConfig
version
accelTCBiasSlope[3]
accelTCBiasIntercept[3];
gyroTCBiasSlope[3];
gyroTCBiasIntercept[3]
magBias[3]
accelCutoff
KpAcc,KiAcc,KpMag,KiMag
uint8_t dlpfSetting
midCommand
roll,pitch,yaw Power
roll,pitch,yaw Enabled
uint8_t
float
rollAutoPanEnabled;
pitchAutoPanEnabled;
yawAutoPanEnabled;
imuOrientation
rollMotorPoles
pitchMotorPoles
yawMotorPoles
rateLimit
rollRateCmdInput
pitchRateCmdInput
yawRateCmdInput
gimbalRoll.Pitch,YawRate;
gimbalRoll,pitch,yaw; Left Right Limit;
accel X,Y,Z 500HzLowPassTau;
roll,pitch,yaw RatePointingCmd50HzLowPassTau;
roll,pitch,yaw AttPointingCmd50HzLowPassTau;
PIDdata_t PID[NUMBER_OF_PIDS]
B, P, I, D
iTerm
windupGuard
lastDcalcValue
lastDterm
lastLastDterm
dErrorCalc
type
initPID
autoPan
pidCmd[YAW]
motorPos
step = MOTORPOS2SETPNT (0.35)* motorPos
stepSmooth = (stepSmooth * (AUTOPANSMOOTH(40) - 1.0f) + step)
/ AUTOPANSMOOTH
/ AUTOPANSMOOTH
return (setpoint -= stepSmooth)(滞后滤波=平滑)
computeMotorCommands
drv_pwmMotors
updateCounter
setupPWMIrq
TIM8_UP_IRQHandler
TIM1_UP_IRQHandler
TIM5_IRQHandler
timerChannelConfig
timerPWMadvancedConfig
timerPWMgeneralConfig
setPWM
setPWMFastTable
setPWMData
limitYawPWM
activateIRQ
set Roll,pitch,yaw Motor
forceMotorUpdate
pwmMotorDriverInit
autoPan
pidCmd[YAW]
motorPos
step = MOTORPOS2SETPNT * motorPos
stepSmooth = (stepSmooth * (AUTOPANSMOOTH - 1.0f) + step)
/ AUTOPANSMOOTH
/ AUTOPANSMOOTH
return (setpoint -= stepSmooth)
收藏
收藏
0 条评论
下一页