基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频) 您所在的位置:网站首页 单片机按键流程图解视频 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

2024-07-12 10:34| 来源: 网络整理| 查看: 265

基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

仿真图proteus 7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0031

视频

基于51单片机的PWM控制直流电机设计

主要功能:

1.设计要求

采用51单片机作为核心控制器,控制直流电机的正转,反转,制动,停止。

2.功能要求

1)数码管显示当前转动方向和当前的PWM占空比0~100%。

2)电机(L298n)转速可以通过按键调整,也可以开始暂停,正转和反转。

3)按键可实现加速、减速、正转、反转、停止等功能。

1键:加速键,短按,占空比加1;

2键:减速键,短按,占空比减1;

3键:正反转切换键,按下后电机正反转;

4键:按一下停止,PWM脉宽清零。

仿真

开始仿真后,用数码管第一位显示0表示正转后面三位标志PWM脉宽(0-100), 示波器实时检测显示脉宽黄线是正转脉宽,蓝线是反转脉宽。

img

反转脉宽如下所示

img

程序:

img

部分代码:

#include #include #define uchar unsigned char #define uint unsigned int /********************************************************************** L298n接口定义 **********************************************************************/ sbit MOTOR_A_1=P3^6; sbit MOTOR_A_2=P3^7; sbit k1=P1^0; //定义k1为p1.0口 sbit k2=P1^1; //定义k2为p1.1口 sbit k3=P1^2; //定义k3为p1.2口 sbit k4=P1^3; //定义k4为p1.3口 uchar T=0; //定时标记 uchar W=0; //脉宽值 0~100 uchar A=0; //方向标记 0,1 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[]={0xfe,0xfb,0xfd,0xf7}; void delayms(uint t); /********************************************************************** 数码管显示 **********************************************************************/ void disp(void) { P2=table2[3]; P0=table1[W%10]; //显示占空比个位 delayms(1); //延时1ms P2=0xff; //P0清1 P2=table2[2]; P0=table1[W/100]; //显示占空比百位 delayms(1); //延时1ms P2=0xff; //P0清1 P2=table2[1]; P0=table1[W/10%10]; //显示占空比十位 delayms(1); //延时1ms P2=0xff; //P0清1 P2=table2[0]; P0=table1[A]; //显示方向 delayms(1); //延时1ms P2=0xff; //P0清1 } /********************************************************************** 定时器变量定义 **********************************************************************/ void init(void) { //启动中断 TMOD=0x01; EA=1; ET0=1; TR0=1; //设置定时时间 TH0=0xff; TL0=0xf6; } /********************************************************************** 延时1ms **********************************************************************/ void delayms(uint t) { uchar j; while(t--) { for(j=0;j


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有