- 打卡等级:偶尔看看III
- 打卡总天数:31
- 最近打卡:2025-09-11 19:51:37
中级会员
- 积分
- 238
|
发表于 2025-8-7 11:17:21
|
显示全部楼层
#define EN_LEVEL 1 // 定义驱动脉冲有效电平,0为低电平有效驱动,1为高电平有效驱动
B_M1_RunEn = 0; //停止运行
P_M1_DIR = 1; // 运行方向, 接步进电机驱动器方向输入端(一般是光耦输入, 低有效), 1:顺时针(正转), 0:逆时针(反转)
P_M1_PULSE = ~EN_LEVEL; // 驱动脉冲, 低驱动, 接步进电机驱动器脉冲输入端(一般是光耦输入, 低有效).
P1n_push_pull(0x03); // P1.0 P1.1设置为推挽输出
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_CCR1 = CCAP1_tmp; // 计数器比较值, 匹配时刻
if(P_M1_PULSE==~EN_LEVEL) //产生了完整的一个脉冲
{
if(M1_PulseCnt != 0) // 脉冲数未完成
{
if(--M1_PulseCnt == 0) //若 脉冲数-1 == 0
{
B_M1_RunEn = 0; // 关停电机
P_M1_DIR = 1; // 转向光耦关闭
PWMA_CCMR1 = 0; //禁止取反输出脉冲
P17=0;
}
}
if(M1_DownCnt != 0) // 减速脉冲未完
{
if(--M1_DownCnt == 0) f1_set = 200; //设置目标频率, 开始减速
}
}
}
else P_M1_PULSE = ~EN_LEVEL;
}
/*
if(sr1 & 0x04) //通道2中断标志
{
CCAP2_tmp += f2_period;
PWMA_CCR2 = CCAP2_tmp; // 计数器比较值, 匹配时刻
}
if(sr1 & 0x08) //通道3中断标志
{
CCAP3_tmp += f3_period;
PWMA_CCR3 = CCAP3_tmp; // 计数器比较值, 匹配时刻
}
if(sr1 & 0x10) //通道4中断标志
{
CCAP4_tmp += f4_period;
PWMA_CCR4 = CCAP4_tmp; // 计数器比较值, 匹配时刻
}
*/
}
P1n_push_pull(1<<7); // P17设置为推挽输出
|
|