QiuDong 发表于 2017-3-28 22:27:17

求解:直流电机编码输出转换成速度的计算问题??

大功率,库函数版。程序中有些地方不太理解。

Encoder_Left=-Read_Encoder(2);   
Encoder_Right=Read_Encoder(4);   
这两句程序得到了编码器的输出波形个数之后。是如何计算得到速度的??
软件编码采用4倍频技术,得到的波形个数需要除以4吗?

app_3=Encoder_Right*1.1; if(app_3<0)app_3=-app_3;                                      
app_2=Encoder_Left*1.1;if(app_2<0)app_2=-app_2;
发送到APP的显示的数据,直接发Encoder_Right*1.1,Encoder_Left*1.1,不会很大吗???
显示范围不是0-100?

看了好久的程序。没有发现程序在哪里进行过处理。。。。求解!求解!

admin 发表于 2017-3-28 23:22:22

Read_Encoder函数里面有清零操作,而且是单位时间读取的,所以,这也就是M法测速哈。STM32是硬件计数的,在配置编码器接口的时候使用编码器模式3即可。速度值最大是80多,乘以1.1,正好对应0~100%的码盘。


QiuDong 发表于 2017-3-29 13:56:27

admin 发表于 2017-3-28 23:22
Read_Encoder函数里面有清零操作,而且是单位时间读取的,所以,这也就是M法测速哈。STM32是硬件计数的,在 ...

M测速测的只是电机的转速吗?对M法测速不是很了解,不知道怎么算。可以分享一些M法测速的学习资料吗???

另外还一个问题,外部int EXTI9_5_IRQHandler(void) 中断函数里面,

Flag_Target=!Flag_Target;
if(Flag_Target==1)               //5ms读取一次陀螺仪和加速度计的值,更高的采样频率可以改善卡尔曼滤波和互补滤波的效果


}//10ms控制一次,为了保证M法测速的时间基准,首先读取编码器数据
Encoder_Left=-Read_Encoder(2);       //===读取编码器的值,因为两个电机的旋转了180度的,所以对其中一个取反,保证输出极性一致
Encoder_Right=Read_Encoder(4);      //===读取编码器的值



我怎么觉得应该是10ms读取一次陀螺仪和加速度计的值,5ms读取一次编码器数据呢,跟注释不一样。


求指导!!!求指导!!!求指导!!!

cxc 发表于 2017-4-13 23:27:53

admin 发表于 2017-3-28 23:22
Read_Encoder函数里面有清零操作,而且是单位时间读取的,所以,这也就是M法测速哈。STM32是硬件计数的,在 ...

你好,如果只是一个相位输出要怎么测速,编码器如何配置呢?谢谢

admin 发表于 2017-4-14 12:47:46

QiuDong 发表于 2017-3-29 13:56
M测速测的只是电机的转速吗?对M法测速不是很了解,不知道怎么算。可以分享一些M法测速的学习资料吗?? ...

注释没问题的,

admin 发表于 2017-4-14 12:48:07

cxc 发表于 2017-4-13 23:27
你好,如果只是一个相位输出要怎么测速,编码器如何配置呢?谢谢

通过定时器测量方波的脉冲即可

魂萦xy 发表于 2017-4-19 22:57:54

admin 发表于 2017-4-14 12:47
注释没问题的,

你好,我也觉得注释有问题呢,程序中是5ms读取电机编码器的值,10ms读取mpu6050的值。Flag_Target=!Flag_Target;
   if(Flag_Target==1)                                          
                {
                        Get_Angle();                                                      //===更新姿态       
                        return 0;                                                       
                }   

魂萦xy 发表于 2017-4-19 22:59:02

admin 发表于 2017-4-14 12:47
注释没问题的,

你好,我也觉得注释有问题呢,程序中是每5ms读取电机编码器的值,10ms读取mpu6050的值。Flag_Target=!Flag_Target;
   if(Flag_Target==1)                                          
                {
                        Get_Angle();                                                      //===更新姿态       
                        return 0;                                                       
                }   
这段程序不就是每两次中断10ms跟新一次姿态吗?

魂萦xy 发表于 2017-4-19 23:03:50

魂萦xy 发表于 2017-4-19 22:59
你好,我也觉得注释有问题呢,程序中是每5ms读取电机编码器的值,10ms读取mpu6050的值。Flag_Target=!Fla ...

抱歉,看错了,我明白了,没看到return 0;

mwr 发表于 2018-5-17 14:35:35

魂萦xy 发表于 2017-4-19 23:03
抱歉,看错了,我明白了,没看到return 0;

这里我没明白为什么是10ms读取一次编码器的值,return 0是如何理解的
页: [1] 2
查看完整版本: 求解:直流电机编码输出转换成速度的计算问题??