51智能小车pwm调速

首先pwm调速主要运用的是定时器和中断的知识,此段代码运用的是定时器0,8位自动重装模块

下面了解pwm是如何控制速度的

 调速的本质就是通过定时器控制小车的左右两轮使能;对小车的轮子转的时间和停的时间进行控制专业的名字叫占空比,而脉冲其实就是单片机上晶振发出的

 

此代码运用的频率为100HZ;最大占空比为256,频率为100HZ,f=1/T;周期为0.01秒;周期=定时器溢出时间*占空比;定时器溢出时间=0.0000390625秒约等于39微秒;单片机机器周期为1.085微秒;用溢出时间除以单片机周期得到定时器加多少次溢出,得到满足溢出时间36微秒

#include <REGX52.H>
#include <QXA51.H>

unsigned char pwm_left_val=210;
unsigned char pwm_right_val=210;
unsigned char pwm_t;

/*小车前进*/
void forward()
{
		left_motor_go;//左电机前进
	  right_motor_go;//右电机前进
}

//定时器中断
void timer0() interrupt 1
{
		pwm_t++;
		if(pwm_t==255)
				pwm_t=EN1=EN2=0;
		if(pwm_left_val==pwm_t)
				EN1=1;
		if(pwm_right_val==pwm_t)
				EN2=1;
}
void main()
{
		TMOD|=0x02;//八位重装模块
		TH0=220;
	  TL0=220;//11.0592M晶振下最大比值是256,输出100HZ
	  TR0=1;//启动定时器0
	  ET0=1;//允许定时器0中断
	  EA=1;//总中断允许
	  while(1)
		{
				forward();//前进
		}
}

 THO=220是怎么来的呢;执行36次满足脉冲占空比,最大值为256;所以初值为220;八位重装模式下TLO也为220

TMOD为什么为0x02呢因为定时器0要后两位为10

然后就是启动定时器启动定时器中断

接下来就是一些宏定义和单片机引脚的位定义

 

 

#ifndef __QXA51_H__
#define __QXA51_H__

/*电机驱动IO定义*/
sbit IN1=P1^2; //为1 左电机反转
sbit IN2=P1^3; //为1 左电机正转
sbit IN3=P1^6; //为1 右电机正转
sbit IN4=P1^7; //为1 右电机反转
sbit EN1=P1^4; //为1 左电机使能
sbit EN2=P1^5; //为1 右电机使能

#define left_motor_en		    EN1=1 //左电机使能
#define left_motor_stops		EN1=0 //左电机停止
#define right_motor_en		  EN2=1 //右电机使能
#define right_motor_stops		EN2=0 //右电机停止

#define left_motor_go		    IN1=0,IN2=1 //左电机正转
#define left_motor_back		  IN1=1,IN2=0 //左电机反转
#define right_motor_go		  IN3=1,IN4=0 //右电机正转
#define right_motor_back		IN3=0,IN4=1 //右电机反转

#endif

接线时要分别将单片机的P1^2-P1^7和PCB板上的P1^2-P1^7连接,vcc,gnd连接

版权声明:本文为CSDN博主「超561」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_61134394/article/details/120618872

生成海报
点赞 0

超561

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

ESP8266 无限重启踩坑

最近做了一个电子墨水屏万年历,在移植屏幕代码时遇到了esp8266无限软复位的问题,如果你的串口打印是以下图片所示,那么恭喜你问题解决了。 造成软复位的原因是因为,程序里有死循环&#xf

Keil MDK5 STM32F103C8T6开发环境配置

Windows下使用Keil MDK5进行stm32f103c8t6的开发和编译, 配合ST-LINK工具进行烧录, 使用原生(非HAL)的方式. 所需硬件 stm32f103系列开发板 stm32f103c8t6核心板 参数 ARM 32-b

基于STM32的室内环境监测系统

设计简介: 本设计是基于单片机的室内环境监测器,主要实现以下功能: 可实现LCD1602显示环境数据实时监测一氧化碳、甲烷、烟雾值空气质量大于各自限值报警,并通过TTS报警 标签&#x

STM32G4之NVIC中断系统

前言 一、NVIC中断机制 stm32G431总共有111个中断源,所以有时难免有两个或者两个以上的中断一起来临,或者正在处理一个中断服务函数时突然又有一个中断来临,以上种种情况微控制器要怎样运行呢&