Вопросы в деталях.
Помогите разобраться в ряде фрагментов кода.
1.
Код: Выделить всё
//Сначала легкий фильтр на сам угол
//0.5 и маски - это магия нечувствительности фильтра к разнице углов больше 360
//Чтобы при обнулении угла при переходе через 360 градусов при
//вычитании из 5 градусов 355 получилось 10 (в IQ формате)
p->theta_finish=p->theta_finish+_IQmpy(_IQ(0.5),((p->theta_elec-p->theta_finish+_IQ(0.5))&0x00FFFFFF)-_IQ(0.5));
p->theta_finish&=0x00FFFFFF;2.
Код: Выделить всё
temp = (p->theta_finish << 8) - (p->theta_start << 8);
p->d_fi = (temp >> 8);3.
Код: Выделить всё
//скорость нефильтрованная, рассчитанная из производной угла за один период
p->speed_elec_temp=_IQmpy(p->d_fi,p->KThetaToSpeed)<<3;Или я что-то пропустил? Получается произведение всегда 0?

