📄 main.c
字号:
/********************************************************************************************************
** File Name: main.c
** Description: 步进电机控制实验。
** 使用GPIO控制步进电机转动,采用双四拍控制方式。
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
// 步进电机控制口线及操作宏函数定义
#define MOTOA (1<<12) /* GPE12 */
#define MOTOB (1<<13) /* GPE13 */
#define MOTOC (1<<14) /* GPE14 */
#define MOTOD (1<<15) /* GPE15 */
#define GPIOSET(PIN) rGPEDAT = rGPEDAT | PIN /* 设置PIN输出1,PIN为MOTOA--MOTOD */
#define GPIOCLR(PIN) rGPEDAT = rGPEDAT & (~PIN) /* 设置PIN输出0,PIN为MOTOA--MOTOD */
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
** 延时时间与系统时钟有关。
** Input: dly 延时参数,值越大,延时越久
** Output: 无
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*********************************************************************************************************
** Function name: MOTO_Mode2()
** Descriptions: 步进电机双四拍程序。
** 时序控制为AB--BC--CD--DA--AB,共控制运转4圈(电机步距角为18度)。
** Input: dly 每一步的延时控制。值越大,延时越久
** Output: 无
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void MOTO_Mode2(uint8 dly)
{
uint32 i;
for(i=0; i<12; i++)
{
// CD相有效
GPIOSET(MOTOC);
GPIOSET(MOTOD);
DelayNS(dly);
GPIOCLR(MOTOC);
GPIOCLR(MOTOD);
// DA相有效
GPIOSET(MOTOD);
GPIOSET(MOTOA);
DelayNS(dly);
GPIOCLR(MOTOD);
GPIOCLR(MOTOA);
// AB相有效
GPIOSET(MOTOA);
GPIOSET(MOTOB);
DelayNS(dly);
GPIOCLR(MOTOA);
GPIOCLR(MOTOB);
// BC相有效
GPIOSET(MOTOB);
GPIOSET(MOTOC);
DelayNS(dly);
GPIOCLR(MOTOB);
GPIOCLR(MOTOC);
}
}
/*********************************************************************************************************
** Function name: main
** Input: 无
** Output: 系统返回值0
********************************************************************************************************/
int main(void)
{
char const *smstr="stepmotor test\n";
// 步进电机控制口设置
rGPECON=((rGPECON)&(0x00ffffff))|(1<<30)|(1<<28)|(1<<26)|(1<<24);
rGPEDAT=(rGPEDAT)&0x0fff;
rGPEUP=(rGPEUP)|0xffff; //disable the pull_up function
while(1)
{
MOTO_Mode2(10); // 控制步进电机正转
DelayNS(200); // 停止步进电机,延时
UART_SendStr(smstr);
}
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -