标题:
请大家指点PWM输出途中X1输入直接中断输出,单片机程序如何实现?
[打印本页]
作者:
234134519
时间:
2023-4-29 15:34
标题:
请大家指点PWM输出途中X1输入直接中断输出,单片机程序如何实现?
void TM1_Isr() interrupt 3
{
TL1 = (65535-CYCLE)%256;
TH1 = (65535-CYCLE)/256;
DIR = direction;
ENA = 1; //打开步进电机
CLK = ~CLK;
PWM_count++; //输出脉冲个数
if(PWM_count >= 200*cy_count || emergency_stop == 1) //cy_count如果800个脉冲为1圈的话200个脉冲就是位1/4圈=90度
{
PWM_count = 0;
CLK = 0;
TR1 = 0; //关闭TR1定时器
ENA = 0; //电机使能位
PWM_Finished_Flag = 1; //PWM 脉冲发送完成
}
}
void stepper_motor(unsigned int CYCLE1,unsigned int cy_count1,unsigned char DIR)
{
CYCLE = CYCLE1; //数值越大 PWM周期越长电机越慢(150-6000)
cy_count = cy_count1; //800个脉冲为1圈
direction = DIR; //转动方向:0远离步进电机
TR1 = 1; //启动定时器TM1发送脉冲
//重置PWM发送完成标志位和紧急停止标志位
PWM_Finished_Flag = 0;
emergency_stop = 0;
//等待PWM脉冲发送完成或紧急停止被触发
while(!PWM_Finished_Flag)
{
if(emergency_stop)
{
PWM_count = 0;
CLK = 0;
TR1 = 0; //关闭TR1定时器
ENA = 0; //电机使能位
PWM_Finished_Flag = 1; //PWM 脉冲发送完成
break;
}
}
}
//紧急停止开关中断服务程序
void emergency_stop_isr()
{
emergency_stop = 1;
}
哪位可以帮忙指点一下 想执行stepper_motor() 输出PWM的时候 接近开关X1接通后 PWM立即停止不在输出剩余的部分, 为什么直接将TR1 = 0关闭定时器之后还是会输出完整的PWM 呢? 先谢谢
作者:
234134519
时间:
2023-4-29 16:32
不要沉啊 在线等大佬答复
作者:
234134519
时间:
2023-4-29 20:09
单独用这个程序在单片机里面可以正常执行,移植到其他程序里面去就不正常了
作者:
lkc8210
时间:
2023-4-29 22:00
X1呢?代码中看不到X1
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1