字车移动同步喷墨算法

一、逻辑分析:

1、字车呈Z型逐行移动,将所需打印的平面逐行扫描通过。

2、根据字车的相对位置(单位为step),获取图片数据的的像素值(Pix_Value),再输出到喷头。

3、TIMER IO口输出PWM波,IO口控制方向和使能、需要捕获实时的相对位置,可以通过TIM_IT_CCx溢出来捕获PWM波脉冲。进而来判断当前的位置。

二、STM32的TIMER 分析

1、速度可调:需要随时改变TIMER频率

2、脉冲宽度大于10uS,驱动器决定

3、改变CCER 可以关闭相关通道PWM输出

4、TIM3可以输出4路PWM波形

三、程序实例

配置如下:

由于步进电机采用了专门的驱动芯片thb6064ah,所以现在主要控制thb6064ah的脉冲即可。主要通过四路定时器的配置,设置他们为PWM输出模式,具体的配置见下:

NVIC_InitTypeDef NVIC_InitStructure;   
TIM_TimeBaseStructure.TIM_Period = 20000;
TIM_TimeBaseStructure.TIM_Prescaler = 17;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 10000;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC4Init(TIM4, &TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); 

TIM_ITConfig(TIM4, TIM_IT_CC4, ENABLE);

TIM_ARRPreloadConfig(TIM4, ENABLE);

四路OCX分别分配到四路通用定时器1,2,3,4;设置四路定时器为PWM中断,主要是通过其控制PWM脉冲个数。定时器周期可以在中断中修改。下面是中断服务历程。主要是实现加减速和脉冲技术功能:

void TIM4_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM4, TIM_IT_CC4) != RESET)
    {
        //TIM4_configure(PWM1_coff[mm++]);
        TIM_ClearITPendingBit(TIM4, TIM_IT_CC4); 
        current_d_num++;
        if(current_d_num<motor_d_num)
        {
            if(current_d_num>30) 
            motor_d_timer= motor_d_timer-motor_d_set_num;
            else
            motor_d_timer=motor_d_timer-600;
            TIM4->ARR= motor_d_timer;
            TIM4->CCR4 = (motor_d_timer)/2;
        }
        else if(current_d_num>(motor_d_step-motor_d_num))
        {
            motor_d_timer = motor_d_timer+500;
            TIM4->ARR= motor_d_timer;
            TIM4->CCR4 = (motor_d_timer)/2;
            if(current_d_num==motor_d_step)
            {
                TIM_Cmd(TIM4, DISABLE);motor_d_step_end=1;
            }
        }
    }
}

变量current_d_num为脉冲计数,通过调节下个脉冲的周期来实现加减速功能。如果脉冲数到则可停止脉冲的发送,这样来控制步长。加减速的机制自己可以设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值