7814|14

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位大侠有51单片机控制直流电机的源程序 [复制链接]

RTRT,本人现在在做单片机的实验,苦于对电机的一窍不通,程序无法入手啊。。。。

最新回复

顶一顶  详情 回复 发表于 2011-8-18 16:59
点赞 关注

回复
举报

94

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
采用PwM控制;由于51单片机没有PWM功能,需要自己模拟:

51系列单片机输出PWM的两种方法

51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。电路图见图一,采用了高速光隔(6N137)输出,并将PWM的信号倒相。

一、固定脉宽PWM输出
用T0定时器完成PWM输出,脉宽固定:65536微妙。T0定时器设置成:16位定时器
PWM:
程序清单:(12MHz)
                     PwmData0     ;T0定时t1所需的定时初值(字)
PwmData1     ;T0定时t2所需的定时初值(字)
                     PwmF            ;PWM输出标志
;*********************************************************
                     setb tro  ;启动T0
                     。。。。。。
T0Int:;T0中断服务程序
                     JB  PwmF ,PwmOutH ;PWM输出未完成返回
                     Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
                     Setb tr0
                     Setb PwmF
Clr  p1.0  ;PWM输出脚
reti
    PwmOutH:
                            Setb p1.0
                            Clr tr0
                            Mov TH0,High(PwmData1)
Mov TL0,Low(PwmData1)
Setb tr0
Clr PwmF
reti
说明:在主程序中计算PwmData0、PwmData1的值。         
二、可变脉宽PWM输出
用T0定时器控制PWM的占空比,T1定时器控制脉宽(最大:65536微妙)。
T0、T1定时器设置成:16位定时器。

程序清单:(12MHz)
                     PwmData0     ;T0定时t1所需的定时初值(字)
PwmData1     ;T1定时T所需的定时初值(字)
;*********************************************************
                     setb tro  ;启动T0
                     setb tr1
                     。。。。。。
T0Int:;T0中断服务程序
                     Clr  tr0
                     setb  p1.0  ;PWM输出脚
reti
    T1Int:;T1中断服务程序
                            Clr  p1.0
                            Clr tr0
                            Clr tr1
Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
Mov TH1,High(PwmData1)
Mov TL1,Low(PwmData1)
Setb tr1
Setb tr0
reti
说明:在主程序中计算PwmData0、PwmData1的值。   

 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 


给你一个网站  www.dzkj.cn.com

如果用AVR 则可以直接产生PWM波形:  调节占空比就控制了输出的平均电压,从而控制电机的转速;


不好上传图:要不可以给你好好讲讲  PWM
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
#include //包括一个52标准内核的头文件
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit ENA=P1^0; /* L298的Enable A */
sbit IN1=P1^1; /* L298的Input 1 */
sbit IN2=P1^2; /* L298的Input 2 */

uchar scale=2;//用于保存占空比的输出"0"的时间份额
uchar tt; //中断次数tt

void delay(ulong j) /* 简易延时函数 */

{for(j;j>0;j--);}

void main(void) // 主程序
{
  
  RCAP2H =0xF6; //赋T2的预置值,决定T2溢出时间
  RCAP2L =0xF2;
  T2CON=0X00;
  ET2=1; //打开定时器2中断
  EA=1; //打开总中断
  TR2=1; //启动定时器
  ENA=1;//小车驱动使能
  IN1=0;
  IN2=0;
  delay(600000);
  ENA=0;//延时一段时间后,小车驱动关闭
  while(1); //程序等待循环

}

//1/1200秒定时器2中断
timer2() interrupt 5
{
  
  TF2=0;
  tt++;
  if(tt==6) //每1/120秒整开始输出低电平
  {
   IN1=0;
   tt=0;
  }
  if(scale==tt) //按照当前占空比切换输出高电平
  IN1=1;
}//改变scale可改变低电平所占时间
//改变tt可改变方波频率
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

5
 
沉醉的枫,真是好人
这样烦人的事情都这么愿意做

希望eeworld永远这样下去。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢了!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
hehe 建议用msp430,51有的也可以产生PWM
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
好人啊
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
好人啊。。。。。。。。。。谢谢这位大哥
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
非常感谢!!!
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
感谢感谢,现在还没有调试,希望有用!!!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
好人啊  顶顶  一定要顶!!!1
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
不错不错··
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

14
 
帮顶
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

15
 
顶一顶
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表