标题:
mpc5643l定时器捕捉测量频率 系统初始化等源码分享
[打印本页]
作者:
xuejiqingtian
时间:
2018-7-5 21:23
标题:
mpc5643l定时器捕捉测量频率 系统初始化等源码分享
包括mpc5643l的工程代码
0.png
(37.31 KB, 下载次数: 37)
下载附件
2018-7-6 04:53 上传
单片机源程序如下:
/*************************************************************************
【平 台】MPC5643L
【编 写】
【版 本】V1.0
【时 间】
【功 能】1.通过8PIN拨码开关输入阈值转速值("BM_INPUT.h");
2.初始化系统,包括看门狗、系统时钟、外设时钟、中断初始化(MPC5643L_SysCtrl.h")
3.gpio输出电平控制led,报警和停机"TASK_LED.h"
4.脉冲输出功能"OPWM.h"
5,转速输入测频率,计算转速,比较大小"TIMER_ECT.h"
6,超速测试按键输入函数Key_OVERSPEED.h
*************************************************************************/
/*******************头文件******************/
#include "MPC5643L.h"
#include "MPC5643L_SysCtrl.h" //系统控制函数
#include "TASK_LED.h" //GPIO输出
#include "Etimer_OutputPulseWidth.h" //脉冲输出
#include "Key_OverspeedTest.h" //超速测试复位键扫描
#include "TIMER_ECT.h"
#include "FLEXCAN.h"
#include "frequecythershord_input.h" //拨码开关输入函数
#include "config_output.h" //GPIO输出
/****************全局变量定义**************/
uint8_t compare(uint8_t num1,uint8_t num2)
{
if(num1 < (uint8_t)(num2/2))
{
// init_OUTPUT(7,0);
return 1;
}
else if(num1 > num2)
{
// init_OUTPUT(7,0);
return 0;
}
else
{
// init_OUTPUT(7,0);
return 2;
}
}
uint16_t main(void)
{
uint8_t Result; //拨码开关输入pin配置
float temp_bm; //频率阈值定义
uint8_t Flag_HalfSpeedWSE; //半速不停机测试标志位
uint8_t Flag_HalfSpeedSE; //半速停机测试标志位
uint8_t Flag_OverSpeedWSE; //超速不停机测试标志位
uint8_t Flag_OverSpeedSE; //超速停机测试标志位
InitSysCtrl(); //初始化系统时钟,中断,看门狗,外设时钟
init_OUTPUT(7,1);
// init_OUTPUT(7,0); //上电LED灯亮
init_OUTPUT(81,1); //LED_green正常
init_OUTPUT(73,1); //LED_red 超速报警
init_OUTPUT(2,0); //脉冲输出,开始输出低电平
init_OUTPUT(128,1); //out1
init_OUTPUT(125,1); //out2
init_OUTPUT(124,1); //csbh_bf_out
init_OUTPUT(121,1); //out3
init_OUTPUT(119,1); //out5
init_OUTPUT(117,1); //out6
Init_BM_COFIG(); //拨码开关输入配置
InitEtimer1_3();
INTC_InstallINTCInterruptHandler(ISRICEimer, Source_Etimer1_3, Priority);
Init_opweTimer0();
INTC_InstallINTCInterruptHandler(eTimer_OPWisr, Source_Etimer0_0, Priority);
INTC.CPR_PRC0.R = 0; //定义优先级
InitCan1();
InitCan0();
INTC_InstallINTCInterruptHandler(RecieveMsg,Source_Flexcan,Priority); //开启CAN_1接收中断
ETIMER_1.CHANNEL[3].CCCTRL.B.ARM = 1; //开始捕捉
while(1)
{
float bj = 78;
InputCaptureChannel3_FREQHandler(); //转速处理函数
temp_bm = threshold_value();
TransmitMsg();
/*频率比较,控制柴油机及报警功能*/
temp_bm = threshold_value();
Result = compare(bj,temp_bm);
/*测试按键输入功能*/
Skan_OverspeedPB1Key(); //扫描超速测试按键,进行超速测试
Flag_OverSpeedWSE = OverspeedSystemTest_WithStopEngi(); //超速测试不停机标志
Flag_OverSpeedSE = OverspeedSystemTest_EngineStopeed(); //超速停机测试标志
Flag_HalfSpeedWSE = HalfSpeedTest_WithoutStoppingEngineKeep(); //半速不停机测试标志
Flag_HalfSpeedSE = HalfSpeedTest_EngineStopeed();
// Skan_Key(); //扫描超速测试按键
// csfw_test(); //超速复位测试程序
// csbtj_test(); //超速不停机测试程序
// bsbtj_test(); //半速不停机测试程序
// bstj_test(); //半速停机测试程序
switch(Result)
{
case 1:
if(Flag_OverSpeedWSE) // self-checking:超速测试不停机
{
SwitchOverspeedOut_WithoutStoppingEngine(); //不停机测试程序
}
if(Flag_OverSpeedSE) // self-checking:超速测试停机
{
SwitchOverspeedOut_EngineStopeed(); //停机测试程序
}
PressAfterFaultTest_Reset(); //超速保护复位测试,停机报警复位函数
//复位故障检测函
if((Flag_OverSpeedWSE | Flag_OverSpeedSE | Flag_HalfSpeedWSE |Flag_HalfSpeedSE) == 0) //无超速测试按键按下
{
SwitchOverspeedOut_EngineStopeed(); //停机测试程序
}
break;
case 0:
if(Flag_HalfSpeedWSE) //self-checking:测试不停机
{
SwitchOverspeedOut_WithoutStoppingEngine(); //不停机测试程序
// Inspection_WithStopEngi(); //不停机测试故障检测函数
}
if(Flag_HalfSpeedSE) //self-checking:测试停机
{
SwitchOverspeedOut_EngineStopeed(); //停机测试程序
// Inspection_StopEngi(); //停机测试故障检测函数
}
PressAfterFaultTest_Reset(); //超速保护复位测试,停机报警复位函数
if((Flag_OverSpeedWSE | Flag_OverSpeedSE | Flag_HalfSpeedWSE |Flag_HalfSpeedSE) == 0) //无超速测按键按下
{
SwitchOverspeedOut_EngineStopeed(); //停机测试程序
// Inspection_StopEngi(); //停机测试故障检测函数
}
break; //停机测试程序
case 2:
SystemInWorking0rder(); //正常运行
break;
}
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
mpc5643l_test.zip
(275.48 KB, 下载次数: 15)
2018-7-5 21:23 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1