智能车制作

标题: 【伪学妹求助】电磁求思路 [打印本页]

作者: Greed    时间: 2015-3-28 21:33
标题: 【伪学妹求助】电磁求思路
我只会简单的判断 看技术报告知道找最大值 归一化等  但是我不知道改怎么加进去 求大神讲的具体点

void main()
{
    u16 AD_v[6]={0,0,0,0,0,0};
    uart_init(UART1, 19200);      
    adc_init(ADC1, SE4a);       //PE0   
    adc_init(ADC1, SE5a);       //PE1  
    adc_init(ADC1, SE6a);       //PE2   
    adc_init(ADC1, SE7a);      // PE3   
    adc_init(ADC1, SE8);       //PB0   
    adc_init(ADC1, SE9);       //PB1
    FTM_PWM_init(FTM2, CH0,300, 50);  
    delayms(200);
   while(1)
  {
    AD_v[0]=ad_ave(ADC1, SE4a, ADC_8bit,5);
//    printf("PE0:%d\n\n", AD_v[0]);
//    delayms(200);
    AD_v[1]=ad_ave(ADC1, SE5a, ADC_8bit,5);
//    printf("PE1:%d\n\n", AD_v[1]);
//    delayms(200);
    AD_v[2]=ad_ave(ADC1, SE6a, ADC_8bit,5);
//    printf("PE2:%d\n\n", AD_v[2]);
//    delayms(200);
    AD_v[3]=ad_ave(ADC1, SE7a, ADC_8bit,5);  
//    printf("PE3:%d\n\n", AD_v[3]);
//    delayms(200);
    AD_v[4]=ad_ave(ADC1, SE8, ADC_8bit,5);  
//    printf("PB0:%d\n\n", AD_v[4]);
//    delayms(200);
    AD_v[5]=ad_ave(ADC1, SE9, ADC_8bit,5);        
//    printf("PB1:%d\n\n", AD_v[5]);
//    delayms(200);
    if(AD_v[0]>=120&&AD_v[1]>=120&&AD_v[2]>=110&&AD_v[3]>=125)//初始位置
    {
        FTM_PWM_Duty(FTM2, CH0, 50);
    }
    else if(AD_v[0]>=120&&AD_v[1]>=120&&AD_v[2]>=70&&AD_v[3]>=150)//3号电感处于中心线位置
    {
        FTM_PWM_Duty(FTM2, CH0, 44);
    }
    else if(AD_v[0]>=150&&AD_v[1]>=120&&AD_v[2]>=30&&AD_v[3]>=106||AD_v[4]==0)//1号电感处于中心线位置
    {
        FTM_PWM_Duty(FTM2, CH0, 40);
    }
    else if(AD_v[0]>=120&&AD_v[1]>=120&&AD_v[2]>=148&&AD_v[3]>=88)//4号电感处于中心位置
    {
       FTM_PWM_Duty(FTM2, CH0, 56);
    }
    else if(AD_v[0]>=120&&AD_v[1]>=130&&AD_v[2]>=130&&AD_v[3]>=40||AD_v[5]==0)//6号电感处于中心位置
    {
      FTM_PWM_Duty(FTM2, CH0, 60);
    }
    else if(AD_v[0]>=120&&AD_v[1]>=120&&AD_v[2]>=50&&AD_v[2]<=90&&AD_v[3]>=10&&AD_v[3]<=30)//所有电感在中心线右边
    {
      FTM_PWM_Duty(FTM2, CH0, 64);
      delayms(50);
    }
    else if(AD_v[0]>=120&&AD_v[1]>=120&&AD_v[2]>=10&&AD_v[2]<=50&&AD_v[3]>=50)//所有电感在中心线左边
    {
     FTM_PWM_Duty(FTM2, CH0, 34);
     delayms(50);
    }        
}

这就是我的全部了 求指点

作者: ZERO_乔巴    时间: 2015-3-29 00:51
不连续,还是用pd吧
作者: Greed    时间: 2015-3-29 00:55
ZERO_乔巴 发表于 2015-3-29 00:51
不连续,还是用pd吧

不会用 求指教

作者: Greed    时间: 2015-3-29 00:57
void ScanMax(void)
{
  DisableInterrupts;
  u16 i,j;
  u16 AD_v[6]={0,0,0,0,0,0};
  int max_AD[6]={0,0,0,0,0,0};

  for(i=0;i<1000;i++)
  {
    AD_v[0]=ad_ave(ADC1, SE4a, ADC_8bit,5);
    AD_v[1]=ad_ave(ADC1, SE5a, ADC_8bit,5);
    AD_v[2]=ad_ave(ADC1, SE6a, ADC_8bit,5);
    AD_v[3]=ad_ave(ADC1, SE7a, ADC_8bit,5);
    AD_v[4]=ad_ave(ADC1, SE8, ADC_8bit,5);
    AD_v[5]=ad_ave(ADC1, SE9, ADC_8bit,5);
  }
   for(j=0;j<6;j++)
   {     
      if(AD_v[j] >= max_AD[j])  
      max_AD[j] = AD_v[j];
   }
  
}

又加了个按键提取ad最大值




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2