机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 8508|回复: 10
打印 上一主题 下一主题

电脑pc直接控制步进电机驱动器工作的问题

  [复制链接]
跳转到指定楼层
1#
发表于 2015-8-15 09:00:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我想通过pc直接发脉冲给步进电机驱动器(不带串口通信模块),控制步进电机启停动作;脉冲经USB端口DATA+和DATA-连接步进驱动器plus+和plus-,方向接头悬空。结果电机没有反应。情况可能如下:1)端口地址没弄对,脉冲没输出去;2)步进驱动器不接受经串口协议封装的信号。请问如何解决?谢谢。代码如下:
// pulse_emission.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"
#include <stdio.h>//</stdio.h>
#include <time.h>//</time.h>
#include <conio.h>//</conio.h>

//脉冲宽50ms;
const unsigned pulseWidthPlus = 50;
//脉冲槽宽50ms;
const unsigned pulseWidthMinus = 50;
//脉冲周期宽度100ms;
const unsigned pulseCycle = pulseWidthPlus + pulseWidthMinus;

void delay(clock_t nms)
{
    clock_t start;
    start = clock();
    while((clock() - start) * CLOCKS_PER_SEC / 1000 < nms);
}

void output(int *port, char polarity)
{
    int peak = 0;
    if(polarity == '+') peak = 1;
    else if(polarity == '-') peak = -1;
    *port = peak;
}

void writeWaveform(int *port,unsigned pulseWidth, unsigned cycle, char polarity)
{
    output(port,polarity);
    delay(pulseWidth);
    output(port,0);
    delay(cycle - pulseWidth);
}

int _tmain(int argc, _TCHAR* argv[])
{
    char ch = 0,nch;
    int p = 5; // p的值端口地址(这里用内存单元表示)
    int *port = &p;
    while(1)
        {
        writeWaveform(port,pulseWidthPlus,pulseCycle,ch);
        if(kbhit())
                {
            nch = _getch();
            if(nch == 0X1B) break; // <esc> 退出</esc>
            if(nch == ch && nch != '+' && nch != '-') continue;
            if(nch == '+') printf("正在输出正脉冲。\n");
            else  printf("正在输出负脉冲。\n");
            delay(10 * pulseCycle); // 转换输出脉冲极性时,需间隔的时间
            ch = nch;
        }
    }
        return 0;
}

P50813-183401.jpg (775.01 KB, 下载次数: 41)

P50813-183401.jpg

2.PNG (265.1 KB, 下载次数: 40)

2.PNG

评分

参与人数 1威望 +50 收起 理由
老鹰 + 50

查看全部评分

回复

使用道具 举报

2#
发表于 2015-8-15 10:19:36 | 只看该作者
本帖最后由 机械社友 于 2015-8-15 10:23 编辑

这个问题在这里讨论不讨合适,这属于电子和软件范围,不过还是给你大概说下吧
你的方案是不可能实现的,因为usb的信号是有协议的,不是你一直发1数据,那边就一直数据脉冲为+,协议会自动加上校验码之类的。usb的数据率一般几十m,不管你怎么发数据,1m左右跳变一次少不了的,这个频率任何步进也响应不了的
要想用电脑控制,得用并口或者usb控制卡之类的

点评

学习了,觉得说的有道理,应该用单片机控制驱动器,电脑接单片机  发表于 2015-8-15 13:21

评分

参与人数 1威望 +50 收起 理由
老鹰 + 50

查看全部评分

回复 支持 反对

使用道具 举报

3#
发表于 2015-8-16 16:56:04 | 只看该作者
配个驱动不就解决了吗
回复 支持 反对

使用道具 举报

4#
发表于 2015-8-16 23:17:14 | 只看该作者
机械社友 发表于 2015-8-15 10:19
这个问题在这里讨论不讨合适,这属于电子和软件范围,不过还是给你大概说下吧
你的方案是不可能实现的,因 ...

plc很容易实现
回复 支持 反对

使用道具 举报

5#
发表于 2015-8-17 20:18:53 | 只看该作者
机械社友 发表于 2015-8-15 10:19
这个问题在这里讨论不讨合适,这属于电子和软件范围,不过还是给你大概说下吧
你的方案是不可能实现的,因 ...

好深奥啊,我这种菜鸟都看不懂上面的代码
回复 支持 反对

使用道具 举报

6#
发表于 2015-8-18 08:19:48 | 只看该作者
直接肯定不能解码,建议增加CH430,说不定还有用
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2015-8-18 09:03:23 | 只看该作者
fengmingning 发表于 2015-8-16 16:56
配个驱动不就解决了吗

有个步进电机的驱动,但没有USB、串口模块,不好弄
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2015-8-18 09:08:46 | 只看该作者
glguolong 发表于 2015-8-18 08:19
直接肯定不能解码,建议增加CH430,说不定还有用

买了一个USB转RS232模块了!解码什么意思呀?换成9针里面两个数据针头吗?
回复 支持 反对

使用道具 举报

9#
发表于 2015-8-18 09:19:19 | 只看该作者
本帖最后由 glguolong 于 2015-8-18 09:23 编辑
liupengxxxx 发表于 2015-8-18 09:08
买了一个USB转RS232模块了!解码什么意思呀?换成9针里面两个数据针头吗?

RS232的电平估计也不能用,另外你不要直接接驱动器,他会给你很多假象,根据你的描述,你的Enable能端也没接,建议你直接先看,能不能出来固定一定频率的脉冲,先在示波器上做。
回复 支持 反对

使用道具 举报

10#
发表于 2015-8-19 14:52:55 | 只看该作者
直接买一个带USB的CNC控制板不就得了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-22 13:31 , Processed in 0.063550 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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