DSP28335步进电机正反转及调速实验

1、按前述教程快速新建一个新工程,在工程文件中app文件夹下新建stepmotor子文件夹用于存放stepmotor.c/stepmotor.h文件(记得添加进头文件路径),在user/main.c编写主函数

 

2、stepmotor.c代码

#include "stepmotor.h"

void Step_Motor_Init(void)
{
    EALLOW;

    GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//设置为普通IO口
    GpioCtrlRegs.GPADIR.bit.GPIO2=1;//设置为输出

    GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//设置为普通IO口
    GpioCtrlRegs.GPADIR.bit.GPIO3=1;//设置为输出

    GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;//设置为普通IO口
    GpioCtrlRegs.GPADIR.bit.GPIO4=1;//设置为输出

    GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;//设置为普通IO口
    GpioCtrlRegs.GPADIR.bit.GPIO5=1;//设置为输出

    GpioDataRegs.GPACLEAR.bit.GPIO2=1;//清0
    GpioDataRegs.GPACLEAR.bit.GPIO3=1;//清0
    GpioDataRegs.GPACLEAR.bit.GPIO4=1;//清0
    GpioDataRegs.GPACLEAR.bit.GPIO5=1;//清0

    EDIS;
}

3、stepmotor.h代码

#ifndef STEP_MOTOR_H_
#define STEP_MOTOR_H_

#include "DSP2833x_Device.h"//包含所有的头文件,常用的宏定义 、F2833x 内核、 外设驱动的源文件对应的头文件
#include "DSP2833x_Examples.h"// 包含F2833x 通用文件的头文件。 比如中断、全局变量及函数声明、 IQmath 库等

void Step_Motor_Init(void);

#endif

 4、main.c代码

#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "key.h"
#include "leds.h"
#include "beep.h"
#include "relay.h"
#include "dcmotor.h"
#include "stepmotor.h"

void main()
{
    InitSysCtrl();
    LED_Init();
    KEY_Init();
    BEEP_Init();
    Step_Motor_Init();

//步进电机工作顺序:1000,0100,0010,0001
//这里定义正反转的数组,根据上面给的图片推导出来的
    Uint32 STEP_MOTOR_ZTurn[] = {
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef
            };
    Uint32 STEP_MOTOR_FTurn[]   = {
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffef,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffffb,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xffffffdf,
            (GpioDataRegs.GPADAT.all|0x0000003c)&0xfffffff7
            };

    Uint16 i = 0;
    static short flag_key1 = 0;//按键1按下标志
    static short flag_key2 = 0;//按键2按下标志
    static short flag_key4 = 0;//按键4按下标志
    while(1)
    {
            i++;
            if(i%5000==0)
            {
                LED2_TOGGLE;//LED2闪烁,表示处于运行状态
            }
//            BEEP_ON;//打开蜂鸣器
            DELAY_US(200);
            char key_scan = KEY_Scan(0);

            //如果确定按键按的是1,标志为1
            if(key_scan==1)
            {
                DELAY_US(15000);//15ms的消抖时间
                if(key_scan==1)
                {
                    flag_key1 = 1;
                    flag_key2 = 0;
                    flag_key4 = 0;
                }
            }

            //如果确定按键按的是2,标志为2
            if(key_scan==2)
            {
                DELAY_US(15000);
                if(key_scan==2)
                {
                    flag_key2 = 1;
                    flag_key1 = 0;
                    flag_key4 = 0;
                }
            }

            //如果确定按键按的是4,标志为4
            if(key_scan==4)
            {
                DELAY_US(15000);
                if(key_scan==4)
                {
                   flag_key2 = 0;
                   flag_key1 = 0;
                   flag_key4 = 1;
                }
            }

            //按键1按下正转
            if(flag_key1==1)
            {
               int j;
               for(j=0;j<4;j++)
               {
                     GpioDataRegs.GPADAT.all = STEP_MOTOR_ZTurn[j];//把时序送到GPADAT寄存器里,GPADAT是GpioDataRegs寄存器里的一组,包含GPIO0-31共32个GPIO口
                     DELAY_US(5000); //delay 5ms,通过此数可改变电机转速
               }
            }

            //按键2按下反转
            if(flag_key2==1)
            {
               int j;
               for(j=0;j<4;j++)
               {
                     GpioDataRegs.GPADAT.all = STEP_MOTOR_FTurn[j];
                     DELAY_US(5000); //delay 5ms
               }
            }

            //按键4按下停止
            if(flag_key4==1)
            {
                    GpioDataRegs.GPACLEAR.all=1;
                    DELAY_US(5000);
            }


     }
}

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狸花.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值