C51--小车——PWM调速

2023-12-19 07:44
文章标签 pwm 小车 c51 调速

本文主要是介绍C51--小车——PWM调速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何进行小车PWM调速:

原理:

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

单位时间内,例如20ms,有15ms是全速,5ms是停止,速度就会比15ms是停止,5ms是全速的功率多,速度快。

要用到PWM的舵机控制代码。
设置定时器:

#include "motor.h"
#include "reg52.h"char speed;
char cnt = 0;void Time0Init()
{TMOD = 0x01;		//配置定时器0工作模式位16位时TL0 = 0x33;		  //给初值,定一个0.5msTH0 = 0xFE;									ET0 = 1;				//打开定时器0中断			EA = 1;					//打开总中断EATR0 = 1;		    //开始计时TF0 = 0;
}void Time0Handler() interrupt 1
{cnt++;				//统计爆表的次数TL0 = 0x33;		//重新给初值TH0 = 0xFE;if(cnt < speed){		//PWM波形控制go_Forward();		//前进}else{go_Storp();		//停止}if(cnt == 40){ //爆表40次,经过20mscnt = 0;			//重新计算cnt}
}

主函数:


#include "motor.h"
#include "Delay.h"
#include "uart.h"
#include "time.h"extern char speed;void main()
{Time0Init();		//定时器0初始化UartInit();			//串口初始化while(1){speed = 10;		//10份(5ms)全速,30份停止。20ms是40份的0.5msDelay1000ms();Delay1000ms();speed = 20;Delay1000ms();Delay1000ms();speed = 40;Delay1000ms();Delay1000ms();}
}

PWM调速实现小车转向:

原理:

左轮定时器0,右轮定时器1;
左转:右轮速度大于左轮
右转:左轮速度大于右轮

重新封装函数:

//左前进
void go_ForwardLeft()
{LeftCon1A = 0;LeftCon1B = 1;
}//左停止
void go_StopLeft()
{LeftCon1A = 0;LeftCon1B = 0;
}//右前进
void go_ForwardRight()
{RightCon1A = 0;RightCon1B = 1;
}//右停止
void go_StopRight()
{RightCon1A = 0;RightCon1B = 0;
}

定时器0和1 :

#include "motor.h"
#include "reg52.h"char speedLeft;
char cntLeft = 0;char speedRight;
char cntRight = 0;//定时器0
void Time0Init()
{TMOD = 0x01;		//配置定时器0工作模式位16位时TL0 = 0x33;		  //给初值,定一个0.5msTH0 = 0xFE;									ET0 = 1;				//打开定时器0中断			EA = 1;					//打开总中断EATR0 = 1;		    //开始计时TF0 = 0;
}//定时器1
void Time1Init()
{TMOD &= 0x0F;		//配置定时器1工作模式位16位时TMOD |= 0x1 << 4;TL1 = 0x33;		  //给初值,定一个0.5msTH1 = 0xFE;									ET1 = 1;				//打开定时器1中断			EA = 1;					//打开总中断EATR1 = 1;		    //开始计时TF1 = 0;
}//定时器0的中断
void Time0Handler() interrupt 1
{cntLeft++;				//统计爆表的次数TL0 = 0x33;		//重新给初值TH0 = 0xFE;if(cntLeft < speedLeft){		//PWM波形控制go_ForwardLeft();		//左前进}else{go_StopLeft();		//左停止}if(cntLeft == 40){ //爆表40次,经过20mscntLeft = 0;			//重新计算cnt}
}//定时器1的中断
void Time1Handler() interrupt 3
{cntRight++;				//统计爆表的次数TL1 = 0x33;				//重新给初值TH1 = 0xFE;if(cntRight < speedRight){		//PWM波形控制go_ForwardRight();		//右前进}else{go_StopRight();		//右停止}if(cntRight == 40){ //爆表40次,经过20mscntRight = 0;			//重新计算cnt}
}

主函数:


#include "motor.h"
#include "Delay.h"
#include "uart.h"
#include "time.h"extern char speedLeft;
extern char speedRight;void main()
{Time0Init();		//定时器0初始化Time1Init();		//定时器1初始化UartInit();			//串口初始化while(1){speedLeft = 10;		//10份(5ms)全速,30份停止。20ms是40份的0.5msspeedRight = 40;Delay1000ms();Delay1000ms();speedLeft = 40;speedRight = 10;Delay1000ms();Delay1000ms();}
}

这篇关于C51--小车——PWM调速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511412

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

基于微信小程序与嵌入式系统的智能小车开发(详细流程)

一、项目概述 本项目旨在开发一款智能小车,结合微信小程序与嵌入式系统,提供实时图像处理与控制功能。用户可以通过微信小程序远程操控小车,并实时接收摄像头采集的图像。该项目解决了传统遥控小车在图像反馈和控制延迟方面的问题,提升了小车的智能化水平,适用于教育、科研和娱乐等多个领域。 二、系统架构 1. 系统架构设计 本项目的系统架构主要分为以下几个部分: 微信小程序:负责用户界面、控制指令的

STM32CubeMX 3 解锁PWM模块

今天在底层高手的指导下又学习了PWM模块的配置!汪! 首先打开上次配置好的文件,如下: 然后,我们要用TIM1来进行PWM 的设置: 然后,clock configuration 不用动 然后 双击自动弹出以下,窗口:

STM32F103调试DMA+PWM 实现占空比逐渐增加的软启效果

实现效果:DMA+PWM 实现PWM输出时,从低电平到输出占空比逐渐增加再到保持高电平的效果,达到控制 MOS 功率开关软启的效果。 1.配置时钟 2.TIM 的 PWM 功能配置 选择、配置 TIM 注意:选择 TIM 支持 DMA 控制输出 PWM 功能的通道,有的TIM通道支持PWM 但不支持PWM注意选择。 PWM参数设置 Counter Period :

基于51单片机的智能小车转向控制系统设计与实现

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器               蜂鸣器是一种简单的声响发生器,常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音,一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1)结构原理 有源蜂鸣器内部自带振荡源,只需接通电源即可发声。内部电路会自动产生一定频率的振荡信号,从而驱动蜂鸣器发声。

C语言《智能自平衡小车,实现平衡功能的基础上,加入了超声波避障、超声波跟随、蓝牙遥控等功能》+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 C语言《智能自平衡小车,实现平衡功能的基础上,加入了超声波避障、超声波跟随、蓝牙遥控等功能》+源代码+文档说明 项目功能 为了实现小车功能,小车硬件主要包括: 控制核心板带编码器的直流电机车架12V 1900mah锂电池 项目备注 1、该资源内项目代码都经过

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)具体项目报告

题目:自动行驶小车(H题) 摘要 本项目由微处理器MSPM0G3507,编码器电机驱动,8路灰度传感器指示线巡线单元,MPU6050六轴传感器无线直行单元,OLED显示人机互动单元,红色LED及蜂鸣器声光提示单元构成。系统运行由两部分组成:自动行驶小车的无指示线直行控制部分和有指示线弯道行驶的实时转向控制部分,小车的无指示线直行控制部分,由MPU6050六轴传感器获得小车姿态的偏航角,通过获得

stm32和c51那个更适合实现环境监测设计

STM32和C51都是单片机的系列产品,适用于各种嵌入式系统设计。在选择适合环境监测设计的单片机时,需要考虑以下几个因素: 处理能力:STM32系列单片机具有较强的处理能力,适合处理复杂的计算和算法。C51系列单片机处理能力较弱,适用于简单的控制任务。 存储容量:STM32单片机内置的闪存和RAM容量较大,可以存储更多的程序和数据。C51单片机的存储容量较小,适合小型项目。 外设接口:ST

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)

一.前言         前段时间,激烈的电赛刚刚结束,很荣幸啊,也是十分的不甘心,本次的湖北赛区H题只拿到了一个省二,看最终的排名,在H题中我们离省一也就差几名。但是整个比赛已经过去了,现在不甘与不舍,也没有任何意义了,只有接收这一现实了。         当时我们整个比赛要求一二三都完美完成,要求四能够十分稳定的跑下来但是跑完四圈得花1分30秒,大概是跑十次才死一两次的样子(毕竟比赛,谁也