智能小车之PWM脉冲控制小车调速
目录
一、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脉冲控制小车调速相关推荐
- matlab脉宽调制pwm,PWM脉宽调制直流调速系统设计及MATLAB仿真验证
PWM 脉宽调制直流调速系统设计及MATLAB 仿真验证 第一章 系统概述 1.1 设计目的 1. 掌握转速,电流双闭环控制的双极式PWM 直流调速原理. 2. 掌握并熟练运用MATLAB 对系统进行 ...
- 基于模糊控制(fuzzy control)的PWM直流电机闭环调速系统
文章目录 摘要 1. 引言 2. 系统总体框图 3. 模糊(Fuzzy)控制算法 4. 软件设计及Proteus仿真 摘要 本文介绍直流电机PWM恒转速闭环调节系统的一种设计方案.系统以单片机AT89 ...
- 51单片机+直流电机PWM 10级调速控制
51单片机+直流电机PWM 10级调速控制 Proteus仿真演示 示例程序代码 #include <STC89C5xRC.H> typedef unsigned char u8; typ ...
- 51单片机—使用PWM对直流电机调速
文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...
- NanoPC-T4 上实现pwm风扇自动调速
友善之臂推出的 NanoPC-T4 是一款采用 瑞芯微 RK3399 方案的嵌入式开发板,性能强大.发热量也杠杠的. 其板载PWM调速风扇接口采用GH1.25 插头,支持PWM调速.但查看了下 dts ...
- 嵌入式系统课设:基于PWM的直流电机调速课程设计
设计任务:以STM32微控制器为核心,设计一个直流电机调速装置. 利用STM32微控制器的PWM功能,设计一个直流电机闭环调速电路.整体装置采用电池供电,需进行装置各部分供电电路设计,测速方案设计,具 ...
- 51单片机PWM(电机调速)这个可以用在智能小车的调试
1.直流电机介绍 直流电机是一种将电能转换为机械能的装置.一般的直流电机有两个电机,当电机正接时电机正转,反之亦然 2.电机驱动电路 第一种只能单向转向,第二种是可以正反转(常用第二种) 3.PWM介 ...
- 基于PWM控制直流电机调速的设计
实验现象:通过S2,S3按键,增加/减小PWM,控制LED灯组的亮灭,同时当高于或低于PWM时,蜂鸣器将工作. #include <reg52.h> #define uchar unsig ...
- 51单片机-PWM调速(直流电机,智能小车的电机调速)
文章目录 前言 一.PWM 二.产生PWM的方法 使用定时器产生一个恒定的周期 中断服务子程序里设置比较值 三.实验 使用PWM对直流电机调速 使用PWM对智能小车的电机调速 总结 前言 这次来对PW ...
最新文章
- leetcode网学习笔记(1)
- Python黑帽编程2.4 流程控制
- [Java] SpringMVC工作原理之四:MultipartResolver
- 计算机网络总线型结构优,计算机基础知识:计算机网络总线型拓扑结构的概述及优缺点...
- Nginx+Tomcat负载均衡访问网页出现报错HTTP Status 400 – 错误的请求
- Java提取文本文档中的所有网址(小案例介绍正则基础知识)
- Tuple VS ValueTuple
- CCF-CSP 最大的矩形
- Qt学习笔记常用容器
- eclipse php链接mysql_eclipse怎么连接mysql
- Hadoop2.7.3伪分布式集群搭建
- 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
- 【第149期】游戏策划:给@Dimitri的简历分析
- STC单片机代码烧录
- 在一夜暴富之前,我先一夜秃了头
- Oracle数据库之日期查询
- 数字图像处理与Python实现-Scikit-Image-图像滤波(三)
- 信管师培训之第十一节课作业(法律法规+标准规范+职业道德)
- 白鹭引擎(Egret Engine )
- 【应用随机过程】07. 平稳过程
热门文章
- pandas神器操作excel表格大全(数据分析数据预处理)
- 大连理工大学软件学院博客地址
- 民间各类恐怖请仙大法(上)(转帖)
- MySQL赋权报错:’the right syntax to use near ‘identified by ‘password‘ with grant option‘
- 图片转文字工具怎样进行批量识别?
- 网址格式化:截取域名
- IT项目管理课后作业
- 360系统急救箱扫服务器,今晚使用360系统急救箱扫描系统发现问题,之后windows 更新不能启动了...
- AVFrame 与 yuv420那些事
- 基于SpringBoot打造的OA、CMS、ERP通用后台开发框架