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

📄 dcmotor.c

📁 直流电机的定时 运行控制 实现电机准确定位
💻 C
字号:
#include "ICETEK-C6713-A.h"

unsigned int uWork,nCount,uN,nCount1,nDir;

main()
{
	unsigned char dbScanCode;
	char cKey,cOldKey;
    
	uN=30; nCount=nCount1=0; nDir=0; cKey=cOldKey=0;
    init_emif();	// 初始化emif
    InitCTR();		// 初始化ICETEK-CTR
    CTRGR=1;		// DCME=1 打开直流电机, 见ICETEK-CTR的全局控制寄存器描述
    // 设置FSR1管脚为通用输出管脚以输出pwm控制信号
    SPCR1&=0x0fffffffe;	//  /RRST=0
    PCR1|=0x2400;		// RIOEN=1, FSRM=1
    // 设置CLKX0管脚为通用输出管脚以控制电机转向
    SPCR0&=0x0fffeffff;	//  /XRST=0
    PCR0|=0x1200;		// RIOEN=1, CLKXM=1
    InitInterrupt();	// 设置中断向量表、Timer1的参数
    while ( 1 )
    {
		if ( nCount>16 )
		{
			nCount=0;
			dbScanCode=GetKey();
			if ( dbScanCode!=0 && dbScanCode!=0x0ff )
			{
				if ( dbScanCode==SCANCODE_Enter )	break;
				else
				{
					cKey=ConvertScanToChar(dbScanCode);
					if ( cKey!=0 && cOldKey!=cKey )
					{
						cOldKey=cKey;
						switch ( cKey )
						{
							case '0': uN=100; break;
							case '1': uN=70; break;
							case '2': uN=50; break;
							case '3': uN=30; break;
							case '4': uN=10; break;
							case '5': uN=1; break;
							case '+':
								uN=60;		// 降速
								Delay(1024);
								PCR0|=2;
				 			 	nDir=0; 
								break;
							case '-':
								uN=60;		// 降速
								Delay(1024);
								PCR0&=0x0fffffffd;
				 			 	nDir=1; 
								break;
						}
					}
				}
			}
		}
    }
	CSR&=0xfffffffe;	// 关中断 GIE=0
	TIMER1CTL&=0x0ffffff3f;	// GO=0 /HLD=0 =>计数器暂停
	CloseCTR();
    exit(0);
}

void interrupt Timer()	//中断响应函数
{
	uWork=PCR1;		// 根据占空比确定输出高或低电平
	if ( nCount1>uN )	uWork|=4;
	else	uWork&=0x0fffb;
	PCR1=uWork;
	nCount++;
	nCount1++; nCount1%=100;
}

void InitInterrupt(void)
{
	// 设置中断控制寄存器
	CSR&=0xfffffffe;	// 关中断 GIE=0
	ISTP=0x00000c00;	// 重置中断向量表到0C00h
   	IMH=0x08000000;		// 指定Timer1产生int15中断
   	IML=0;
   	ICR=0xff;			// 清除等待的中断
	IER=0x8003;			// 使能int15中断
	// 设置定时器产生中断信号的频率
	TIMER1PRD=0x400;	// 定时器1的周期
	TIMER1CTL=0x3c0;	// 开始计数
	CSR=CSR|1; 			// 开中断
}

⌨️ 快捷键说明

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