超简单“手把手教你写PWM程序”(基于STC89C52)

编程知识 更新时间:2023-04-07 00:59:58

文章目录

  • 前言
  • 一、学习前需要掌握哪些内容?
    • 1.掌握单片机定时器的使用方法
    • 2.掌握c语言基础
  • 二、开始
    • 1.基操来一下
    • 2.重头戏
            • 以下代码就是具体实现方案
    • 所以我们只要调节Speed 的值就可以调节占空比了
            • Speed的值应该比A小
  • 总结


前言

学习单片机总要接触一些控制,比如电机调速,舵机驱动,步进电机驱动。这是必不可少需要用到一种控制机制———PWM(脉冲宽度调制)


提示:以下是本篇文章正文内容,下面案例可供参考

一、学习前需要掌握哪些内容?

1.掌握单片机定时器的使用方法

2.掌握c语言基础

二、开始

1.基操来一下

代码如下(示例):

#include <reg52.h>

typedef unsigned int u16;
typedef unsigned char u8; //声明变量

sbit PWM = P1^0; //定义PWM输出口

2.重头戏

以下代码就是具体实现方案

代码如下(示例):

u16 A = 0; //定义变量
u16 Speed; 
void Time0Init()	//初始化定时器
{
	TMOD|=0x01;		//配置定时器1
	TH0 = (65536-1000)/256;	//配置1ms定时
	TL0 = (65536-1000)%256;
	TR0 = 1;	
	ET0 = 1;	//打开定时器中断
	EA = 1; 	//打开总中断
		
}
//中断里面就是PWM具体实现的代码
void time()interrupt 1
{
	TH0 = (65536-1000)/256;	//配置1ms定时
	TL0 = (65536-1000)%256;
	A++;	//A开始计数,每1毫秒加一
	if(A > 1000)	//A计数到1000就清零,也就是说每经过1s就是一个
	{				//PWM周期,所以频率是1Hz
		A = 0;
	}
	//该Speed出场了,speed作为比较器跟A比较,通过调Speed来调节占空比
	if(Speed < A)
	{
		PWM = 1;	//当Speed小于A时,PWM引脚输出高电平
	}
	else
	{
		PWM = 0;	//否则就输出0
	}
	if(Speed>999)
	{
		Speed =999;
	}
	
}

所以我们只要调节Speed 的值就可以调节占空比了

Speed的值应该比A小

总结

main函数里面也比较简单

void main()
{
	Time0Init();
	while(1);
}

原理方面就介绍到这了
下篇写个蓝牙调速车的代码

更多推荐

超简单“手把手教你写PWM程序”(基于STC89C52)

本文发布于:2023-04-07 00:59:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/cfa24145d8f267fc1394a69ae635a4de.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:手把手教你   简单   程序   PWM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 51489文章数
  • 14阅读数
  • 0评论数