void TIM2_IRQHandler(void)
{
float iErr_X,dErr_X=0;
float iErr_Y,dErr_Y=0;
float PID_OUT_X=0;
float PID_OUT_Y=0;
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit (TIM6 ,TIM_IT_Update );
Kp=1.2;
Kd=49;
Ki=0;
Err_X =X-AImY ;
Err_Y =Y-AImY ;
iErr_X+=Err_X;
iErr_Y+=Err_Y;
//*****************************
if(iErr_X >iErr_X_MAX)
iErr_X=iErr_X_MAX;
if(iErr_X <iErr_X_MIN)
iErr_Y=iErr_X_MIN;
//对x积分限幅
//对y积分限幅
if(iErr_Y >iErr_Y_MAX)
iErr_Y=iErr_Y_MAX;
if(iErr_Y<iErr_Y_MIN)
iErr_Y=iErr_Y_MIN;
//*****************************
//求微分
dErr_X -=Err_X;
dErr_Y -=Err_Y;
//***********************
//计算输出;电机有一个初始值;
PID_OUT_X =motor_inti_X+Kp*iErr_Y+Ki*Err_X+Kd*dErr_X;
PID_OUT_Y =motor_inti_Y+Kp*iErr_Y+Ki*Err_Y+Kd*dErr_Y;
// if(PID_OUT_X < X_OUT_MAX)
if(PID_OUT_X >9370)
PID_OUT_X = 9370;
if(PID_OUT_X <9200)
PID_OUT_X = 9200;
if(PID_OUT_Y > 9370)
PID_OUT_Y= 9370; //板子8度
if(PID_OUT_Y < 9200)
PID_OUT_Y = 9200; //板子8度
TIM_SetCompare1(TIM3,PID_OUT_X); //修改比较值,修改占空比
TIM_SetCompare2(TIM3,PID_OUT_Y); //修改比较值,修改占空比
}
TIM_ClearITPendingBit(TIM6, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
}
//**************************************************************************
//计算PID并且输出舵机参数
//定时器6中断服务程序
#define center_X 250 //中心坐标//还未传递给目标值AImY ,AImY
#define center_Y 250
//************************
#define iErr_X_MAX 200 //积分限幅
#define iErr_Y_MAX 200
#define iErr_X_MIN -200 //积分限幅
#define iErr_Y_MIN -200
//舵机初始值
#define motor_inti_X 9325
#define motor_inti_Y 9325
//*********************
float Kp,Ki,Kd=0; //PID参数
extern u32 X;
extern u32 Y;
float Err_X,Err_Y=0;//用来存误差
//目标位置
u32 AImY;
u32 AImY;
u8 ov_fram
void TIM3_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO_A;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //A.6 TIM3_CH1;A.7 TIM_CH2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOGPIO_A.6.7;
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
//初始化TIM3 Channel 1 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM4在CCR2上的预装载寄存器
//初始化TIM3 Channel 2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM3
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
板球系统2017电赛B题 (193个子文件)
OV7725_OV7670.uvguix.Administrator 84KB
OV7725_OV7670.axf 383KB
keilkilll.bat 399B
stm32f10x_tim.c 107KB
lcd.c 83KB
ILI93xx.c 81KB
stm32f10x_flash.c 61KB
stm32f10x_rcc.c 50KB
stm32f10x_adc.c 46KB
stm32f10x_i2c.c 45KB
stm32f10x_can.c 44KB
stm32f10x_usart.c 37KB
system_stm32f10x.c 36KB
stm32f10x_fsmc.c 35KB
stm32f10x_spi.c 30KB
stm32f10x_dma.c 29KB
stm32f10x_sdio.c 28KB
stm32f10x_gpio.c 23KB
stm32f10x_dac.c 19KB
core_cm3.c 17KB
usmart.c 15KB
timer.c 15KB
stm32f10x_cec.c 11KB
usmart_str.c 11KB
stm32f10x_pwr.c 9KB
stm32f10x_rtc.c 8KB
stm32f10x_bkp.c 8KB
delay.c 8KB
ov7725.c 8KB
misc.c 7KB
stm32f10x_exti.c 7KB
ov7670.c 7KB
exti.c 6KB
main.c 6KB
stm32f10x_wwdg.c 6KB
stm32f10x_dbgmcu.c 5KB
usart.c 5KB
stm32f10x_iwdg.c 5KB
tpad.c 5KB
sccb.c 4KB
sccb.c 4KB
stm32f10x_crc.c 3KB
stm32f10x_it.c 2KB
key.c 2KB
usmart_config.c 2KB
led.c 1KB
sys.c 795B
beep.c 756B
lcd.crf 307KB
main.crf 296KB
stm32f10x_tim.crf 294KB
usmart_config.crf 291KB
ov7725.crf 285KB
usmart.crf 283KB
timer.crf 283KB
ov7670.crf 281KB
tpad.crf 279KB
stm32f10x_rcc.crf 279KB
usart.crf 278KB
stm32f10x_usart.crf 278KB
stm32f10x_fsmc.crf 278KB
usmart_str.crf 277KB
exti.crf 277KB
stm32f10x_gpio.crf 276KB
sccb.crf 275KB
key.crf 274KB
system_stm32f10x.crf 273KB
delay.crf 273KB
led.crf 273KB
stm32f10x_exti.crf 273KB
sys.crf 272KB
misc.crf 272KB
stm32f10x_it.crf 272KB
core_cm3.crf 4KB
main.d 1KB
usmart_config.d 1KB
ov7670.d 1KB
ov7725.d 1KB
exti.d 991B
lcd.d 964B
usmart.d 916B
stm32f10x_usart.d 912B
timer.d 910B
stm32f10x_fsmc.d 895B
stm32f10x_gpio.d 895B
stm32f10x_exti.d 895B
tpad.d 889B
stm32f10x_rcc.d 878B
stm32f10x_tim.d 878B
usmart_str.d 842B
usart.d 826B
system_stm32f10x.d 812B
sccb.d 793B
stm32f10x_it.d 791B
key.d 768B
delay.d 765B
led.d 729B
misc.d 725B
sys.d 690B
core_cm3.d 104B
共 193 条
- 1
- 2
资源评论
includeDISPLAY
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功