⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是基于arm平台的步进电机控制程序,有平滑的加减速控制
💻 C
字号:
 /****************************************************************************
* 文 件 名:main.c
* 功    能:通过KEY1操作,使用PWM5控制电机转速,共4档。
* 说    明:短接直流电机跳线JP17、JP18,独立按键JP11, LED跳线JP5 。
*           断开CF卡跳线JP13、GPIO接口J17,PS2跳线JP4。
****************************************************************************/
#include  "config.h"

#define   KEY		    1<<20           // 定义按键
#define   GPIOSET(PIN)  IO1SET = PIN    // 方便修改置位端口
#define   GPIOCLR(PIN)	IO1CLR = PIN    // 方便修改清位端口
#define   LEDCON	    0x00ff0000      // LED控制字
               
/* PWM周期及占空比设置值 */
#define  CYCLE_DATA			    200000  // 定义周期
#define  DUTY_CYCLE_DATA		50000   // 定义基本占空比参数

void DelayNS(uint32  dly);

/****************************************************************************
* 名称:main()
* 功能:主函数
****************************************************************************/
int  main(void)
{   uint8 i = 0;

    PINSEL1 = 0x01 << 10;		    // 设置PWM5连接到P0.21管脚
 
 	IO1DIR = LEDCON;     			// 配置LED控制I/O方向

    PWMPR  = 0x00;                  // 不分频,计数频率为Fpclk
    PWMMCR = 0x02;					// 设置PWMMR0匹配时复位PWMTC
    PWMMR0 = CYCLE_DATA;     		// 设置PWM周期
    PWMMR5 = DUTY_CYCLE_DATA;		// 设置PWM占空比
   
    PWMLER = 1 << 0 | 1<< 5;        // PWMMR0、PWMMR5锁存
    PWMPCR = 1 << 13;	            // 允许PWM5输出,单边PWM
    PWMTCR = 0x09;			 		// 启动定时器,PWM使能
    
    GPIOSET(0xffffffff);
   
    while(1)
    {
        PWMMR5 = DUTY_CYCLE_DATA*i;	// 设置PWM占空比
        PWMLER = 1 << 0 | 1<< 5;    // PWMMR0、PWMMR5锁存
        PWMTCR = 0x09;				// 启动定时器,PWM使能

        if( (IO0PIN&KEY) == 0 ) 
        {
            DelayNS(10);
            if( (IO0PIN&KEY) == 0 ) 
            {
                i = i+1;
                while( (IO0PIN&KEY) == 0 );
                switch(i)
                {
                	case 0x01: 	
                        GPIOSET(0xffffffff); 
                        GPIOCLR(3<<16); 
						break;
                		 		
                	case 0x02: 	
                        GPIOSET(0xffffffff); 
                        GPIOCLR(3<<18);  
						break;
                	
                	case 0x03:
                        GPIOSET(0xffffffff); 
                        GPIOCLR(3<<20); 
						break;
						
                	case 0x04:
                        GPIOSET(0xffffffff); 
                        GPIOCLR(3<<22); 
						break;
                	
                	case 0x05:
                        GPIOSET(0xffffffff); 
                		i = 0;
						break;
						
                	default:   	break;
                }
            }
        }
    }
    return(0);
}

/****************************************************************************
* 名    称:DelayNS()
* 功    能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void DelayNS(uint32  dly)
{   uint32  i;

    for(; dly>0; dly--) 
    {
        for(i=0; i<5000; i++);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -