RT-Thread-packages / rt-robot

a platform in creating new exciting robots
Apache License 2.0
111 stars 62 forks source link

[controller/ps2] update init interface && add rocker support #17

Closed sogwms closed 4 years ago

Jakecaigithub commented 4 years ago

//如果采用轮训的方式,当函数的执行频率低于enc->sample_time时,这里就会有测量的误差。需要使用实际的时间间隔。 rt_int16_t encoder_measure_cps(encoder_t enc) { RT_ASSERT(enc != RT_NULL); // TODO // return count per second //measure_time记录当前的时间。 rt_tick_t measure_time = rt_tick_get(); if((measure_time - enc->last_time) < rt_tick_from_millisecond(enc->sample_time)) { LOG_D("Encoder waiting ... "); return enc->cps; }

rt_int32_t diff_count = enc->pulse_count - enc->last_count;

// if (diff_count >= INT32_MAX)
// {
//     diff_count = -(enc->pulse_count + enc->last_count);
// }
// if (diff_count <= INT32_MIN)
// {
//     diff_count = enc->pulse_count + enc->last_count;
// }

//如果采用轮训的方式,当函数的执行频率低于enc->sample_time时,这里就会有测量的误差。需要使用实际的时间间隔。
enc->cps = diff_count * 1000 / (measure_time-enc->last_time);

// enc->cps = diff_count * 1000 / enc->sample_time; enc->last_count = enc->pulse_count; enc->last_time = rt_tick_get();

return enc->cps;

}

sogwms commented 4 years ago

//如果采用轮训的方式,当函数的执行频率低于enc->sample_time时,这里就会有测量的误差。需要使用实际的时间间隔。 rt_int16_t encoder_measure_cps(encoder_t enc) { RT_ASSERT(enc != RT_NULL); // TODO // return count per second //measure_time记录当前的时间。 rt_tick_t measure_time = rt_tick_get(); if((measure_time - enc->last_time) < rt_tick_from_millisecond(enc->sample_time)) { LOG_D("Encoder waiting ... "); return enc->cps; }

rt_int32_t diff_count = enc->pulse_count - enc->last_count;

// if (diff_count >= INT32_MAX)
// {
//     diff_count = -(enc->pulse_count + enc->last_count);
// }
// if (diff_count <= INT32_MIN)
// {
//     diff_count = enc->pulse_count + enc->last_count;
// }

//如果采用轮训的方式,当函数的执行频率低于enc->sample_time时,这里就会有测量的误差。需要使用实际的时间间隔。
enc->cps = diff_count * 1000 / (measure_time-enc->last_time);

// enc->cps = diff_count * 1000 / enc->sample_time; enc->last_count = enc->pulse_count; enc->last_time = rt_tick_get();

return enc->cps;

}

额,你这个可以提 issue, 而不是评论这个 PR,该PR和你说的问题无关