找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5376|回复: 6
收起左侧

步进电机试验一(双极性步进电机),求高手用二个按键控制加减速处理程序。

[复制链接]
ID:59980 发表于 2014-9-30 15:43 | 显示全部楼层 |阅读模式
以下是可转动的双极性步进电机程序,但没有给出按键控制它的加速和减速。
要求:1。每按一下加速键,可加大一点点转速并锁定当前转速,减速键控制同理。键也定义为:K1=P1。6。K2=P1。7
           2。可以采用无级加速方式增加速度或定制10级档可选速也可以!
          3。此程序来自本人在网上买的学习开发板公司提供,但本人学得只让一个步进电机只会转动和停止,实在没有多少实用的价值,所以发上此帖,如能有人帮忙解决问题的话,相信在论坛的各初学者一定会从这学到真正实用的东西。本人现在也只是初学C语言者,不过对汇编有了一定的了解。但汇编写的步进电机程序很少有,如果有谁能用汇编写上,在下为初学者们,将不胜感激!




下面是程序:




*;   单相四拍通电驱动时序:                                                          *
*;   正转: A/  B  A  B/
*    反转: B/  A  B  A/                                                                                              *
*   
*    UDN2916电流控制真值表:
*          I0    I1        输出电流
*          L            L                  最大
*          H                L                  最大*2/3
*          L                H                  最大*1/3
*     H     H         0                                                                     *
*  请学员一定要消化掉本例程                     0x30,0x0e,0x39,0x07                              *
   注意:J14短路冒需断开                                                                                    *
**************************************************************************************/  
#include "reg52.h"

#define speed 2
//Motor
sbit PH1 = P1^0;          //定义管脚
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;



void delay(int time);

/***************************************
函数功能:产生单相四拍脉冲控制步进机
**************************************/
void Go()
{         //A
    PH1 = 0;  //PH1为0 则A线圈为反向电流
    I01 = 0;
        I11 = 0;   //以最大电流输出
       

        PH2 = 0;  //PH2为0 则B线圈为反向电流
        I02 = 1;
        I12 = 1;   //输出0

        delay(speed);
        //0
        PH1 = 0;  //PH1为0 则A线圈为反向电流
    I01 = 1;  //输出0
        I11 = 1;
       

        PH2 = 1;  //PH2为1 则B线圈为正电流
        I02 = 0;  //以最大电流输出
        I12 = 0;

        delay(speed);
        //B
        PH1 = 1;   //PH1为1 则A线圈为正向电流
    I01 = 0;   //以最大电流输出
        I11 = 0;
       

        PH2 = 1;  //PH2为1 则B线圈为正向电流
        I02 = 1;  //输出0
        I12 = 1;
                   ////
        delay(speed);
        //0
        PH1 = 1;   //PH1为1 则A线圈为正向电流
        I01 = 1;
        I11 = 1;
       

        PH2 = 0;   //PH2为0 则B线圈为反向电流
        I02 = 0;
        I12 = 0;

        delay(speed);


       
}
/*******************延时函数****************************/
void delay(int time)
{
  int i,j;

  for(j=0; j <= time; j++)
   for(i =0 ; i <= 120; i++);
}


void main()
{

  while(1)
  {

    Go();  //步进电机运行
       
  }

}


回复

使用道具 举报

ID:66032 发表于 2014-9-30 17:24 | 显示全部楼层
用51的写很麻烦,要买AD加通信程序, 最好用PIC , AVR 和 MSP430F 1x,2x3x4x5x 都可以, 都是自带大AD, 用一个AD做调速,将AD转换的值赋给speed, speed 形参在delay() 中就可以体现。

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:67573 发表于 2014-10-18 10:43 | 显示全部楼层
AD转换的值赋给speed, speed 形参在delay() 中就可以体现
回复

使用道具 举报

ID:44262 发表于 2014-10-20 10:12 来自触屏版 | 显示全部楼层
三楼果然是高手 ,这种办法应该可以实现
回复

使用道具 举报

ID:68073 发表于 2014-10-29 17:20 | 显示全部楼层
努力学习中
回复

使用道具 举报

ID:59980 发表于 2014-11-22 21:11 | 显示全部楼层
谢谢各位提示。我再试试看
回复

使用道具 举报

ID:67992 发表于 2014-11-22 21:43 | 显示全部楼层
本帖最后由 dgahz 于 2014-11-22 21:51 编辑

要设计成长按连续增减速,放手锁速,不要点按。也不要电位器。电位器不耐用,按键长按较耐用。工厂一般都这样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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