芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

IC解密STM32F103C8T6单片机速度环PID小车程序

IC解密#include "stm32f10x.h"
IC解密#include "PID.h"

int Speed_PID (int16_t target ,int16_t change)   //差速PID控制器        

{         
         float KP=0.405,KI=0.66,KD=0.62;
         float Bias,Pwm,jifen;
         static float Last_Bias;
         Bias=target-change;                                  //计算偏差
         jifen+=Bias;                                         //求出偏差的积分
         Pwm=KP*Bias+KI*jifen+KD*(Bias-Last_Bias);       //位置式PID控制器
         Last_Bias=Bias;   //保存上一次偏差
         if(Pwm>2000) Pwm=2000;
    if(Pwm<-2000) Pwm=-2000;
         //if(target==0&&change==0)Pwm=0;
         return Pwm;       //返回PWM值                                    
        
}


pid.h文件

  1. #ifndef __PID_H
  2. #define __PID_H
  3. #include "stm32f10x.h"                 

  4. int Speed_PID (int16_t target ,int16_t change) ;

  5. #endif


复制代码



注意PID的调用一定不能放在主循环里面,因为主循环的周期会随着代码量增加而变
我是放在中断里面。
int main(void)
{
        OLED_Init();
        Motor_Init();
        //hongwai_Init();
        TIM1_Init(1000,72);                //定时中断初始化
        Encoder_Init_TIM4( );                //编码器初始化
        Encoder_Init_TIM3( );
        
        /*显示静态字符串*/
        OLED_ShowString(1, 1, "Time:");                        //1行1列显示字符串Num:
        OLED_ShowString(1, 8, ":");        
        OLED_ShowString(1, 11, ":");
        OLED_ShowString(2, 1, "Speed:");                //1行1列显示字符串Speed:
        OLED_ShowString(3, 1, "path:");                //1行1列显示字符串Speed:
        OLED_ShowString(3, 11, ".");        //1行1列显示字符串Speed:        
        //Car_go();
        while (1)
        {
                OLED_ShowNum(1,12, miao, 2);                        //不断刷新显示Num变量
                OLED_ShowNum(1, 9, fen, 2);
                OLED_ShowNum(1, 6, shi, 2);
                OLED_ShowSignedNum(2, 7, Speed2, 4);        //不断刷新显示编码器测得的最新速度
                OLED_ShowSignedNum(2, 12, Speed1,4);        //不断刷新显示编码器测得的最新速度
                Car_go();
               
                OLED_ShowNum(3, 6, M, 5);        //不断刷新显示编码器测得的最新速度
                OLED_ShowNum(3, 12, CM, 2);        //不断刷新显示编码器测得的最新速度
                OLED_ShowNum(4,1,sensor[0],1);
                OLED_ShowNum(4,2,sensor[1],1);
                OLED_ShowNum(4,3,sensor[2],1);
                OLED_ShowNum(4,4,sensor[3],1);
                OLED_ShowSignedNum(4, 6, OUTPUT2,5);
                Speed1 = Encoder_Get_TIM4( );        
                Speed2= Encoder_Get_TIM3( );
                //read_sensor();
                if(yan == 0)
                {
                yan = Control();
                }
                //Car_leftstop();
                //Car_rightstop( );
        }
}



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信