智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 973|回复: 0
打印 上一主题 下一主题

编码器

[复制链接]

3

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
威望
229
贡献
130
兑换币
145
注册时间
2014-11-23
在线时间
38 小时
毕业学校
中国矿业大学(北京)
跳转到指定楼层
1#
发表于 2015-4-14 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编码器如何使能呢??

gpio_Interrupt_init(PORTC,5, GPI_DOWN, RING) ;
写这个编码器还是不能传回来脉冲



这个程序用到什么算法?能解释一下吗


int16_t SpeedPID(uint16_t speedCount,uint16_t AmSpeed){
//  uint8_t i;

     static int16_t LastSpeedCut0,LastSpeedCut1,LastSpeedCut2 ,SpeedLastPWMK ;
     int16_t  SpeedPWMKP ,SpeedPWMKI ,SpeedPWMKD,SpeedPWMK ;
     int16_t  SpeedPWMOUT;   
     int16_t  SpeedDifference0=0;
     int16_t  speedDEARE1,speedDEARE2,DSpeed ;              

     SpeedKP = 2;
     SpeedKI = 0;
     SpeedKD = 1;

     LastSpeedCut0 = (int16_t) speedCount ;
     DSpeed =(int16_t) AmSpeed ;

     SpeedDifference0 = DSpeed - LastSpeedCut0  ;
     speedDEARE1 = LastSpeedCut0 - LastSpeedCut1;
     speedDEARE2 = LastSpeedCut2+LastSpeedCut0-2*LastSpeedCut1;
     LastSpeedCut2  = LastSpeedCut1;
     LastSpeedCut1  = LastSpeedCut0;


          SpeedPWMKP = SpeedKP*SpeedDifference0;
          if(SpeedPWMKP>KPPLUSMAX){
           SpeedPWMKP = KPPLUSMAX;
          }else if (SpeedPWMKP <KPNEGATIVEMAX){
          SpeedPWMKP = KPNEGATIVEMAX;                       
          }

       //   uart_putchar(UART0,SpeedDifference0);
       //   uart_putchar(UART0,SpeedPWMKP);  

          SpeedPWMKI = SpeedKI* speedDEARE1;
          if(SpeedPWMKI > KIPLUSMAX){
          SpeedPWMKI = KIPLUSMAX;
          } else if(SpeedPWMKI < KINEGATIVEMAX){
          SpeedPWMKI = KINEGATIVEMAX;
          }

          SpeedPWMKD = SpeedKD* speedDEARE2;
          if(SpeedPWMKD > KDPLUSMAX){
             SpeedPWMKD = KDPLUSMAX;
          } else if(SpeedPWMKD < KDNEGATIVEMAX){
            SpeedPWMKD = KDNEGATIVEMAX;
          }

          SpeedPWMK = SpeedPWMKD+SpeedPWMKI+SpeedPWMKP ;
          if(SpeedPWMK > KWPLUSMAX){
          SpeedPWMK = KWPLUSMAX;
          }else if(SpeedPWMK < KWNEGATIVEMAX){
          SpeedPWMK = KWNEGATIVEMAX;

          }



         SpeedPWMOUT = SpeedLastPWMK + SpeedPWMK ;
         if(SpeedPWMOUT < 0 ){
            SpeedPWMOUT = 0 ;
         } else if(SpeedPWMOUT > KOUPLUSMAX){
           SpeedPWMOUT = KOUPLUSMAX ;

         }
         SpeedLastPWMK = SpeedPWMOUT ;
       //   uart_putchar(UART0,SpeedPWMOUT);
       //   uart_putchar(UART0,SpeedPWMK);        
         return  SpeedPWMOUT ;

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 12:18 , Processed in 0.084734 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表