怎样用单片机控制电机或马达的正反转以及转速。要有电路设计,如果有proteus仿真图和程序就最好了!

如题所述

给你原理图,修改一下,

两个程序修改一下。。

实在弄不来我再帮忙

这是控制正反转的程序:

#include <reg52.h>

bit Flag;//定义正反转标志位

unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格

unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格

/******************************************************************/

/*                    延时函数                                    */

/******************************************************************/

void Delay(unsigned int i)//延时

{

 while(--i);

}

/******************************************************************/

/*                   主函数                                       */

/******************************************************************/

main()

{

 

 unsigned char i;

  

  EX1=1;         //外部中断0开

  IT1=1;         //边沿触发

  EA=1;          //全局中断开

 while(!Flag)            

 {

  P0=0x71;//显示 F 标示正转

  for(i=0;i<4;i++)      //4相

     {

     P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格

     Delay(800);        //改变这个参数可以调整电机转速 ,数字越小,转速越大

 }

  }

while(Flag)

 { 

  P0=0x7C;//显示 b 标示反转

  for(i=0;i<4;i++)      //4相

     {

     P1=B_Rotation[i];  //输出对应的相 

     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大

 }

  }

}

/******************************************************************/

/*                   中断入口函数                                 */

/******************************************************************/

void ISR_Key(void) interrupt 2 using 1

{

 Delay(300);

 

 Flag=!Flag;         //s3按下触发一次,标志位取反

 }

这是控制转速的程序:

#include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit KEY1 = P3^1;     //定义调速按键

sbit PWM = P1^5;      //定义调速端口

unsigned char CYCLE;  //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms

unsigned char PWM_ON ;//定义高电平时间

/******************************************************************/

/*                    延时函数                                    */

/******************************************************************/

void delay(unsigned int cnt)

{

 while(--cnt);

}

/******************************************************************/

/*                    主函数                                      */

/******************************************************************/

main()

{

unsigned char PWM_Num;//定义档位

TMOD |=0x01;//定时器设置 1ms in 12M crystal

TH0=(65536-1000)/256; 

TL0=(65536-1000)%256;//定时1mS 

IE= 0x82;  //打开中断

TR0=1;

CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步

while(1)

  {

if(!KEY1)

  {

   delay(10000);

   if(!KEY1)

     {

      PWM_Num++;

  if(PWM_Num==4)PWM_Num=0;

       switch(PWM_Num){

       case 0:P0=0x06;PWM_ON=0;break;//高电平时长 

       case 1:P0=0x5B;PWM_ON=4;break;

       case 2:P0=0x4F;PWM_ON=6;break;

       case 3:P0=0x66;PWM_ON=8;break;

       default:break;

     }

   }

  }

 }

}

/******************************************************************/

/*                    定时器中断函数                              */

/******************************************************************/

void tim(void) interrupt 1 using 1

{

static unsigned char count; //

TH0=(65536-1000)/256; 

TL0=(65536-1000)%256;//定时1mS 

if (count==PWM_ON)

    {

     PWM = 1;        //灯灭 

    }

  count++;

if(count == CYCLE)

    {

    count=0;

if(PWM_ON!=0)    //如果左右时间是0 保持原来状态

   PWM = 0;      //灯亮

    }

}

追问

怎么不是51或者是52单片机呢?

追答

52和51唯区别只有内部寄存器的大小,
51是4K 52是8K
其他的操作都一样。。。都兼容的。。。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-16
转速可以通过PWM波来控制,正反装通过对四条线的高低电平信号来调节

怎样用单片机控制电机或马达的正反转以及转速。要有电路设计,如果有pro...
Delay(800); \/\/改变这个参数可以调整电机转速 ,数字越小,转速越大 } } while(Flag){ P0=0x7C;\/\/显示 b 标示反转 for(i=0;i<4;i++) \/\/4相 { P1=B_Rotation[i]; \/\/输出对应的相 Delay(500); \/\/改变这个参数可以调整电机转速 ,数字越小,转速越大 } } } \/***\/ \/...

...怎样控制电机的正反转和变速,最好是proteus仿真的电路图
用51做一个PWM波就可以控制转速了

如何用proteus软件仿真电路图
1、首先我们打开电脑,找到proteus图标,鼠标左键双击,将软件打开,其界面如图所示。2、然后我们点击界面上方的库,在弹出来的选项中选择第一个拾取元件,然后进入库中搜索电路图需要的元件,选中元件后点击界面右下角的确定,就可以将该元件添加到软件界面里。3、点击界面左边,红色方框里面的图标,就可以...

单片机中怎样用io口驱动电机
第一步:先在Proteus软件中设计仿真电路原理图。第二步:再在Keil C51软件中编写且编译程序,程序后缀必须是.c。然后在打开的“Option for Target‘Target 1’”选项卡,“Target”标签下频率设置为“11.0592”, “Output”标签下,将“Creat HEX File”项打勾选中,设置生成一个.hex文件。第三步:...

...自己仿照编写的步进电机控制程序,用proteus仿真步进电机不动_百度...
delay();P2=0x01;delay();这个delay()的时间长短是控制转速的,有一定范围的,在一定范围内,越小越快,超过了的话,电机识别不了脉冲就不转了。include<reg52.h> define uchar unsigned char define uint unsigned int define MotorData P0 \/\/步进电机控制接口定义 uchar phasecw[4] ={0x...

Proteus单片机控制直流电机测速部分 74LS386 编码电机motor-encoder...
可以参考之前我的回答:proteus motor-encoder有五根线,左右两侧两根线接电源。下面三根线,左右两侧两根线输出相位差90度的脉冲,每旋转一圈输出多少个脉冲可以在设置对话框中设置,中间那根线,每圈输出一个脉冲。motor-encoder的电源电压可以在设置框中设置。转速显示的单位是rpm.有单片机开发控制器订做...

如何使用Proteus做单片机仿真
使用proteus仿真单片机,一般需要做以下工作:1、利用proteus平台设计原理图。2、利用KEIL等设计相应的控制软件,最好编译成HEX文件。3、可以连接KEIL与proteus互动仿真,也可以用proteus载入HEX文件直接仿真。

...的板子 控制液晶显示的 有必要用proteus仿真吗
但有一点值得注意:proteus仿真电路是在器件电气条件理想的前提下仿真的,在实际做PCB板的时候,要注意实际条件下的电气特点,适当的在电路中增加一些器件保障板子的性能!以51单片机P0口为例:实际上P0口不具备上拉功能,要在P0口上加上拉电阻,但是在proteus仿真软件中不加上拉它也仿真,因为proteus库中...

怎么样利用LPC2124 L297 L298在Proteus环境中实现步进电机的转速和方...
方向控制 给L297方向控制位输入高低电平即可 转速调节 控制单片机脉冲输出频率即可,脉冲频率越高L297输出频率越高,电机转速越快。具体可以通过循环语句实现

求高手赐教关于proteus模拟单片机控制步进电机的问题
实际上的原因很简单,就是因为proteus里面的延时时间和你在实际单片机上的延时时间是不一致的,你试着调整一下延时时间试试,先从数码管着手,延时时间对了肯定不会闪

相似回答