问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

运动控制器7:TIM2如何中断控制步进脉冲?

发布网友 发布时间:2023-05-27 20:08

我来回答

1个回答

热心网友 时间:2024-09-02 12:06

定时器的中断服务程序定义在  stepper.c 中,而定时器的初始化则定义在函数st_init中.

STEPPER.C是直接驱动步进电机的程序,在文件中,首先申明了一个步进电机的结构体,如下:

typedef struct {

  // 使用BRESENHAM算法

  int32_t counter_x,        // 绘制直线的XYZ参数

          counter_y,

          counter_z;

  uint32_t event_count;

  uint32_t step_events_completed;  // 完成此运动需要的步数量

//下面用于梯形的产生

  uint32_t cycles_per_step_event;     

  uint32_t trapezoid_tick_cycle_counter;                                         

  uint32_t trapezoid_adjusted_rate;     

  uint32_t min_safe_rate;

} stepper_t;

此结构体用于TIM2的中断函数中,具体TIM2如何用,需要怎么样的配置,在移植的时候很关键,下一篇再解读。

TIM2定义了一个静态参数static char pin_h = 1;主要循环的结构如下;

if ((TIM2->SR & 0x0001) != 0) // 如果确实有中断发生,则清除标志和初始值清零。

{TIM2->SR &= ~(1<<0);                TIM2->CNT = 0;

if(pin_h == 0){pin_h++;……}   //这里是计算的重头戏,没怎么看懂

else if(pin_h != 0){

OutputControl((STEPPING_PORT & ~DIRECTION_MASK) | (out_bits & DIRECTION_MASK));

OutputControl((STEPPING_PORT & ~STEP_MASK) | out_bits);  pin_h = 0;}

函数主要执行的是,从计数器从0开始,但是下一个溢出点是通过中间这块的计算来得到的。

源码GRBL还进行了脉宽的设置,也就是说用到了两个定时器,但是我们这里只用到了TIM2.

TIM的初始化设置如下:

RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // enable clock for TIM2

TIM2->PSC = 0;                            // set prescaler

TIM2->ARR = 1000;   // set auto-reload

TIM2->CR1 = 0;                            // reset command register 1

TIM2->CR2 = 0;                            // reset command register 2

TIM2->DIER = (1<<0);                      // Update interrupt enabled

TIM2->CR1 |= (1<<0);                      // Enable Timer

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;     //选择定时器2中断线

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道

NVIC_Init(&NVIC_InitStructure);

黑体加粗部分,我们主要计算的就是下一个重新加载的值,我们可以看到,在下面的函数里面,对ARR进行了重新设置。

TIM2->PSC = prescaler; // set prescaler

TIM2->ARR = ceiling;

函数本体为:config_step_timer,通过入口函数cycle来设置ceiling的值。

继续往上一级调用函数查找,发现steps_per_minute值是通过cycles_per_step_event来获得的,上文中介绍到过这个参数,它是stepper_t结构体中的一个参数,调用此参数的函数在定时器TIM2的中断服务程序中被调用:

TIM2中断服务对重载值进行了设置

这样,普通定时器TIM2开启以后,以初始化的ARR进行中断,中断完成以后,只需要设置ARR,而ARR的设置经过了一系列的复杂计算,具体如何实现,我们下篇再进行解读。定时器处理完ARR后,将引脚进行设置输出,从而输出脉冲。

这样,我们在移植程序时,只需要设置TIM2的初始化部分就可以了。
运动控制器7:TIM2如何中断控制步进脉冲?

继续往上一级调用函数查找,发现steps_per_minute值是通过cycles_per_step_event来获得的,上文中介绍到过这个参数,它是stepper_t结构体中的一个参数,调用此参数的函数在定时器TIM2的中断服务程序中被调用:TIM2中断服务对重载值进行了设置 这样,普通定时器TIM2开启以后,以初始化的ARR进行中断,中断...

关于控制步进、伺服电机的加减速过程和脉冲数的问题?

对于脉冲频率控制加减速过程分两种情况:1、运动距离大于加减速距离,那就按正常加减速脉冲量加上差值; 2、总运动距离小于加减速距离,那就按最小速度移动或相应速度段移动需要的脉冲量。设:移动脉冲量为: m 加速的脉冲量为: ac 减速的脉冲量为: ad 一. m &gt; ac+ad 正常模式 二 、小于...

运动控制器输出到步进电机的A A- B B-是不是就是差分脉冲?

不是,步进电机是不能接收差分讯号,也不支持差分脉冲的。只有步进电机驱动器的讯号接收口才可以。具体怎么确定。如下图:

运动控制卡只能控制步进电机或伺服电机,那么可以用步进电机或伺服电机...

肯定可以了,减速机本来就是直接与 步进电机或 伺服电机 连接的。运动控制卡只是发脉冲信号给伺服驱动器或步进驱动器。还有什么问题,可以咨询一下 长沙市两湖机电设备有限公司,两湖机电主要提供1-4轴以太网运动控制卡。

三菱 信捷plc如何用编码器控制步进电机

首先确定一个定时中断程序,控制精度越高,那么你的定时中断时间应越短,步进电机的控制就在中断里面做。(一般为1-10ms均可。)其实,步进电机的控制可看做有差调节,中断中采集到 这次的编码器脉冲值-上次中断的采集编码器值=脉冲增量,这就是步进电机输出了,根据自己的需求,可以再脉冲增量前乘以一...

如何确定步进电机的脉冲数?

没有细分状态,控制系统每发一个步进脉冲信号,步进电机就按照整步旋转一个特定的角度。步进电机的参数,都会给出一个步距角的值。如110BYG250A型电机给出的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这是步进电机固有步距角。通过步进电机驱动器设置的细分状态,步进电机将会按照细分的步距角...

如何控制步进电机?

问题一:如何控制步进电机??? 步进电机动作的话要靠驱动器来驱动的,步进电机也叫脉冲电机,给一个脉冲转一个角度。12V的话要控制要先买个开关电源,把220V变成12V接到驱动器,再用驱动器控制电机,还要一个外部给脉冲的控制器(单片机或者PLC)给驱动器脉冲信号、问题二:如何控制步进电机 看下...

步进电机如何控制

1.全步进控制:通过给步进电机施加一系列的脉冲信号,每个脉冲信号使电机转动一个固定的角度,通常为1.8度或0.9度。脉冲信号可以由微控制器或步进电机驱动器提供。2.半步进控制:半步进控制是通过在全步进信号之间插入额外的脉冲信号来实现更细微的转动角度。通过在上一步进脉冲之间给出一个额外的脉冲,...

伺服控制系统中如何控制上位机发出的脉冲数

提供速度或电流以及位置信息。脉冲个数和频率取决于主控芯片对于控制指令的处理,最简单的操作,以步进电机控制为例,脉冲频率越快,速度越快,脉冲个数越多,运动距离越远。一般原理都是通过定时器中断进行控制,最基本的就是通过设定定时器中断时间,改变脉冲频率,通过计数器控制脉冲个数。

PLC如何控制步进电机的运行速度和方向

PLC对步进电机也具有良好的控制能力,利用其高速脉冲输出功能或运动控制功能,即可实现对步进电机的控制。步进电机是一种低转子惯量、高定位精度、小误差、控制简单的电机,是运动控制领域的主要执行元件之一。PLC作为一种工业控制计算机,具有模块化结构、配置灵活、高速的处理速度、精确的数据处理能力、多种...

步进控制器如何控制 步进驱动器脉冲电压 步进驱动器脉冲和方向 步进电机的脉冲控制的什么 步进控制器接线 步进控制器接线实例 步进电机控制器设计 步进电机控制器图解 步进电机控制器原理图
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
美菱洗衣机cc故障代码 洗衣机cc什么意思? 洗衣机出现cc什么意思? 关于windows7 ease of access 问题 什么是青步甲? 大狼狗和乡亲们是什么意思? 有纹路的白玉手镯该如何清洁? 白玉手镯怎样清洗 盘锦常盛石化机械制造有限公司临港分公司怎么样? ...如(明天有空吗,有点有电影上映一起出来看怎么样)更容易约出来?_百 ... 狙击手幽灵战士在那调难度的 假设51单片机振荡频率为12MHZ,要求定时/计时器0定时100μs,则可以选择... 只有一边输卵管通畅会自然怀孕吗 卡西欧5382中文说明书,时针和分针怎么调? 80平房子粘结剂用多少 贴纸皮砖需要的粘结挤和填缝剂是怎么算的 pray game幻水晶怎么上交 心如止水,看似表面平静,实则暗流涌动;风中芦苇,看似身不由己,实则根... praygame猫在哪 梦见自己的两个乳房的预兆 praygame幻水晶不能交 praygame尤洛尼娅在哪里 pray gane怎么进地下街 空中花园装修设计攻略空中花园装修风格 什么是综合性红斑狼疮啊?急求答案 疯狂的石头经典台词 信号司索工证能给多少 【历史】葛嫩娘是名妓吗 司索信号工是不是必须缴纳社保 嫩娘去世了吗 抛气球游戏的教育目的 丰收互联还款系统进行批处理要多久 出纳在银行自助柜台的转账凭证会计可以做账吗? 中行个人客户在宁波地区办理人民币同城通存通兑业务的条件是什么? 中国电信在我家小区房子门上方私自安装电信箱子,怎么移掉,向那个部门去... 电信移动联通的宽带盒都装在我家墙上,装修房子能不能要求移走 可不可以让通讯运营公司撤走他们装在门口的宽带盒子? 中国电信路边的大铁箱可以申请移开吗? 电信光纤箱和移动光纤箱都装在我家的外墙应怎样投诉要求移除 业主是否有权要求电信移除电箱 小区的电信分纤箱可以移走吗? 电信线路交接箱按在了我旁边不到两米处,光纤线也沿着我家墙边牵过还越... 外墙联通盒子如何移开 电信工作人员没有经过我同意。把分纤箱安装在我家自建房上,怎么办? QQ飞车中板车是什么车,怎么样? qq飞车手游什么是板车 极品飞车中部分车辆有nfsedition是什么意思 登录三晋通怎么老显示账户与密码不匹配 烈焰飞雪动态账号与密码不匹配怎么回事 论完美 (论人生67)