基于51单片机的L298N直流电机调速系统Proteus仿真程序

本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直流电机。在Proteus仿真环境下搭建了L298N直流电机驱动电路、矩阵键盘扫描电路以及LCD12864显示电路。实现了直流电机的启动、加速、正转、反转、制动等功能。同时,采用PID控制算法可实现电机速度在特定的场合实现自动切换。具体见附件。

#include<reg51.h>
#include<intrins.h>
#include<math.h>#include "lcd.h"
#include "Key.h"
#include "Motor.h"
#include "LCD12864.h"
#include "KeyBoard.h"
#include "LCD12864.h"
#include "LcdShow.h"
#include "PID.h"extern uchar State_Flag;
extern uchar Fwd_Flag;
extern uchar Rev_Flag;unsigned int  KeyValue;unsigned int idata pwm_t;//周期
unsigned int idata Impluse,Time_Count,ImpluseR;
uchar idata Stop_Flag,Run_Flag,Curve_Flag;uint idata Set_Speed;  //  设定转速
unsigned char idata Sz_Flag,Sr_Flag;  // 记录A相触发后  ,B相高低电平的标志
float idata L_Speed,R_Speed,ReaSpeed;uint idata PWM_Out,R_Duty,L_Duty,Turn_now;
sbit LSB_L = P1^0;    // LSB_L
sbit LSB_R = P1^1;    // LSB_Rvoid TimerInit(void)                //@11.0592MHz
{TMOD=0x01;                //定时器模式TL0 = 0x18;                //初值      1ms  TH0 = 0xFC;                //初值IT0 = 1;         //设置下降沿触发 还是低电平触发 0低电平IT1 = 1;         //设置下降沿触发 还是低电平触发 0低电平EA  = 1;EX0 = 1;EX1 = 1;ET0 = 1;TR0 = 1;               }void main()
{LED = 0;       Stop_Flag  = 0;Lcd_Initial();TimerInit();Set_Speed = 0;Lcd_Clear();while(1){KeyValue = Get_Keyvalue();   //  矩阵键盘扫描if(KeyValue == 14)   // 输入速度{Set_Speed = SpeedInput();       KeyValue = 16;}Key_Process();if(Run_Flag){Set_Speed = 80;Run_Flag = 0;}if(State_Flag && ~Stop_Flag)       {PWM_Out = PID_Calculate(Set_Speed,abs(ReaSpeed));R_Duty = PWM_Out + Turn_now;L_Duty = PWM_Out - Turn_now;}elsePWM_Out = 0;  // 停止  Lcd_Show();}
}//定时器0中断
void timer0() interrupt 1
{static int i;TL0 = 0x18;                //初值TH0 = 0xFC;                //初值pwm_t++;Time_Count++;;if(pwm_t == 500)   //500ms{pwm_t = 0;if(Stop_Flag){i++;L_Duty = 0;R_Duty = 0;if(i<31){LED = ~LED;if(i == 30)  {Stop_Flag = 0;i = 0;Set_Speed = 30;}}}}               if( pwm_t<L_Duty)MotorL_Control();       elseMotorL_Stop();if( pwm_t<R_Duty)MotorR_Control();       elseMotorR_Stop();/*---------M法 测速------------*/if(Time_Count == 100 )    //  100ms{Control();Time_Count = 0;Impluse = 0;ImpluseR = 0;}
}void int0() interrupt 0
{Impluse++;if(LSB_L == 1)Sz_Flag = 1;    //  正反转标志位 A相下降沿,B相高电平else Sz_Flag = 0;LSB_L = 1;
}void int1() interrupt 2   // 外部中断1   用于测 右轮的速度
{ImpluseR++;if(LSB_R == 1)Sr_Flag = 1;       //  正反转标志位 A相下降沿,B相高电平else Sr_Flag = 0;LSB_R = 1;
}

程序
Proteus仿真

基于51单片机的L298N直流电机调速系统Proteus仿真程序相关推荐

  1. matlab数字量转电气量,基于MATLAB的数字PID直流电机调速系统.doc

    电力拖动课程设计 作 者 段发鑫 系 (院) 信息工程学院 专 业 电气工程及其自动化 年 级 2010级 学 号 K031041513 指导教师 耿东山 日 期 2013.5.5 基于MATLAB的 ...

  2. matlab直流电机pid调速仿真,基于MATLAB的数字PID直流电机调速系统的实现

    Computer Knowledge and Technology 电脑知识与技术计算机工程应用技术 本栏目责任编辑:梁书 第6卷第22期(2010年8月)基于MATLAB 的数字PID 直流电机调速 ...

  3. 【043】基于51单片机的篮球比赛积分计时系统Proteus仿真

    一.压缩包资料内容 (1).基于51单片机的篮球比赛积分计时系统proteus仿真设计一份: (2).基于51单片机的篮球比赛积分计时系统proteus仿真设计keli源代码一份: (3).基于51单 ...

  4. 【038】基于51单片机的土壤湿度自动浇花系统Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的土壤湿度自动浇花系统proteus仿真设计一份: (2).基于51单片机的土壤湿度自动浇花系统proteus仿真设计keli源代码一份: (3).基于51单 ...

  5. 基于MATLAB的数字PID直流电机调速系统

    摘要 电机的主要作用是产生驱动转矩,通常是作为电器或各种机械的动力源.直流电动机具有良好的启.制动性能,在轧钢机及流水线.电梯.汽车等领域得到了广泛应用.本文首先根据直流电机工作原理建立直流电机的数学 ...

  6. 基于51单片机随机数自动摇号抽奖系统Proteus仿真

    资料编号:165   下面是功能展示视频: 165-基于51单片机随机数自动摇号抽奖系统Proteus仿真(源码+仿真+全套资料) 功能讲解: 采用51单片机作为控制CPU,LCD1602显示相关数值 ...

  7. 变频调速系统c语言编程,基于8098单片机的SPWM变频调速系统

    数字控制的交流调速系统所选用的微处理器.功率器件及产生PWM波的方法是影响交流调速系统性能好坏的直接因素.在介绍了正弦脉宽调制(SPWM)技术的基础上,设计了一种以8098单片机作为控制器,以智能功率 ...

  8. 104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.Protues仿真 六.流程图 七.程序源码 八.资料包括 摘要 随着气温的逐渐上升, ...

  9. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

最新文章

  1. cas+shiro+spring 单点登录
  2. HashMap为什么是线程不安全的?
  3. java 遍历对象_java中some(),every()循环遍历,Object.getOwnPropertyNames()遍历对象的属性...
  4. Spring注解开发-初始化/销毁方法注解
  5. 第三次学JAVA再学不好就吃翔(part78)--List类
  6. 实体类的动态生成(三)
  7. php代码里怎么写html代码_菜鸟青铜变白银!Python 项目代码写完了,然后怎么打包和发布?...
  8. 学妹问,学网站开发还是打 ACM?
  9. 第46课 精益求精 《小学生C++趣味编程》
  10. [收藏学习]Linux的实时监测命令
  11. EnterpriseLibrary 介绍
  12. c#调用c++ dll的一个例子
  13. sql分别对两列数据求和以不同的条件_利用数组与字典,实现双条件数据汇总的方法...
  14. 基于51单片机的金沙滩12864的计算器
  15. MathJax 支持的 Latex 符号总结(各种箭头符号)
  16. Leetcode有效数独的Python解法
  17. win7服务器未能登录怎么解决,win7系统出现User Profile Service服务未能登录的解决方法...
  18. 设计师的配色理论:你真懂颜色了吗?
  19. OpenSSL库下载地址
  20. 阿卡迪亚大学计算机专业好考吗,阿卡迪亚大学很烂吗

热门文章

  1. 自己动手做智能家居之:智能空调控制
  2. 单片机c语言字符串赋值,单片机C语言中数组的用法
  3. 24岁的男人心理有些幼稚,让人瞧不起吗???
  4. Android 如何改变应用图标
  5. 红尘有爱,盈花香满怀
  6. 凑单满减计算神器微信小程序源码下载不再掉入网购打折坑
  7. 如何排版 微信公众号「代码块」
  8. instagram akp_您现在可以将音乐添加到您的Instagram故事中
  9. 使用SpaCy构建自定义 NER 模型
  10. “华为杯”大连理工大学第15届大学生程序设计大赛(验题人题解)