目录

一、PWM脉冲控制小车调速

二、代码实现


一、PWM脉冲控制小车调速

原理:全速前进是LeftCon1A = 0;LeftCon1B = 1;完全停止是LeftCon1A = 0;LeftCon1B = 0;

那么单位时间内比如:20ms,有15ms是全速前进,5ms是完全停止,速度就会比5ms全速前进,15ms完全停止获得的功率多,相应的速度更快

二、代码实现

main.c

#include "motor.h"
#include "delay.h"
#include "uart.h"
#include "time.h"extern char speed;   //此变量/函数是在别处定义的,要在此处引用void main()
{Time0Init();   //定时器初始化UartInit();    //串口初始化while(1){speed = 10;   //10份单位时间全速运行,30份停止,所以慢,20ms是40份的500usDelay1000ms();Delay1000ms();speed = 20;Delay1000ms();Delay1000ms();speed = 40;Delay1000ms();Delay1000ms();}
}

motor.c

#include "reg52.h"sbit RightCon1A = P3^2;
sbit RightCon1B = P3^3;sbit LeftCon1A = P3^4;
sbit LeftCon1B = P3^5;void goForWard(){    //小车前转LeftCon1A = 1;LeftCon1B = 0;RightCon1A = 1;RightCon1B = 0;
}void goBack(){       //小车后转LeftCon1A = 0;LeftCon1B = 1;RightCon1A = 0;RightCon1B = 1;
}void goLeft(){   //小车左转LeftCon1A = 0;LeftCon1B = 0;RightCon1A = 1;RightCon1B = 0;
}void goRight(){   //小车右转LeftCon1A = 1;LeftCon1B = 0;RightCon1A = 0;RightCon1B = 0;
}void stop(){   //小车停止LeftCon1A = 0;LeftCon1B = 0;RightCon1A = 0;RightCon1B = 0;
}

motor.h

void goForWard();
void goBack();
void goLeft();
void goRight();
void stop();

delay.c


#include "intrins.h"void Delay1000ms()        //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void Delay10ms()       //@11.0592MHz
{unsigned char i, j;i = 18;j = 235;do{while (--j);} while (--i);
}

delay.h

void Delay1000ms();
void Delay10ms();

uart.c------串口初始化文件

#include "reg52.h"
#include "motor.h"
#include "string.h"
#include "delay.h"
#define SIZE 12sfr AUXR = 0x8E;
char cmd;
char buffer[SIZE];void UartInit(void)       //9600bps@11.0592MHz
{AUXR = 0x01;   //降低时钟对外界的辐射SCON = 0x50;   //串行口寄存器工作模式选择方式1,RNE=1,为串行允许接收状态TMOD &= 0x0F;  //定时器1工作方式位8位自动重装TMOD |= 0x20;TH1 = 0xFD; TL1 = 0xFD;   //9600波特率的初值TR1 = 1;      //启动定时器EA = 1;       //总中断寄存器,开启总中断ES = 1;       //开启串口中断}

uart.h

void UartInit(void);

time.c ------定时器初始化及定时器开启中断文件

#include "motor.h"
#include "reg52.h"char speed;
char cnt = 0;void Time0Init(){//1、配置定时器0工作模式位16位计时TMOD = 0x01;//2、给定时器一个初值,每个周期都等于0.5msTL0 = 0x33;TH0 = 0xFE;//3、定时器开始计时TR0 = 1;TF0 = 0;   //4、打开中断定时器ET0 = 1;//5、设置总中断定时器EA = 1;}void Time0Handler() interrupt 1   //定时器0的中断号为 interrupt 1
{cnt ++;           //统计爆表的次数//给定时器重新定义初值,每个周期都等于0.5msTL0 = 0x33;      TH0 = 0xFE;//控制PWM波形if(cnt < speed){//前进goForWard();    }else{//停止stop();   }if(cnt == 40){   //要爆表40次,经过了20mscnt = 0;      //当100次表示1s,重新让cnt从0开始,计算下一次的1s        }
}

time.h

void Time0Init();

智能小车之PWM脉冲控制小车调速相关推荐

  1. matlab脉宽调制pwm,PWM脉宽调制直流调速系统设计及MATLAB仿真验证

    PWM 脉宽调制直流调速系统设计及MATLAB 仿真验证 第一章 系统概述 1.1 设计目的 1. 掌握转速,电流双闭环控制的双极式PWM 直流调速原理. 2. 掌握并熟练运用MATLAB 对系统进行 ...

  2. 基于模糊控制(fuzzy control)的PWM直流电机闭环调速系统

    文章目录 摘要 1. 引言 2. 系统总体框图 3. 模糊(Fuzzy)控制算法 4. 软件设计及Proteus仿真 摘要 本文介绍直流电机PWM恒转速闭环调节系统的一种设计方案.系统以单片机AT89 ...

  3. 51单片机+直流电机PWM 10级调速控制

    51单片机+直流电机PWM 10级调速控制 Proteus仿真演示 示例程序代码 #include <STC89C5xRC.H> typedef unsigned char u8; typ ...

  4. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...

  5. NanoPC-T4 上实现pwm风扇自动调速

    友善之臂推出的 NanoPC-T4 是一款采用 瑞芯微 RK3399 方案的嵌入式开发板,性能强大.发热量也杠杠的. 其板载PWM调速风扇接口采用GH1.25 插头,支持PWM调速.但查看了下 dts ...

  6. 嵌入式系统课设:基于PWM的直流电机调速课程设计

    设计任务:以STM32微控制器为核心,设计一个直流电机调速装置. 利用STM32微控制器的PWM功能,设计一个直流电机闭环调速电路.整体装置采用电池供电,需进行装置各部分供电电路设计,测速方案设计,具 ...

  7. 51单片机PWM(电机调速)这个可以用在智能小车的调试

    1.直流电机介绍 直流电机是一种将电能转换为机械能的装置.一般的直流电机有两个电机,当电机正接时电机正转,反之亦然 2.电机驱动电路 第一种只能单向转向,第二种是可以正反转(常用第二种) 3.PWM介 ...

  8. 基于PWM控制直流电机调速的设计

    实验现象:通过S2,S3按键,增加/减小PWM,控制LED灯组的亮灭,同时当高于或低于PWM时,蜂鸣器将工作. #include <reg52.h> #define uchar unsig ...

  9. 51单片机-PWM调速(直流电机,智能小车的电机调速)

    文章目录 前言 一.PWM 二.产生PWM的方法 使用定时器产生一个恒定的周期 中断服务子程序里设置比较值 三.实验 使用PWM对直流电机调速 使用PWM对智能小车的电机调速 总结 前言 这次来对PW ...

最新文章

  1. leetcode网学习笔记(1)
  2. Python黑帽编程2.4 流程控制
  3. [Java] SpringMVC工作原理之四:MultipartResolver
  4. 计算机网络总线型结构优,计算机基础知识:计算机网络总线型拓扑结构的概述及优缺点...
  5. Nginx+Tomcat负载均衡访问网页出现报错HTTP Status 400 – 错误的请求
  6. Java提取文本文档中的所有网址(小案例介绍正则基础知识)
  7. Tuple VS ValueTuple
  8. CCF-CSP 最大的矩形
  9. Qt学习笔记常用容器
  10. eclipse php链接mysql_eclipse怎么连接mysql
  11. Hadoop2.7.3伪分布式集群搭建
  12. 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
  13. 【第149期】游戏策划:给@Dimitri的简历分析
  14. STC单片机代码烧录
  15. 在一夜暴富之前,我先一夜秃了头
  16. Oracle数据库之日期查询
  17. 数字图像处理与Python实现-Scikit-Image-图像滤波(三)
  18. 信管师培训之第十一节课作业(法律法规+标准规范+职业道德)
  19. 白鹭引擎(Egret Engine )
  20. 【应用随机过程】07. 平稳过程

热门文章

  1. pandas神器操作excel表格大全(数据分析数据预处理)
  2. 大连理工大学软件学院博客地址
  3. 民间各类恐怖请仙大法(上)(转帖)
  4. MySQL赋权报错:’the right syntax to use near ‘identified by ‘password‘ with grant option‘
  5. 图片转文字工具怎样进行批量识别?
  6. 网址格式化:截取域名
  7. IT项目管理课后作业
  8. 360系统急救箱扫服务器,今晚使用360系统急救箱扫描系统发现问题,之后windows 更新不能启动了...
  9. AVFrame 与 yuv420那些事
  10. 基于SpringBoot打造的OA、CMS、ERP通用后台开发框架