打印
[控制方法]

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

[复制链接]
14697|64
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
airwill|  楼主 | 2013-7-30 11:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
曾经在若干年前, 设计过一个8个步进电机, 能够各自独立动作控制的工控系统.
呵呵这样的系统用在什么地方, 想必不说大家都能猜得出来.
由于芯片性能的限制, 当时用了 5 片 AVR 通过总线系统连接起来, 一个 AVR 作为主控, 接收主机的命令, 并给四个子机发命令. 很庞大和繁琐的方案.
设计中还被 AVR 的一些不足折腾得够呛.

这次应朋友要求, 重新做个方案.

相关帖子

沙发
受不了了| | 2013-7-30 12:01 | 只看该作者
据说纺织行业用的步进电机就很多

使用特权

评论回复
板凳
qinshihao| | 2013-7-30 12:47 | 只看该作者
学习学习~

使用特权

评论回复
地板
uet_cache| | 2013-7-30 19:11 | 只看该作者
如果有最简单的方法,最好用最简单的方案。

使用特权

评论回复
5
wuzx-61| | 2013-7-30 19:59 | 只看该作者
愿见其详!

使用特权

评论回复
6
mmuuss586| | 2013-7-30 22:08 | 只看该作者
你用FPGA好了。

使用特权

评论回复
7
mmuuss586| | 2013-7-30 22:09 | 只看该作者
用DSP或ARM也行,51也行(100M的那种)。

使用特权

评论回复
8
airwill|  楼主 | 2013-7-31 09:18 | 只看该作者
2楼猜得非常准啊
为了保证电机控制, 考虑还是用定时器来产生脉冲. 用捕捉翻转或者 PWM 信号来产生脉冲信号.
定时中断做计数. 这里必须考虑要避免因中断不及响应而引起的脉冲过多输出问题.
打算摒弃原来多个 MCU 的方案. 定时中断和通信中断绞合在一起, 也是导致偶尔技术错误或者通信没有响应的因素.
这样:
哪里去找这么多定时器的 MCU.

使用特权

评论回复
9
受不了了| | 2013-7-31 10:36 | 只看该作者
:lolPWM发脉冲无法计数,进而加减速处理时个问题,虽然脉冲质量很好,定时器采用翻转还是不错的,就几个微秒,一个MCU控制两三个步进还是没什么影响的。没做过纺织方面的控制,只是听别人说起过,前几年做这个的还挣了不少钱,现在行业有些萎缩了

使用特权

评论回复
10
受不了了| | 2013-7-31 10:41 | 只看该作者
C8051F的PCA可以当定时器用,所以总的加起来它有9个定时器。S7-200的脉冲不知道是怎么发送的,可以计数质量也很好,加减速也马马虎虎,但它只能发一路,同时两路脉冲就一塌糊涂

使用特权

评论回复
11
airwill|  楼主 | 2013-8-1 17:46 | 只看该作者
C8051F的PCA, 听起来不错哦, 只是 PCA 的频率好象都是一致的.

看看手头的板子, 琢磨了又琢磨. 最后考虑用 STM32F051 来做.
TIM1,2,3,6,14,15,16,17 竟然有 8 个独立的定时器. 还有很多灵活的通信端口, 为什么不用呢?
不过 TIM6 却不能生成脉冲信号输出.
看来只能做出一部分完全独立, 另一部分则用相同的频率了.

使用特权

评论回复
12
airwill|  楼主 | 2013-8-3 12:40 | 只看该作者
考虑尽量多地使用定时器.
采用定时中断来实现计数, 并在计数结束时关闭输出, 仔细分析, 决定采用 PWM 方式来参数脉冲, 相对于输出翻转可以减少定时中断的发生频率. 由于定时中断很多, 为了避免过多的中断响应排队, 导致来不及计数而多出脉冲的情况, 定时器输出也使用预装载.
通信方面: 这个 MCU 的串口还是蛮给力的. 使用 485 采用 MODBUS 和上位机相连, 可以通过上位机控制, 发送命令.  

使用特权

评论回复
13
受不了了| | 2013-8-3 15:49 | 只看该作者
不需要加减速,还是加减速要求不高?

使用特权

评论回复
14
qq260995569| | 2013-8-3 18:15 | 只看该作者
#include <stdio.h>


void zhengzhuan(int x, char *str1);
void fanzhuan(int y,char *str2);
void dingshi(int t,char *str3);
bool Zkaiguan;

void main()
{
        int a1;//起步转的圈数
        int b2;//间距距离圈数
        int c3;//间隔数目
        int d4;//电机2需要转的圈数
        int e5;//电机3需要转的圈数
        int f6;//电机2定时秒
        int g7;//电机3定时秒

        printf("请输入起步转的圈数\n");
        scanf("%d",&a1);
        printf("请输入间距距离圈数\n");
        scanf("%d",&b2);
        printf("请输入间隔数目\n");
        scanf("%d",&c3);
        printf("请输入电机2需要转的圈数\n");
        scanf("%d",&d4);
        printf("请输入电机3需要转的圈数\n");
        scanf("%d",&e5);
        printf("请输入电机2定时秒\n");
        scanf("%d",&f6);
        printf("请输入电机3定时秒\n");
        scanf("%d",&g7);

        Zkaiguan = true;//true为真,false为假
        while(1)
        {
               
                if(Zkaiguan)
                {
                        int b22 = b2;
                for(int p = 1; p <= c3; p++)
                        {
                        zhengzhuan(e5 ,"电机3-");
                        dingshi(g7 ,"电机3-");
                        fanzhuan(e5 ,"电机3-");
                        printf("\n\n");
                        zhengzhuan(a1 + b2,"电机1-");
                        printf("\n\n");
                        zhengzhuan(d4 ,"电机2-");
                        dingshi(f6 ,"电机-2");
                        fanzhuan(d4 ,"电机2-");
                        printf("\n\n");
                        fanzhuan(a1 + b2,"电机1-");
                        printf("\n\n");
                        printf("B2的值等于%d, p==%d, a1+b2等于%d\n",b2,p,a1+b2);
                        b2 = b22 * (p + 1);
                       
                        if(p == c3){Zkaiguan = false;}                       
                        }
                }//if1
        }//while
                getchar();
}



void dingshi(int t,char *str3)
{
        printf("\n%s定时%d秒\n",str3,t);
}

void zhengzhuan(int x, char *str1)
{

        for (int i = 1;i <= x; i++)
        {
                printf("%s正转%d次",str1,i);
        }
}

void fanzhuan(int y, char *str2)
{
        for (int i = 1;i <= y; i++)
        {
                printf("%s反转%d次",str2,i);
        }
}

请问下作者能帮我开发出带这种功能的项目么?请问如何可联系到LZ本人呢?

使用特权

评论回复
15
qq260995569| | 2013-8-3 18:18 | 只看该作者
这个附件是具体的电机运转流程,请LZ看一下能不能用单片机做出这个项目呢??

1212.rar

31.4 KB

步进电机操作流程

使用特权

评论回复
16
airwill|  楼主 | 2013-8-3 18:18 | 只看该作者
嗯, 的确, 这个加减速是个比较复杂的问题. 目前虽然并没有提出加减速的问题, 但是我感觉设计中还是要保留加减速的功能.
共享定时器, 就很难处理加减速问题了, 所以尽量考虑独立定时器控制一个电机.

使用特权

评论回复
17
airwill|  楼主 | 2013-8-3 18:29 | 只看该作者
qq260995569 发表于 2013-8-3 18:18
这个附件是具体的电机运转流程,请LZ看一下能不能用单片机做出这个项目呢?? ...

您的程序执行了一下, 看就是个序列命令执行的动作.
我觉得并不复杂. 实现应该不是问题.
具体动作控制, 精度, 位置检测, 起动停止, 还有没有校正等方面的问题还得看实际系统要求.
可能有些东西繁琐一些, 但应该不是难题

使用特权

评论回复
18
受不了了| | 2013-8-3 18:55 | 只看该作者
没加减速,那说明哪怕以后考虑加速也要求不苛刻,脉冲频率不会太高,就用pwm发脉冲,质量好,省力,专门用一个高速定时器中断扫描所有的脉冲的沿变化以计数,不过好象还是一块片子完成不了

使用特权

评论回复
19
lhkjg| | 2013-8-4 11:06 | 只看该作者
我们现在有一款产品就是使用的三个单片机协同工作来完成的,
PIC的有几款单品啊急可以同步SPI接口工作,做起来效果还不错

使用特权

评论回复
20
小嘿| | 2013-8-5 16:53 | 只看该作者
其实用CPLD是最合适的,加减速也能做,最多加一个cpu

使用特权

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

本版积分规则

个人签名:欢迎进入 TI 模拟技术论坛!

556

主题

17724

帖子

884

粉丝