• 大小: 4.78MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-18
  • 语言: 其他
  • 标签: PID  STM32  

资源简介

倒立摆调试,使用步进电机,完全成功,主控芯片是STM32F407VET6,经过多次调试成功稳定。

资源截图

代码片段和文件信息

#include “PID.h“


extern int Encodercntscnts0;
extern float tdtitd1ti1;

PIDTypdDef Pid;

float ZHONGZHI=200;
float D_BiasLast_BiasLast_Bias1;
float Balance_Kp=0Balance_Ki=100Balance_Kd=0Speed_Kp=0Speed_Ki=0Speed_Kd=0;
int balance_pwmspeed_pwmPWMPWM1;
u16 dirflag; 

//定时器14中断
//定时器14中断服务函数用于PID的处理2ms一次
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5TIM_IT_Update)==SET)
{

Encoder = TIM2 -> CNT;               //===读取编码器的值
Encoder = Encoder/10;                //==10以内的误差除去
cnts0 = cnts/100;
      if(Encoder>165&&Encoder<235)
{

GPIO_ResetBits(GPIOBGPIO_Pin_14);           //启动电机
        flag = 1;                                    //电机启动标志位置1

balance_pwm = Balance_angle(Encoder);        //角度环控制
speed_pwm = Speed_control(cnts0);             //速度环控制

Pid.CurrPWM = balance_pwm - speed_pwm;       //===更新PWM
Pid.CurrPWM = 1000000/Pid.CurrPWM;           //时钟分频,得到ARR值

// printf(“Pid.CurrPWM: %d\n“Pid.CurrPWM);

if(Pid.CurrPWM>=0) 
{
dir = 1;                                 //转向标志位置1
GPIO_ResetBits(GPIOB GPIO_Pin_15);      //电机线CW拉低正转
}
else if(Pid.CurrPWM<0) 
{
dir = 0;                                 //转向标志位置0
GPIO_SetBits(GPIOB GPIO_Pin_15);        //电机反转   
Pid.CurrPWM = -Pid.CurrPWM;               //PID结果取绝对值
}
}
  else 
{
GPIO_SetBits(GPIOBGPIO_Pin_14);       //关闭电机
flag = 0;                              //电机关闭标志位置0
cnts = 0;
Pid.CurrPWM = 0;
balance_pwm = 0;
speed_pwm = 0;
PWM = 0;
Last_Bias = 0;
Last_Bias1 = 0;
}

TIM_SetAutoreload(TIM3Pid.CurrPWM);     //ARR赋值
TIM_SetCompare1(TIM3Pid.CurrPWM/2);     //占空比设置50%
TIM_SetCounter(TIM30);                  //因为APRE为设置为立即生效,为避免CNT计数器寄存器内存写穿,每更新一次ARR值,就向CNT清零
}

// printf(“Pid.CurrPWMEncoder: %d%d\n“Pid.CurrPWMEncoder);

  TIM_ClearITPendingBit(TIM5TIM_IT_Update);   //清除中断标志位
}

void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3TIM_IT_Update)==SET) //溢出中断
{
if(flag==1)
{
if(dir==1)
{
cnts++;
if(cnts>25600)
{
cnts = 0;
}
}
else
{
cnts--;
if(cnts<-25600)

cnts = 0;
}
}
}

}
TIM_ClearITPendingBit(TIM3TIM_IT_Update);  //清除中断标志位
}

/*------------------------------------------
 函数功能:增量式PID计算
 函数说明:控制角度环
 步进电机需要用增量式PID
 用位置式的话,怎么调都是抖的 
------------------------------------------*/
int Balance_angle(float a_encode) 
{
float Bias;

Bias = a_encode - ZHONGZHI;      //===求出平衡的角度中值(和机械相关)得到与目标值的误差 

PWM += Balance_Kp*(Bias-Last_Bias) + Balance_Ki*Bias ;    //===计算平衡控制的电机PWM

  Last_Bias = Bias;

return PWM;
}

/*------------------------------------------
  函数功能:位置式PID计算
  函数说明:控制速度环
------------------------------------------*/
int Speed_control(float cnt)
{
float Bias;

Bias = cnts -

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5031  2018-03-23 20:55  倒立摆调试\BALENCE\PID.c

     文件       1010  2018-03-22 21:59  倒立摆调试\BALENCE\PID.h

     文件     109142  2016-04-15 21:57  倒立摆调试\CORE\core_cm4.h

     文件      22735  2016-04-15 21:57  倒立摆调试\CORE\core_cm4_simd.h

     文件      17146  2016-04-15 21:57  倒立摆调试\CORE\core_cmFunc.h

     文件      20513  2016-04-15 21:57  倒立摆调试\CORE\core_cmInstr.h

     文件      29605  2016-04-15 21:57  倒立摆调试\CORE\startup_stm32f40_41xxx.s

     文件       6924  2016-04-15 21:57  倒立摆调试\FWLIB\inc\misc.h

     文件      32880  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_adc.h

     文件      27318  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_can.h

     文件       2416  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_crc.h

     文件      14481  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_cryp.h

     文件      14946  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_dac.h

     文件       4296  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_dbgmcu.h

     文件      12977  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_dcmi.h

     文件      28882  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_dma.h

     文件      19692  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_dma2d.h

     文件       8012  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_exti.h

     文件      24467  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_flash.h

     文件       3275  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_flash_ramfunc.h

     文件      44924  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_fmc.h

     文件      27181  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_fsmc.h

     文件      23548  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_gpio.h

     文件      10084  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_hash.h

     文件      31939  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_i2c.h

     文件       4323  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_iwdg.h

     文件      21191  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_ltdc.h

     文件       7728  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_pwr.h

     文件      30063  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_rcc.h

     文件       3958  2016-04-15 21:57  倒立摆调试\FWLIB\inc\stm32f4xx_rng.h

............此处省略185个文件信息

评论

共有 条评论