打印
[控制方法]

【连载】一个复杂电机系统的设计思考.

[复制链接]
楼主: airwill
手机看帖
扫描二维码
随时随地手机跟帖
21
airwill|  楼主 | 2013-8-5 17:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
也许吧, CPLD, FPGA 对我来说, 有点陌生. 一直没有机会好好地弄一下.
单片机做也不是问题. 就是要考虑中断时间. 特别是这么多定时中断都会响应. 要好好地计算一下时间.
简单编写了一个定时中断函数, 编译下来一看, 居然要 40多条指令. 应该还可用优化一下. 或者把要紧的判断先做, 缩短运行中的中断响应时间消耗.
通信方面考虑通过串口, 用 485 总线搭上 modbus 协议, RTU 方式, 这个有完整的数据包格式和纠错机制, 另外, 有这方面的经验. 见 https://bbs.21ic.com/blog-5782-68401.html
继续...

使用特权

评论回复
22
qq260995569| | 2013-8-6 22:10 | 只看该作者
airwill 发表于 2013-8-3 18:29
您的程序执行了一下, 看就是个序列命令执行的动作.
我觉得并不复杂. 实现应该不是问题.
具体动作控制,  ...

请还有个问题问下楼主,望楼主能回答。
86BYG手轮步进电机 额定电压:3.3(V) 额定功率:480W 静力矩12NM ,利用齿轮传动,不知道可以起重多重的物体呢?

使用特权

评论回复
23
airwill|  楼主 | 2013-8-6 22:38 | 只看该作者
首先不讨论齿轮传动问题。
可以起重多重的物体, 归根结底,实际上就是考量电机的驱动扭矩。
86BYG 的步进电机, 静力矩12NM 是一个比较常见的参数。但这个力矩其实只是个静态自锁定的力矩, 跟驱动力矩并没有什么直接关系。
据本人经验,根据电机内部绕组的不太,以及驱动器因素,86 的电机输出扭矩可以远远超过这个值的。但不同的电机又差别很大。最后建议还是实际测量一下。
至于最终能起重多重,可以电机输出扭矩*减速比*传动效率/ 重物力臂 这样计算。

使用特权

评论回复
24
受不了了| | 2013-8-7 11:48 | 只看该作者
这个项目应该不太难,但有点繁:lol

使用特权

评论回复
25
airwill|  楼主 | 2013-8-11 20:33 | 只看该作者
经过多天的扒电脑. 软件和上位机基本有了雏形.
上一个效果图:

这是串口通信, 和控制板脉冲波形图.
控制板根据串口命令要求的频率和脉冲数, 输出规定要求的脉冲.

使用特权

评论回复
26
jrcsh| | 2013-8-12 11:03 | 只看该作者
本帖最后由 jrcsh 于 2013-8-12 11:06 编辑

.............用.51  MCU  应付 步进电机还是很轻松的, 还有其它运算就不知了


分时共用一个 PWM "基准量" 就行了   这个基础量,占用或与其它程序共用一个定时  ,




状态标记,    多路PWM[/td][td][/td][td]



void Timer0Interrupt(void) interrupt 1
{
    TL0 = 0x9C;        //设置定时初值
    TH0 = 0xFF;        //设置定时初值
    TR0 = 1;        //定时器0开始计时
   pwm++;
   
}


if(pwm>1000)
{
pwm=0;
len=0;
ren=0;
}




if(lpwm>pwm)//  L =======
{
len=1;
}
else
{
len=0;
}



if(rpwm>pwm)  //  R =======
{
ren=1;
}
else
{
ren=0;
}
}




if(pwm<3)
{
len=0;
ren=0;
} //强制死区   /可以不要




使用特权

评论回复
27
airwill|  楼主 | 2013-8-13 09:06 | 只看该作者
jrcsh 发表于 2013-8-12 11:03
.............用.51  MCU  应付 步进电机还是很轻松的, 还有其它运算就不知了

楼上的程序给出了一个很好的例子.
解决缺乏定时器资源条件下, 软件产生 PWM 信号的方法.
也是我以前采用过的方法.
对于频率不是很高, 精度要求不高的场合的一个非常简练的解决办法.
TIMER0 可以采用方式 2, 以提高定时器的精度, 简化代码.
感谢楼上的分享.

使用特权

评论回复
28
airwill|  楼主 | 2013-8-18 20:16 | 只看该作者
本帖最后由 airwill 于 2013-8-18 20:17 编辑

今天调试遇到一个奇怪的问题. 跟上位机通信会莫名其妙地断开.
为此找一个 IO 口在中断里翻转.

这个图上面是串口接收数据波形, 下面是中断的翻转. 中断响应时间很稳定, 但接收着就莫名其妙地停下了. 通过接收超时检测进去看看, RXNE 没有置位, ORE 溢出错误倒是置位了?! RDR 寄存器值是图上的 0x70, 是不是这个芯片又有 BUG?

使用特权

评论回复
29
受不了了| | 2013-8-19 15:30 | 只看该作者
版主还在调试串口部分哇:lol

使用特权

评论回复
30
airwill|  楼主 | 2013-8-20 06:12 | 只看该作者
受不了了 发表于 2013-8-19 15:30
版主还在调试串口部分哇

是啊, 折磨人啊, 大有阴沟里翻船的感觉.
经过调试, 发现其实是个软件 BUG. 在这里要还 STM32F051 一个清白.
虽然现在都用 C 编程了, 但发现很多时候, 还需要进入汇编级调试, 才能找到问题

使用特权

评论回复
31
gdszzyq| | 2013-8-27 10:57 | 只看该作者
不知道LZ有没有用驱动器,如果有的话用51也容易,以下是我的一个应用,我把步进脉冲放在定时中断程序里,同时在里面计数,外部程序控制运行速度和正反转等等,多路的话也就多几段代码,程序也不算太长,应该不会影响程序的正常运行。我也刚用步进电机,以下程序供参考。
void timer0()interrupt 1    //提供定时30微秒及产生步进电机驱动脉冲
{
        Run_Time++;
        Pulse_Timer++;
        if(Motor_Run_Flag)
        {
                if(Pulse_Timer<2)Rotate_Pulse=1;
                else
                {
                        Rotate_Pulse=0;
                        if(Pulse_Timer>Speed_Band)
                        {
                                Pulse_Timer=0;
                                Motor_Step_Count++;
                        }
                }
        }
        else Rotate_Pulse=0;
}

使用特权

评论回复
32
受不了了| | 2013-8-27 11:40 | 只看该作者
51的30微秒处理不了几路脉冲的

使用特权

评论回复
33
airwill|  楼主 | 2013-8-27 18:19 | 只看该作者
gdszzyq 发表于 2013-8-27 10:57
不知道LZ有没有用驱动器,如果有的话用51也容易,以下是我的一个应用,我把步进脉冲放在定时中断程序里,同 ...


思路不错. 不知道用的什么芯片?
要是 30uS 能处理这些问题, 估计非得 1T 的芯片不可了.
另外还缺零位置检查.
给你个小技巧, 如果用
    Rotate_Pulse=!Rotate_Pulse;
可以得到更快的速度.

使用特权

评论回复
34
gdszzyq| | 2013-8-28 10:39 | 只看该作者
本帖最后由 airwill 于 2013-9-10 12:07 编辑

STC的,是用1T的,不过我的时钟才8MHZ,谢谢你的指点,不过我对速度没什么要求,原点检测及速度控制程序在外部。


使用特权

评论回复
35
airwill|  楼主 | 2013-9-10 12:07 | 只看该作者
gdszzyq 发表于 2013-8-28 10:39
STC的,是用1T的,不过我的时钟才8MHZ,谢谢你的指点,不过我对速度没什么要求,原点检测及速度控制程序在 ...

原点检测及速度控制程序在外部是可以的. 不过原点检测放在外面可能会人为地导致原点检测误差哦.

呀, 我要回复的, 怎么编辑了呢

使用特权

评论回复
36
airwill|  楼主 | 2013-9-16 09:35 | 只看该作者
零位置检测放在脉冲中断中, 感觉应该可以达到1脉冲的位置精度.
但最近调试中发现电机动作有回滞现象.

使用特权

评论回复
37
受不了了| | 2013-9-16 13:42 | 只看该作者
airwill 发表于 2013-9-16 09:35
零位置检测放在脉冲中断中, 感觉应该可以达到1脉冲的位置精度.
但最近调试中发现电机动作有回滞现象. ...


楼主还在弄回零哇。估计是机械松动或者传感器频率不够。经常用到丝杠回零,重复精度至少都是±1个脉冲,大多数时候±0.5个脉冲

使用特权

评论回复
38
error_dan| | 2013-9-16 20:59 | 只看该作者
LZ要是有钱又有闲我倒是有两款单片机推荐给你,不过选型始终是第一步,后面的路还长的很.
一个是TI的TIVE TM4C123,6个32bit定时器6个64bit定时器,每个定时器可以拆开成两个用,选择带PWM的型号可以节约更多的定时器资源.
二个是富士通的MB系列CM3单片机.和上面的差不多.
其实这个东西用可编程逻辑器件做,是最划算也最可靠的.

使用特权

评论回复
39
dirtwillfly| | 2013-9-17 09:08 | 只看该作者
本帖最后由 dirtwillfly 于 2013-9-17 09:10 编辑

8个电机工业应用可以考虑用PLC,方便扩展,从设计到施工时间短

使用特权

评论回复
40
触觉的爱| | 2013-9-17 10:02 | 只看该作者
一台机器可以考虑用PLC。批量用PLC估计老板不同意

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则