Пробовал, для вычисления нужно много точек >10. После всех усреднений в плиз максимум что получается передавать в контроллер 10-15 гц. Сделал совсем просто но результат правильный, проверил рулеткой +-5мм.
Подсчитываю так :
Код
//------------------------------------------------------------------------------------//
void getdistancefrommeter(void){
uint32_t low1temp,low2temp,hight1temp,hight2temp;
float calculatehight;
spi_upd_data(datafromfpga,datatofpga,FPGABUFSIZE);
low1temp = (((256*datafromfpga[1])+datafromfpga[2])&0xffff); //mixer 1
low2temp = (((256*datafromfpga[4])+datafromfpga[5])&0xffff); //mixer 2
DistenceCounterStruct.DistanceLow = (low1temp+low2temp)/2;
hight1temp = (((256*datafromfpga[7])+datafromfpga[8])&0xffff);
hight2temp = (((256*datafromfpga[10])+datafromfpga[11])&0xffff);
DistenceCounterStruct.DistanceHight = (hight1temp+hight2temp)/2;
DistenceCounterStruct.TimeGetVal = SYS_GetTick();//for calculate velos.
if(DistenceCounterStruct.DistanceHight < POINT_5M){
calculatehight = 0.5 * DistenceCounterStruct.DistanceLow;
}else if((DistenceCounterStruct.DistanceHight > POINT_5M)&&(DistenceCounterStruct.DistanceHight < (POINT_5M+POINT_DELTA) )){
calculatehight = 3.28 * DistenceCounterStruct.DistanceHight * 0.5;
}else if((DistenceCounterStruct.DistanceHight >= (POINT_5M+POINT_DELTA)&&(DistenceCounterStruct.DistanceHight<POINT_10M))){
calculatehight = 0.5 * DistenceCounterStruct.DistanceLow + 5000.0;
}
DistenceCounterStruct.Distance_mm = calculatehight;
}
//------------------------------------------------------------------------------------//
Не очень удобно нужно точки вносить, и вместе перехода 360-0 градусов точность меньше. Что можно еще сделать?
Результат