注册 登录
查看: 363|回复: 4

PWM控制电机差速

[复制链接]
发表于 2014-5-22 20:49:08 | 显示全部楼层 |阅读模式
用这个程序来进行车轮的差速调节,车轮会一个很快,另一个很慢,用手碰快的,哪个快的会停止,慢的会快起来,
如果2个编码器单独的使用其中的一个,速度控制的很好,但是两个一使用时就会出错。
main()
{
tpm_pulse_init(TPM2,TPM_CLKIN0,TPM_PS_1); //分频的作用是什么?  应该是计数的值减半
        lptmr_pulse_init(LPT0_ALT2,INT_COUNT, LPT_Rising);
tpm_pwm_init(TPM1, TPM_CH1,2000,0);  //PTA2
   tpm_pwm_init(TPM1, TPM_CH0,2000,0); //PTA1
while(1)
{
DELAYms(100);
count   =  tpm_pulse_get(TPM2);   
        data = lptmr_pulse_get();
        lptmr_pulse_clean();        
        tpm_pulse_clean(TPM2);
tpm_pwm_duty(TPM1, TPM_CH1,pidbm());
tpm_pwm_duty(TPM1, TPM_CH1,pwm1());
}
}
int pidbm()
{
  static double UK=0,UY=0,err=0,err1=0,err2=0;
  
  err=want-count*2;

   static    int want=1000;
  UY=k*err+ka*tee1+kaa*tee2;
  
  tee2=err1-err2;
  tee1=err-err1;
  err2=err1;
  err1=err;
  
  UK=(int)UY;
  SB=SB+UK;
  
  if(SB<=0)
  {
    SB=0;
   
  }
  if(SB>=8000)
  {
  
  SB=8000;
  }
  
return SB;
}
int pwm1()
{
   static    int want1=1000;
static double  trr=0,trr1=0,trr2=0;
  static double UY1=0,arr=0,arr1=0,arr2=0 ,UK1=0;;
  arr=want1-data*2;


  UY1=k*arr+ka*trr+kaa*trr1;
  
  trr=arr-arr1;
  trr1=arr1-arr2;
  arr2=arr1;
  arr1=arr;
  UK1=(int)UY1;
  TW=TW+UK1;
  if(TW<=0)
  {
    TW=0;
   
  }
  if(TW>=8000)
  {
  
  TW=8000;
  }
  return TW;
}

回复

使用道具 举报

发表于 2014-5-23 02:51:15 | 显示全部楼层
使用两个和单独使用一个,他们的耗电是不一样的,因此电池电压也不一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 13:51:26 | 显示全部楼层
丌官娅硕 发表于 2014-5-23 02:51
使用两个和单独使用一个,他们的耗电是不一样的,因此电池电压也不一样

那是稳压出毛病了

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 13:53:42 | 显示全部楼层
是不是我们的稳压出毛病了
回复 支持 反对

使用道具 举报

发表于 2014-5-24 15:06:56 | 显示全部楼层
测量一下,两个一起用的时候,两者的电压,和pwm有啥区别
回复 支持 反对

使用道具 举报

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

本版积分规则

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