完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我的PID这是怎么了?[C] 纯文本查看 复制代码
void ADC_PID(void){int s[6]={0}; for(i=0;i<6;i++){ ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3; printf("nADC_ConvertedValueLocal[%d]:%fn",i,ADC_ConvertedValueLocal); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)==1) { normal=125; if(ADC_ConvertedValueLocal<1.5){ s=temp1; sum+=ADC_ConvertedValueLocal;} } else { normal=150; if(ADC_ConvertedValueLocal<1.5){ s=temp2; sum+=ADC_ConvertedValueLocal;} } }inpid= (ADC_ConvertedValueLocal[0]*s[0]+ ADC_ConvertedValueLocal[1]*s[1]+ ADC_ConvertedValueLocal[2]*s[2]+ ADC_ConvertedValueLocal[3]*s[3]+ ADC_ConvertedValueLocal[4]*s[4]+ ADC_ConvertedValueLocal[5]*s[5])/sum; printf("ninpid%fn",inpid);}void pid(void){position_error_p=Position_Kp*(inpid-normal);position_error_d=Position_Kd*(inpid-pre_inpid);if(0<=(rMotor_Speed+(position_error_p-position_error_d))<999) rMotor_Speed+=(position_error_p-position_error_d); //rightelse if((rMotor_Speed+(position_error_p-position_error_d))<0)rMotor_Speed=0;elserMotor_Speed=999;if(0<(lMotor_Speed-(position_error_p-position_error_d))<999) lMotor_Speed-=(position_error_p-position_error_d);//leftelse if((lMotor_Speed+(position_error_p-position_error_d))<0)lMotor_Speed=0;elselMotor_Speed=999;printf("n×ó??%dn",lMotor_Speed);printf("n????%dn",rMotor_Speed);pre_inpid=inpid; TIM2->CCR1=rMotor_Speed;TIM2->CCR2=0;TIM2->CCR3=lMotor_Speed;TIM2->CCR4=0;}int main(void){while(1) { ADC_PID();pid();}} |
|
相关推荐
1个回答
|
|
|
忘了C语言不支持a
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4872 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
815浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
879浏览 2评论
969浏览 2评论
847浏览 2评论
2173浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-4 06:36 , Processed in 0.666270 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
13455