IC-PT3325使用笔记

IC-PT3325是一款光电编码器芯片 其特点如下图所示

3325是一块增量式编码器芯片  每一圈返回2500个脉冲信号,ABZ信号互补输出,AB两相信号的相位差反应电机的转向,Z信号则是一圈一个脉冲的零信号。UVW是用于无刷直流电机的换向和相位信号但是需要对准。

本人使用STM32F103单片机使定时器工作在编码器模式,接收AB两相的脉冲信号进行计数。计数器计数方向和AB相信号的关系如下图所示,(本人的设计中A相信号接在TI1,B相信号接在TI2)。

本人使用的是STM32cubeMX配置的工程,编码器配置如下图所示。选择组合通道中的编码器模式,通道1和通道2会自动设为编码器模式,本人的设计中只计A相的脉冲所以2分频,定时器的编码器模式有低通滤波器我没有使用。从上升沿开始计数,其余的都是默认。使用STM32cubeMX5.2.1固件库使用F1的1.7.0版本。

使用算法将16位计数器扩展为32计数。设置50ms中断读取一次计数器数据,32位数据存储1s内的次数得到转速。

void HAL_TIM_PeriodElapsedCallback( TIM_HandleTypeDef* htim )
{
    if( TIM4 == htim->Instance )
    {
        now_count = __HAL_TIM_GET_COUNTER(&htim3);     //50ms一次中断取出计数器数值
        Angle = now_count - last_count;                //计算出单位时间内脉冲数
        if (Angle < 0)                                 //负数转为正数
        {
            Angle = Angle + count_period;
        }
        
        last_count = now_count;                         //将此次脉冲数存
        Pulsecount1 = Pulsecount1 + Angle;              //累加单位时间内脉冲 32位数据  
        time_cnt++;                                     //时间变量累加   
        
        now_count = 0;                                  //变量清零
        Angle = 0;                                      //角度变量清零
        if (time_cnt >= 20)
        {
            time_cnt = 0;
            Pulsecount = Pulsecount1 / 2500;
            Pulsecount1 = 0x00000000;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值