- 打卡等级:初来乍到
- 打卡总天数:7
- 最近打卡:2025-12-27 15:48:59
已绑定手机
新手上路
- 积分
- 49
|
发表于 2025-12-26 12:24:34
|
显示全部楼层
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
u8 sr1;
// u8 sr2;
sr1 = PWMA_SR1; //为了快速, 中断标志用一个局部变量处理
PWMA_SR1 = 0; //清除中断标志
// sr2 = PWMA_SR2; //为了快速, 中断标志用一个局部变量处理
PWMA_SR2 = 0; //清除中断标志
sr1 &= PWMA_ISR_En; //每个通道可以单独允许中断处理
if(sr1 & 0x02) //通道1中断标志
{
if(B_M1_RunEn) //电机运行中
{
if(B_f1_update) //刷新频率值
{
B_f1_update = 0;
f1_period = f1_period_set;
}
CCAP1_tmp += f1_period;
PWMA_CCR1H = (u8)(CCAP1_tmp>>8); // 计数器比较值, 匹配时刻
PWMA_CCR1L = (u8)CCAP1_tmp;
if(P_M1_PULSE) //产生了完整的一个脉冲
{
if(M1_PulseCnt != 0) // 脉冲数未完成
{
if(--M1_PulseCnt == 0) //若 脉冲数-1 == 0
{
B_M1_RunEn = 0; // 关停电机
P_M1_DIR = 1; // 转向光耦关闭
PWMA_CCMR1 = 0; //禁止取反输出脉冲
}
}
if(M1_DownCnt != 0) // 减速脉冲未完
{
if(--M1_DownCnt == 0) f1_set = 200; //设置目标频率, 开始减速
}
}
}
else P_M1_PULSE = 1;
}
/* 梁工 这样一直加 不考虑溢出吗 或者临界点 CCAP1_tmp += f1_period; |
|