智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1687|回复: 3
打印 上一主题 下一主题

[硬件类] 【伪学妹求助】电磁求思路

[复制链接]

21

主题

96

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2150
威望
1012
贡献
618
兑换币
635
注册时间
2014-4-16
在线时间
260 小时
跳转到指定楼层
1#
发表于 2015-3-28 21:33:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我只会简单的判断 看技术报告知道找最大值 归一化等  但是我不知道改怎么加进去 求大神讲的具体点

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);
    }        
}

这就是我的全部了 求指点
回复

使用道具 举报

2

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
411
威望
212
贡献
115
兑换币
123
注册时间
2015-3-6
在线时间
42 小时
毕业学校
北邮
2#
发表于 2015-3-29 00:51:41 | 只看该作者
不连续,还是用pd吧
回复 支持 反对

使用道具 举报

21

主题

96

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2150
威望
1012
贡献
618
兑换币
635
注册时间
2014-4-16
在线时间
260 小时
3#
 楼主| 发表于 2015-3-29 00:55:51 | 只看该作者
ZERO_乔巴 发表于 2015-3-29 00:51
不连续,还是用pd吧

不会用 求指教
回复 支持 反对

使用道具 举报

21

主题

96

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2150
威望
1012
贡献
618
兑换币
635
注册时间
2014-4-16
在线时间
260 小时
4#
 楼主| 发表于 2015-3-29 00:57:59 | 只看该作者
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最大值
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 20:35 , Processed in 0.066566 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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