初级会员
- 积分
- 120
- 金钱
- 120
- 注册时间
- 2014-9-14
- 在线时间
- 17 小时
|
1金钱
/************************************** 速度计算 ***************************************/
g_hallless_three.Filter_Edge = uemf_edge(g_hallless_three.QFilter_Status[0]);
if(g_hallless_three.Filter_Edge == 0)//1 -> 0/* 统计过零信号的高电平时间 */信号由1变为0
{
/* 延迟30°换相,因为硬件上低通滤波器和软件延迟的原因,实际延迟角度需小于30°,
最优解可以通过示波器确定 */
if(count_i >= 4)/*稳定检测到过零信号才对速度进行测量*/
{
if(g_bldc_motor1.dir == CW)
g_hallless_three.Speed_RPM = ((uint32_t)SPEED_COEFF/count_j);
else// count_j++:运行过程时间计数 18K的中断频率为单位 */
g_hallless_three.Speed_RPM = -((uint32_t)SPEED_COEFF/count_j);
FirstOrderRC_LPF(g_bldc_motor1.speed,g_hallless_three.Speed_RPM,0.2379); /* 过滤尖峰带来的影响 */
}
g_hallless_three.Filter_Delay = count_j/ 10; /* 实际延迟时间 */
g_hallless_three.Filter_Count = 0;
count_j = 0;
count_i++; /* 捕捉过零点,累计次数 */
}
如上程序,count_j应该是180度的计时,延时时间,30度不应该是count_j/ 6,怎么成了count_j/ 10??
|
|