编码器测速,为什么有脉冲有输出,速度没有?
-
import pyb from pyb import Timer, Pin import cmath #配置编码器AB相读取模式,利用定时器中断进行读取 p1_A = Pin("P7"); p2_A = Pin("P8"); tim_A = pyb.Timer(4) tim_A.init(prescaler=0,period=10000) ch1_A = tim_A.channel(1,pyb.Timer.ENC_AB,pin=p1_A); ch2_A = tim_A.channel(2,pyb.Timer.ENC_AB,pin=p2_A); class Encoder: def __init__(self, encoder_freq, tim_A): ''' 入口参数:编码器读取频率 修改: 1.需要自行定义编码器引脚及其相关定时器配置 2.需要自行定义编码器精度 #速度值=(采集到的脉冲数/编码器分辨率)*轮子周长*控制频率 ''' # 初始化常量 self.pi = cmath.pi # pi的值 self.encoder_precision = 4*13*30 # 编码器精度 = 倍频数*编码器精度(电机驱动线数)*电机减速比 # self.control_time = 1/encoder_freq # 单位为 s self.encoder_freq = encoder_freq self.tim_A = tim_A self.encoder_A = 0 # 定时器中断:固定时间读取编码器数值 timer_read = Timer(3,freq=self.encoder_freq,callback=self.encoder_cb) def encoder_cb(self, encoder): ''' 函数功能:通过定时器中断读取编码器A、B计数值,并重置编码器 ''' # self.encoder_A = self.tim_A.counter() self.encoder_A = (10000 - self.tim_A.counter()) if self.encoder_A == 10000: self.encoder_A = 0 # print("encoder_A:", self.encoder_A) self.tim_A.counter(0) def get_speed_A(self): ''' 函数功能:读取编码器A计数值,将编码器A计数值转化为速度值,同时将编码器值置零 入口参数:编码器对应定时器 返回值 :编码器值 #速度值=(采集到的脉冲数/编码器分辨率)*轮子周长*控制频率 ''' print("encoder_A:", self.encoder_A) speed = (self.encoder_A / (self.encoder_precision )) * (2*self.pi*0.03) * self.encoder_freq print("-------------speed_A:", speed) return speed import encoder import car if __name__ == '__main__': # 编码器初始化 enc = encoder.Encoder(5, encoder.tim_A) speed_A = enc.get_speed_A() # 获取当前速度值 while True: car.run (50,50) print("enc.encoder_A:",enc.encoder_A) print("speed_A",'%.5f'%speed_A)
-
老哥请问你搞出来了吗?能分享一下源码吗?感谢!
-
这个编码器的类不是我写的,我也没办法调试。