📄 sys_ctrl.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 + -