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

📄 test0.c

📁 基于TMS320LF2407A的PWM波产生的PID算法实现
💻 C
字号:
#include  "LF2407REGS.h" 

#define PWMT 1000	 			 //PWM周期,50us,50/(1/(4*10)*2)
#define NMAX 3000                //电机最高转速,r/min
#define SPER 100            	 //100个PWM周期速度调节一次



// 该中断服务程序主要是为了防止干扰,不做任何其它操作
void	interrupt nothing()
{
	return;						// 中断直接返回
}
void	interrupt adcint()
{
	return;						// 中断直接返回
}
void main(void)
{
	asm(" setc	CNF");	
	asm(" clrc	OVM");
	asm(" setc	SXM");
	asm(" setc INTM");
	*WDCR=0x068;
	*SCSR1=0x0284;		     				

	
	*T2PER = 0X0FFFF;                //最大周期
	*T2CNT = 0X0000;
	*T2CON = 0X9870;                //定向增减,允许编码接口
	*T1PER = 500;					//PWM设置,周期50微秒,2*500*(1/20)us
	*T1CNT = 0X0000;
	*ACTRA = 0X0096;                //PWM1,4高有效,2,3低有效
	*DBTCONA = 0X01F4;              //死区1.6微秒,死区定时周期1个(X/32),0.05*32=1.56us
	*CMPR1 = 250;      		//占空比0.5,500*0.5,(还可以增加实现6个pwm)
	*CMPR2 = 250;               
	*COMCONA = 0X8200;              //允许比较,T1下溢重载
	*T1CON = 0X0840;                //连续增减计数,内部时钟,不分频
	*GPTCONA = 0X0100;              //T1周期中断标志启动AD转换
	*MCRA = 0X03D8;                 //引脚设置为PWM1-4,QEP1-2
	*IMR = 0X0020;                  //允许INT6中断
	*IFR = 0X0000;                  //清标志
	*EVAIFRA = 0X0000;
	*EVAIFRB = 0X0000;
	*EVAIFRC = 0X0000;
	*EVAIMRA = 0X0000;
	*EVAIMRB = 0X0000;
	*EVAIMRC = 0X0000;

	asm(" clrc INTM");
		
	while(1);
}

⌨️ 快捷键说明

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