单片机控制交流电机正反转的C语言程序
我的大体硬件框架已经想好了:就是用两个继电器分别接电机正转和反转,然后用单片机的I/O口分别控制两个继电器的接通和断开,现在要编程实现,但实在没有思路,大家谁有类似的的程...
我的大体硬件框架已经想好了:就是用两个继电器分别接电机正转和反转,然后用单片机的I/O口分别控制两个继电器的接通和断开 ,现在要编程实现,但实在没有思路,大家谁有类似的的程序或提供下大概的思路都可以,还有几点小要求:
1.在原有的单片机设计程序控制的基础上再添加一个键盘显示控制模块,既能够单片机自动控制,又能够通过键盘手动控制。手动控制的思路主要是由键盘在显示屏上设置一个数,即所需的正反转的次数,再按下启动键后单片机按照程序控制电机正反转达到手动设定的次数。我的想法是:如果显示上设定为1的话所要执行的内容是正转一次再反转一次。
2由于不光要控制电机转动方向,还要控制电机转动的角度我还想再添加一个霍尔传感器反馈的模块。具体原理就是给电机的转轴上套一个圆盘,圆盘上提前定好一个角度分别放置两个霍尔传感器,并在其中的一个传感器上方放置一个固定的磁钢。在执行电机正反转的过程中每当一个传感器转过一个磁钢时引起磁场的变化,传感器便向单片机反馈一个脉冲信号,单片机收到信号再执行下一步。
其实就是假设单片机一开始发送个程序让电机带动圆盘执行正转,当转到其中一个传感器转过固定磁钢时,传感器将脉冲信号反馈给单片机,单片机收到信号后发出停止指令,然后在执行反转指令,反转到另一个传感器转过磁钢后再停止,再执行正转指令,通过单片机设置的转动次数这样反复。
我知道我的要求很多,但现在编程真的没有思路,大家如果没有合适的程序,哪怕把主体流程框架或部分设计的思路给我说下都行,答案好的话我肯定会追加! 展开
1.在原有的单片机设计程序控制的基础上再添加一个键盘显示控制模块,既能够单片机自动控制,又能够通过键盘手动控制。手动控制的思路主要是由键盘在显示屏上设置一个数,即所需的正反转的次数,再按下启动键后单片机按照程序控制电机正反转达到手动设定的次数。我的想法是:如果显示上设定为1的话所要执行的内容是正转一次再反转一次。
2由于不光要控制电机转动方向,还要控制电机转动的角度我还想再添加一个霍尔传感器反馈的模块。具体原理就是给电机的转轴上套一个圆盘,圆盘上提前定好一个角度分别放置两个霍尔传感器,并在其中的一个传感器上方放置一个固定的磁钢。在执行电机正反转的过程中每当一个传感器转过一个磁钢时引起磁场的变化,传感器便向单片机反馈一个脉冲信号,单片机收到信号再执行下一步。
其实就是假设单片机一开始发送个程序让电机带动圆盘执行正转,当转到其中一个传感器转过固定磁钢时,传感器将脉冲信号反馈给单片机,单片机收到信号后发出停止指令,然后在执行反转指令,反转到另一个传感器转过磁钢后再停止,再执行正转指令,通过单片机设置的转动次数这样反复。
我知道我的要求很多,但现在编程真的没有思路,大家如果没有合适的程序,哪怕把主体流程框架或部分设计的思路给我说下都行,答案好的话我肯定会追加! 展开
2个回答
展开全部
这个很简单,我教你怎么玩,下面是思路和方式
思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;
PS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned char k=0; //k表示正反转次数
sbit X0=P3^2; //调节按钮
sbit X1=P1^1; //上限位接近开关信号
sbit X2=P1^2; //下限位接近开关信号
sbit Y1=P0^0; //电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1; //电机下降
void delay50ms(unsigned int i)
{
unsigned int j;
for (i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1; //下降沿触发
EX0=1; //开P3.2外部中断
EA=1; //总中断开
while(1)
while(k)
{
Y1=0; //正转
while(X1==1); //等待正转接近开关反应
Y1=1; //正转停
delay50ms(1); //停止时间50ms
Y2=0; //反转
while(X2==1); //等待反转接近开关反应
Y2=1; //反转停
k--; //圈数减一
}
}
void counter0(void) interrupt 0
{
k++; //外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;
PS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned char k=0; //k表示正反转次数
sbit X0=P3^2; //调节按钮
sbit X1=P1^1; //上限位接近开关信号
sbit X2=P1^2; //下限位接近开关信号
sbit Y1=P0^0; //电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1; //电机下降
void delay50ms(unsigned int i)
{
unsigned int j;
for (i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1; //下降沿触发
EX0=1; //开P3.2外部中断
EA=1; //总中断开
while(1)
while(k)
{
Y1=0; //正转
while(X1==1); //等待正转接近开关反应
Y1=1; //正转停
delay50ms(1); //停止时间50ms
Y2=0; //反转
while(X2==1); //等待反转接近开关反应
Y2=1; //反转停
k--; //圈数减一
}
}
void counter0(void) interrupt 0
{
k++; //外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
展开全部
这个很简单,我教你怎么玩,下面是思路和方式
思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;
PS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned char k=0; //k表示正反转次数
sbit X0=P3^2; //调节按钮
sbit X1=P1^1; //上限位接近开关信号
sbit X2=P1^2; //下限位接近开关信号
sbit Y1=P0^0; //电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1; //电机下降
void delay50ms(unsigned int i)
{
unsigned int j;
for (i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1; //下降沿触发
EX0=1; //开P3.2外部中断
EA=1; //总中断开
while(1)
while(k)
{
Y1=0; //正转
while(X1==1); //等待正转接近开关反应
Y1=1; //正转停
delay50ms(1); //停止时间50ms
Y2=0; //反转
while(X2==1); //等待反转接近开关反应
Y2=1; //反转停
k--; //圈数减一
}
}
void counter0(void) interrupt 0
{
k++; //外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用P0.0到P0.2来代替;输出2个或以上(这看你接什么显示器,如果是PC的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用P1.0、P1.1;
PS:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用NPN传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned char k=0; //k表示正反转次数
sbit X0=P3^2; //调节按钮
sbit X1=P1^1; //上限位接近开关信号
sbit X2=P1^2; //下限位接近开关信号
sbit Y1=P0^0; //电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit Y2=P0^1; //电机下降
void delay50ms(unsigned int i)
{
unsigned int j;
for (i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1; //下降沿触发
EX0=1; //开P3.2外部中断
EA=1; //总中断开
while(1)
while(k)
{
Y1=0; //正转
while(X1==1); //等待正转接近开关反应
Y1=1; //正转停
delay50ms(1); //停止时间50ms
Y2=0; //反转
while(X2==1); //等待反转接近开关反应
Y2=1; //反转停
k--; //圈数减一
}
}
void counter0(void) interrupt 0
{
k++; //外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询