普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1546|回复: 1

帮忙给一下HC6800-EM3 V3.0的开发板步进电机的程序

[复制链接]

1

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-2-24 16:22:44 | 显示全部楼层 |阅读模式
1金钱
老同事留下了一块HC6800-EM3 V3.0的开发板,有相应的视频教程,但教程里的和实际芯片严重不符,实际板子上是L6219电机驱动芯片,麻烦找一下相关的教学视频讲解,和程序,谢谢
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

1

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2022-2-28 16:08:47 | 显示全部楼层
网上找了一下程序,问题解决了
源程序如下:
/**************************************************************************************
*                              步进电机实验                                                                                                  *
实现现象:下载程序后,按照光盘内操作视频接线,步进电机旋转
注意事项:无                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

sbit PHA = P1^0;    //   相控制
sbit PHB = P1^1;    //   相控制

sbit A1 = P1^2;     //  A+输入
sbit A2 = P1^3;     //        A-输入

sbit B1 = P1^4;     //  B+输入
sbit B2 = P1^5;     //  B-输入
#define SPEED 200

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        P1=0X00;
       
/***********************************************
        单步四拍工作方式  B负   A负  B正  A正
        通电方式:  不同,相同,不同,相同
        解决步进电机只在颤动却不转的关键了,虽说步进电机的某个线圈在不通电的时候,电流的方向随便写(都不通电了,那不就随便写嘛),但是事实却不是这样,虽说当我们写 A1 = A2 = 1 时线圈应该是不通电的,但是事实上并不是,它还是有一点点电流的,所以即使我们写 A1 = A2 = 1,线圈的电流方向也不能随便写,而是要遵循:两个线圈的电流方向要 "不同" 、"相同" 交替。(单双拍工作方式时每两拍作为一组)的规则去写。
  如上面三个图中,PHA 和 PHB 的值都是在 “相同”、 “不同” 之间交替进行,单双拍的那个是每两拍作为一组,在 “不同”、“相同”之间进行。
  这样就解决了步进电机只颤动不旋转的问题了,但是并不是所有人的问题都是出在这里,看见每一句代码后面都有一个 delay() 函数了吗?如果 delay() 函数的延时时间过短也会引起步进电机只颤动而不旋转。所以大家还是要具体问题具体分析。

        *********************************************/       
       
        while(1)
        {       
                /*B负*/
               
                PHA=0;                //A 线圈通负方向电流   
                A1 = 1;
                A2 = 1;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通负方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈B        通电
               
                delay(SPEED);         //延时
   
                /*A负*/
               
                PHA=0;                //A 线圈通负方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        通电
                PHB=1;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        不通电
               
                delay(SPEED);         //延时

          /*B正*/
               
                PHA=1;                //A 线圈通正方向电流   
                A1 = 1;
                A2 = 1;               // 两句意思  线圈A        不通电
                PHB=1;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电

   delay(SPEED);          //延时

          /*A正*/
               
                PHA=1;                //A 线圈通正方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通正方向电流
                B1 = 1;
                B2 = 1;                //两句意思  线圈A        通电
               
                delay(SPEED);
               
/*************************************************************
//单双八拍工作方式, A正,A正B负,B负,B负A负,A负, A负B正,B正,B正A负

通电方式:  不同,相同,不同,相同
               
               
                PHA=0;                //A 线圈通负方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        通电
                PHB=1;                //B 线圈通负方向电流
                B1 = 1;
                B2 = 1;                //两句意思  线圈B        不通电
               
                delay(SPEED);         //延时    A负
   
               
               
                PHA=0;                //A 线圈通负方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        通电
                PHB=1;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电
               
                delay(SPEED);         //延时  A负B正

          
               
                PHA=1;                //A 线圈通正方向电流   
                A1 = 1;
                A2 = 1;               // 两句意思  线圈A        不通电
                PHB=1;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电

   delay(SPEED);          //延时  B正

         
               
                PHA=1;                //A 线圈通正方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        不通电
                PHB=1;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电
               
                delay(SPEED);           //延时     B正A正


                PHA=1;                //A 线圈通正方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通正方向电流
                B1 = 1;
                B2 = 1;                //两句意思  线圈A        通电
               
                delay(SPEED);           //延时    A正
               

    PHA=1;                //A 线圈通正方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电
               
                delay(SPEED);           //延时     A正B负
               
               
                PHA=0;                //A 线圈通正方向电流   
                A1 = 1;
                A2 = 1;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电
               
                delay(SPEED);           //延时     B负

    PHA=0;                //A 线圈通正方向电流   
                A1 = 0;
                A2 = 0;               // 两句意思  线圈A        不通电
                PHB=0;                //B 线圈通正方向电流
                B1 = 0;
                B2 = 0;                //两句意思  线圈A        通电
               
                delay(SPEED);           //延时     B负A负

*************************************************************/
               
                                                       
        }
}
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-29 06:47 , Processed in 0.084301 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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