资讯专栏INFORMATION COLUMN

身价过亿的贤淑才女对小码农说PWM可以控制时间长短吗

不知名网友 / 886人阅读

摘要:否则可能会导致电平颠倒完美的计数糟糕的线条再来一个测试组我们来实现一个呼吸灯的效果呼吸灯波形为了贤淑妻子,咳咳,贤淑才女,小码农必定让控制时间什么是脉宽调制中间动的线是电流线,电流通断,电流小就暗,电流大就亮。


为了贤淑妻子,咳咳,贤淑才女,小码农必定让PWM控制时间

什么是脉宽调制 PWM

中间动的线是电流线,电流通断,电流小就暗,电流大就亮。实际上准确的说是应该是功率线,因为导通电压不变 电流减少一半 功率自然就是一半

PWM 脉宽调制,实质上就是电路的“导通”和“关断”的时间比改变, 调整电压或者电流的大小。专业术语叫“占空比”。一般来说,导通和关断的速度要求很高。比如我们有些开关电源的工作模式,就是脉宽调制。通过调整变压器的变压时间,来保证输出电流功率足够。实现电压稳定。

PWM影响

开关电路 影响的是电流通断 电压要么是0 要么最大

积分微分 运放电路 输出结果就是影响电压

SPWM 简介

SPWM 是基于 PWM 规则,使输出波形成正弦波。在 PWM 周期固定的情况下,通过调整不同的脉宽,可以输出不同电压,最后看起来就是一个正弦波波形。

用定时器和CPU模拟PWM输出

新建工程

这个自己建

设置一个定时器,定时10us

void Timer0_Init(){//	AUXR &= 0x7f;//	TMOD &= 0xf0;//	TMOD |= 0x01;//	TR0 = 1;//	TH0 = 0xf8;//    TL0 = 0x30;//定时1ms		AUXR &= 0x7F;		//定时器时钟12T模式	TMOD &= 0xF0;		//设置定时器模式	TMOD |= 0x02;		//设置定时器模式	TL0 = 0xEC;		//设置定时初值	TH0 = 0xEC;		//设置定时重载值	TF0 = 0;		//清除TF0标志	TR0 = 1;        //定时器0开始计时		ET0 = 1;}

定时器中断服务函数里面,驱动 P2.1 脚输出 PWM

我们把它占空比设置成百分之40 通过变量来操作

void Timer0_Routine() interrupt 1{//	//重装初值//	TH0 = 0xf8;//    TL0 = 0x30;//定时1ms	static u8 count = 0;//count在[0,255]之间 	if(count<102)		P21 = 1;	else		P21 = 0;	count++;}

使用STC15W系列的硬件PWM功能

1.P2.1口配置IO模式 (强推挽输出)(写法多种看自己) P2M1 &= ~0x02;P2M0 |= 0x02;

2.PWM 寄存器是后来居上的。每次都需要先使能 P_SW2 寄存器才能写值。写入之后再关闭 P_SW2 P_SW2 |= 0x80; P_SW2 &= ~0x80;

3.确定 PWM3 口的初始电平状态。PWMCFG PWMCFG = 0;

4 .设置 PWM3 时钟来源为系统时钟,不分频。PWMCKS PWMCKS = 0;

5.设置 PWM3 周期 1~32767, 为 1023 。 PWMCH(7bit) 、PWMCL(8bit) PWMCH = 0x03; PWMCL = 0xff;

6 .设置 PWM3 输出管脚选择 P2.1 ,关闭 PWM3 的中断申请。(PWM3CR) PWM3CR = 0x00;

7 .最后,启动 PWM 计数模块, PWM3 输出脚为 PWM 信号。(PWMCR) PWMCR &= ~0x82;PWMCR |= 0x82;

void PWM_Init()//PWM初始化{		P2M1 = 0;		P2M0 = 0x02;      //强推挽		P_SW2 |= 0x80;    //允许访问XSFR				PWMCFG = 0;       //配置PWM的输出初始电平为低电平		PWMCKS = 0;       //选择PWM的时钟为Fosc		PWMCH = 0x03;     //设置PWM周期		PWMCL = 0xff;     //设置PWM周期		PWM3CR = 0x00;    //选择PWM3输出到P2.1,不能使能PWM2中断		PWMCR &= ~0x82;   //使能PWM信号输出		PWMCR |= 0x82;    //使能PWM信号输出						P_SW2 &= ~0x80;   //关闭访问XSFR}

8.主函数可以调用修改 PWM 的两次 IO 口的跳变时间 T1 和 T2 。来修改占空比。修改 PWM 的参数之前,必须关闭 PWM 的输出。否则可能会导致 PWM 电平颠倒

//PWM修改驱动void PWM_Modify_Drive(u16 data1,u16 data2){		P_SW2 |= 0x80;         //修改PWM之前需要使能P_SW2		PWMCR &= 0x7f;		   //修改之前必须先关闭PWM使能		PWMCFG = 0;            //配置PWM的输出初始电平为低电平		PWM3T1 = data1;        //设置PWM3第一次反转的PWM计数		PWM3T2 = data2;        //设置PWM3第二次反转的PWM计数		PWMCR |= 0x80;         //修改之后重新允许PWM功能		P_SW2 &= ~0x80;        //写入之后关闭P_SW2}

完美的计数

糟糕的线条

再来一个测试组

我们来实现一个呼吸灯的效果

PWM呼吸灯波形

PWM呼吸灯波形

))

//PWM数据分配void PWM_Allot(){	//设置一个PWM变量	static xdata u16 PWM = 0;	static xdata u8 count = 0;	//呼吸灯是从零到最大,从最大到零,所以来个标志变量	static bit PWM_flag = 0;	count++;	if(count > 250)	{		count = 0;		if(!PWM_flag)		{			PWM++;			if (PWM > 1020) 			{				PWM_flag = 1;								}					}		if(PWM_flag)		{			PWM--;			if(PWM<2)			{				PWM_flag = 0;					}		}		PWM_Modify_Drive(0,PWM);	}}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125322.html

相关文章

  • 身价亿的女总裁对小农说你按键会了

    摘要:行列总共使用个口,可以扫描个按键的开关状态,这就是矩阵键盘的优势。口之间必须串联电阻。 文章目录 小码农为了总裁,咳咳,为了知识敢说按键不会吗?==**帝都富豪与...

    Doyle 评论0 收藏0
  • 身价亿的女王对小农说中断会了

    摘要:复位后初值是子函数调用,中断响应过程调用子函数处理中断响应的时候,程序计数器的值以及相关数据会先压入堆栈,然后去处理子函数中断服务。联动文章身家过亿的帝都富豪对小码农说你时空复杂度会了吗 ...

    Leck1e 评论0 收藏0
  • 身价亿的温柔萝莉对小农说ADC会采集

    摘要:对于电压或者电流连续变化的信号,就需要通过模数转换电路,变成单片机可以识别的数字电平信号。目前来说,常见的有两种方式,一种是并行比较,一种是逐次比较。具有成本低元件简单等优势,而且容易做出高精度的转换器,所以被广泛使用。 ...

    gnehc 评论0 收藏0
  • 身价亿的妖媚子对小农说串口能传送我的爱

    摘要:目前,所有型号串口的输入是输出是。串口全双工通信是没有时钟脉冲的,只能依靠晶振脉冲定时器的溢出脉冲。中断中读取,清标志,然后返回给计算机,等待发送完毕防重叠最少时间次位定时器时间。实现烧录程序的目的。 ...

    iOS122 评论0 收藏0
  • 回怼文章《为什么甲骨文被裁员工不值得同情》

    摘要:前言今天下班突然看到一篇刷屏朋友圈的文章为什么甲骨文被裁员工不值得同情来自一个财经的微信公众号刚看题目我以为文章是会分析甲骨文公司内部的财经类问题所以就戳开看了毕竟本人不喜欢看打鸡血的文章。 为工薪层能合理取得报酬而发声,为大众选择不同生活状态都能获得尊重而发声,为不同职场层次的职场人都能有健康的工作环境而发声。 前言 今天下班突然看到一篇刷屏朋友圈的文章来自一个XX财经的微信公众号,...

    _ivan 评论0 收藏0

发表评论

0条评论

不知名网友

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<