找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6611|回复: 2
收起左侧

51单片机+直流电机PWM调速控制Proteus仿真(附Word文档+C程序+流程图)

[复制链接]
ID:596401 发表于 2019-8-8 12:21 | 显示全部楼层 |阅读模式
设计思路:
直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。
主体电路:即直流电机PWM控制模块。这部分电路主要由AT89C52单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现电机的智能控制。其间是通过AT89C52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:
设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转和急停控制。
设计控制部分:主要由AT89C52单片机的外部中断扩展电路组成。直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。
设计显示部分: LED数码显示部分,实现对PWM脉宽调制占空比的实时显示。

系统框架设计:
1.jpg
仿真运行:
截图5.jpg
程序部分:
*********************************************************************
                                                 直流电机PWM调速
功能描述:使用单片机T0定时器产生(xxxHz)脉宽调制信号,输到L298NEN_A
                实现双直流电机的速度调控。
修订日期:2011-5-7
*********************************************************************/
#include<reg52.h>   
#include<intrins.h>                        
#define uchar unsigned char  
#define uint unsigned int

/**********************************************************************
                                                 L298n接口定义
**********************************************************************/  
sbit MOTOR_A_2=P3^6;
sbit MOTOR_A_1=P3^7;
sbit EN_MOTOR_A =P3^4;                                                                                                              
sbit k1=P1^5;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
uchar T=0;
uchar W=0;
uchar A=0;
uchar k=0;
uchar i=0;

uchar code table1[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar code table2[]={0xef,0xbf,0xdf,0x7f};

void delayms(uint t);                                                      
/**********************************************************************
                                          数码管显示
**********************************************************************/
void disp(void)
{
       P0=table2[3];  
       P2=table1[W%10];
       delayms(1);
       P0=0xff;

       P0=table2[2];
       P2=table1[W/100];
       delayms(1);
       P0=0xff;

       P0=table2[1];
       P2=table1[W/10%10];
       delayms(1);
       P0=0xff;

       P0=table2[0];
       P2=table1[A];
       delayms(1);
       P0=0xff;
}

/**********************************************************************
                                                 定时器变量定义
**********************************************************************/


void init(void)
{
       TMOD=0x01;
       EA=1;                                       
       ET0=1;
       TR0=1;
       //设置定时时间
       TH0=0xfd;
       TL0=0x17;
}
void timer0() interrupt 1
{
       TL0=0x17;
       TH0=0xff;
       T++;
       disp();
       if(T>W)
              EN_MOTOR_A=1;
       else
              EN_MOTOR_A=0;
       if(T==100)
              T=0;

}                  
/**********************************************************************
                                                 延时1ms
**********************************************************************/
void delayms(uint t)
{
       ucharj;
       while(t--)
       {
              for(j=0;j<250;j++)
              {
          _nop_();
      _nop_();
      _nop_();
      _nop_();
              }
       }

}



回复

使用道具 举报

ID:347629 发表于 2020-6-9 09:06 | 显示全部楼层
楼主在吗,需要全部,
回复

使用道具 举报

ID:723721 发表于 2020-5-4 21:00 来自手机 | 显示全部楼层
哭了,楼主能分享一下全部的嘛
回复

使用道具 举报

ID:605314 发表于 2019-9-8 17:36 来自手机 | 显示全部楼层
根本不全,还要关注
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表