智能车制作
标题:
【伪学妹求助】电磁求思路
[打印本页]
作者:
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