搜索
bottom↓
回复: 18

咨询使用FreeRTOS控制步进电机脉冲的实现方法

[复制链接]

出0入0汤圆

发表于 2019-6-27 19:36:19 | 显示全部楼层 |阅读模式
需求越来越复杂了,原来的电机驱动板,就是接收简单的指令,通过驱动器控制电机按照某个速度走到某个位置,加减速早就实现了。或按照指令速度一直转。
现在想要把单个电机的多个动作,或多个电机配合的动作,放到驱动板上来做(不要求轨迹,不要求插补)。
这个组合动作还不一定,随时会调整。
而且还要求很短的时间,所以就想到了要多人开发,使用FreeRTOS操作系统,把通信、流程、电机脉冲控制,都分开。

看了几个开发板厂家的讲解资料,讲得都很好。对FreeRTOS的中断处理基本清楚了。
电机脉冲计数、控制脉冲频率,这两个定时器的中断,肯定要放到不被RTOS屏蔽的高优先级中断里。但这样的中断里不能调RTOS的API。

这就需要流程控制的任务,能够获取到电机的动作状态,电机走完后停止,流程控制任务能够响应下一步动作。

暂时只想到了查询的方式,不知道还有没有更好的方法。
各位坛友如果有经验,请不吝赐教。谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-6-27 21:12:40 来自手机 | 显示全部楼层
用一个高优先级任务管理所有电机驱动的定时器

出0入0汤圆

发表于 2019-6-27 22:10:15 | 显示全部楼层
一共几个电机

出0入0汤圆

发表于 2019-6-27 22:22:59 | 显示全部楼层
楼主方便分亨一下这几个开发板的资料吗?

出0入0汤圆

发表于 2019-6-27 22:36:26 | 显示全部楼层
楼主不用担心,FreeRTOS的所有任务调度的优先级都低于系统的硬件中断。你只要别再任务里面关断中断即可。

出0入0汤圆

 楼主| 发表于 2019-6-28 09:22:07 | 显示全部楼层

4到5个,脉冲控制

出0入0汤圆

 楼主| 发表于 2019-6-28 09:22:36 | 显示全部楼层
kinsno 发表于 2019-6-27 22:22
楼主方便分亨一下这几个开发板的资料吗?

正点原子,安富莱。论坛里都有下载链接的帖子啊。自行搜索吧

出0入0汤圆

 楼主| 发表于 2019-6-28 09:26:07 | 显示全部楼层
taoworking 发表于 2019-6-27 22:36
楼主不用担心,FreeRTOS的所有任务调度的优先级都低于系统的硬件中断。你只要别再任务里面关断中断即可。 ...

优先级这个明白。
原来是想用信号量、事件标志或任务通知,当电机的STEP脉冲定时器中断里计数到走完后,通知控制流程的任务的。
但是脉冲定时器中断为了保证时间,不能被BASEPRI屏蔽,所以中断优先级要调高。高于RTOS屏蔽的中断优先级。
而不被RTOS屏蔽的中断,又不能调API,所以。。。

出400入0汤圆

发表于 2019-6-28 11:00:21 | 显示全部楼层
sbusr 发表于 2019-6-28 09:26
优先级这个明白。
原来是想用信号量、事件标志或任务通知,当电机的STEP脉冲定时器中断里计数到走完后, ...

信号量和消息可以在中断里调用,对应后缀有_ISR的就是可以在中断里调用的函数

出0入0汤圆

 楼主| 发表于 2019-6-28 11:32:53 | 显示全部楼层
rainyuoko 发表于 2019-6-28 11:00
信号量和消息可以在中断里调用,对应后缀有_ISR的就是可以在中断里调用的函数 ...

竟然可以这样操作??我再读手册去了。

出0入8汤圆

发表于 2019-6-28 11:54:28 | 显示全部楼层
rainyuoko 发表于 2019-6-28 11:00
信号量和消息可以在中断里调用,对应后缀有_ISR的就是可以在中断里调用的函数 ...

不受操作系统控制的中断中,不得使用操作系统相关API函数。

出0入8汤圆

发表于 2019-6-28 11:56:54 | 显示全部楼层
sbusr 发表于 2019-6-28 09:26
优先级这个明白。
原来是想用信号量、事件标志或任务通知,当电机的STEP脉冲定时器中断里计数到走完后, ...

你不调用API函数,自己定义一个标志位变量不就行了。

出400入0汤圆

发表于 2019-6-28 12:09:20 | 显示全部楼层
ddplys 发表于 2019-6-28 11:54
不受操作系统控制的中断中,不得使用操作系统相关API函数。

所有中断都可以在操作系统里初始化和控制,在进行关键任务时候可以用_enter_critical_region禁止任务调度。使用操作系统的情况下一般也不会不使用操作系统控制中断吧

出0入8汤圆

发表于 2019-6-28 13:47:35 | 显示全部楼层
rainyuoko 发表于 2019-6-28 12:09
所有中断都可以在操作系统里初始化和控制,在进行关键任务时候可以用_enter_critical_region禁止任务调度 ...

在电机控制中,很多算法都是在中断中完成,对于实时性要求严格的算法,必须不受操作系统的中断控制。
基本上我所用过的FOC,BLDC和步进控制时,ADC和PWM波中断都必须不受操作系统控制。

出0入0汤圆

 楼主| 发表于 2019-6-28 14:14:33 | 显示全部楼层
ddplys 发表于 2019-6-28 11:56
你不调用API函数,自己定义一个标志位变量不就行了。

嗯,只能靠自己的全局变量了。

出0入0汤圆

发表于 2019-6-28 16:02:47 | 显示全部楼层
建议参考9楼方案~

出0入0汤圆

发表于 2019-6-29 06:10:03 | 显示全部楼层
对于实时性要求严格的算法,就不用操作系统

出0入0汤圆

 楼主| 发表于 2019-6-30 21:53:06 来自手机 | 显示全部楼层
su33691 发表于 2019-6-29 06:10
对于实时性要求严格的算法,就不用操作系统

算法不是事。是在电机驱动板上(只发脉冲的那种,不是直接控制mosfet),加各种应用级的功能,而且在研发过程中还不停的变,今天说这样地组动作效果好,明天就改成另外的了。
比如,这三四个电机,几个轴实现一组动作。顺序、距离,重复等等。
如果是明确的过程,那还好办了。

出0入0汤圆

发表于 2019-9-16 02:00:10 | 显示全部楼层
sbusr 发表于 2019-6-30 21:53
算法不是事。是在电机驱动板上(只发脉冲的那种,不是直接控制mosfet),加各种应用级的功能,而且在研发 ...

需要抽象出几轴行为的描述方法,通过这个描述方法就可以做分工了,底层干底层,应用层干应用层,实际需求变化只是行为描述的组合,比如G代码
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 09:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表