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

📄 sys_ctrl.c

📁 基于SPMC75的变频电机驱动例子,相当于一个简单的变频器. 望对变频器开发的工程式师有一定的帮助!
💻 C
字号:

//========================================================================
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2005 SUNPLUS TECHNOLOGY CO.
//                    ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================================

//========================================================================
// Filename: Sys_Ctrl.c
// Author: Lianshu  Mou (email: Lianshu@sunnorth.com.cn)
// Date: 2005/02/17
// Description: 
//
// Reference:
// Revision:
//      2005/02/17      First version
//========================================================================

#include "Spmc75_regs.h"
#include "mcMACRO.h"
#include "Option.h"
#include "Display_ISR.h"
#include "Key_Scan.h"
#include "Backup_VAR.h"
#include "BCD-BIN.h"
#include ".\SPWM_Lib\SPWM_ISR.h"
#ifdef DMC
	#include "DMC_Lib\Spmc75_dmc_uart_ext.h"
	#include "DMC_Lib\Spmc_dmc_api_ext.h"
#endif

extern void Err_ISR(void);

extern unsigned int DC_BUS_Voltage;
extern unsigned int Moto_Current;

extern unsigned int ADC_conversion(void);		//AD转换服务
extern void ADC_Acc(void);						//AD数据处理
extern unsigned int ADC_F_Buffer;				//来自ADC的频率设置

void DMC_UART_ISR(void);						//通信数据处理
extern unsigned int UART_F_Buffer;				//来自通信口的频率设置

int UP_Down_Time_NEW = 1;						//加减速时间更新标志

unsigned int Moto_ISR_Time = 0;					//电机控制服务定时计数器
int ADC_Time = 0;								//ADC采样定时服务定时计数器

unsigned int F_Temp;
//=================================================================================================
// ----Function: void Moto_RUN_F_Add(void);
// -Description: 根据当前的加减速时间计算相应的加减速增量
// --Parameters: None
// -----Returns: None
// -------Notes: 
//=================================================================================================
void Moto_RUN_F_Add(void)
{
	long unsigned int Temp,Temp1;
	if(UP_Down_Time_NEW > 0)
	{	//计算加减速时的频率增量
		Temp = (long unsigned int)(Base_F - Min_F);
		Temp = Temp*65536;
		Temp1 = (long unsigned int)(UP_Time)*50;
		Temp1 = DIV32(Temp,Temp1);
		SPMC75_Set_Up_F_Add(Temp1);			//设置加速增量
		Temp1 = (long unsigned int)(Down_Time)*50;
		Temp1 = DIV32(Temp,Temp1);
		SPMC75_Set_Down_F_Add(Temp1);		//设置减速增量
		UP_Down_Time_NEW = 0;
	}
}

//=================================================================================================
// ----Function: void System_Ctrl(void);
// -Description: 完成系统控制任务,包括参数综合和各种全局协调,包括显示状态设置.
// --Parameters: None
// -----Returns: None
// -------Notes: 
//=================================================================================================
void System_Ctrl(void)
{
	Moto_RUN_F_Add();								//计算加减速参数
	if(F_CH_Set == 0) F_Temp = Key_F_Buffer;		//选用键盘输入
	else if(F_CH_Set == 1)
		F_Temp = ADC_F_Buffer;						//选用ADC输入的设置
	else F_Temp = UART_F_Buffer;
	if(SPMC75_Return_Moto_state() > STOP)
	{
		if(SPMC75_Return_Moto_state() == STOP_Start)
			SPMC75_Set_Moto_RUN_F(0);
		else SPMC75_Set_Moto_RUN_F(F_Temp);
		if(Moto_ISR_Time > 10)
		{											//定时调用20ms,还要检测是否到了任意频率点
			Moto_ISR_Time = 0;
			SPMC75_Moto_RUN_Ctrl();											
		}
	}
	Err_ISR();										//判断出错标志
	DMC_UART_ISR();
}

void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
	SPMC75_MCP_ISR();
}

void IRQ4(void) __attribute__ ((ISR));
void IRQ4(void)
{
	if(P_TMR2_Status->B.TPRIF)
	{
		P_TMR2_Status->B.TPRIF = 1;	
		ADC_Time ++;
		Moto_ISR_Time ++;
		if(ADC_Time > 5)
		{
			ADC_Time = 0;
			ADC_conversion();									//AD转换
			ADC_Acc();											//AD数据处理
			//SPMC75_Set_DC_BUS_Voltage(DC_BUS_Voltage);			
		}
		Key_ISR();												//键中断服务
		Display_ISR();											//显示服务处理
	}
}

void SPMC75_Moto_EN(int Data)
{
	Data = Data;
}

⌨️ 快捷键说明

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