历史上的今天
返回首页

历史上的今天

今天是:2025年10月20日(星期一)

正在发生

2022年10月20日 | 【51单片机STC89C52】IO口模拟PWM控制SG90舵机

2022-10-20 来源:csdn

一、PWM

PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通 过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的 时间占据整个信号周期的百分比,例如方波的占空比就是50%.

占空比 : 一个周期内,高电平占据时长的百分比 

STC89C52没有集成PWM功能,可以通过IO口软件模拟,相对硬件PWM来说精准度略差


二、关于舵机控制原理

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。


以180度角度伺服为例,那么对应的控制关系是这样的:

定时器需要定时20ms, 单位为0.5ms,初值0.5ms,cnt++,通过计数cnt=40个的0.5ms即为20ms


三、编程实现

初始化定时器0

void Timer0Init(void) //500微秒@11.0592MHz

{

//AUXR &= 0x7F;

TMOD &= 0xF0; //设置定时器模式16位

TMOD |= 0x01; //设置定时器模式

TL0 = 0x33; //设置定时初始值0.5ms

TH0 = 0xFE; //设置定时初始值

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

ET0 = 1; //打开定时器0中断

EA  = 1; //打开总中断EA

}

定时器0中断服务函数

void Time0Handler() interrupt 1

{

cnt++;  //统计溢出的次数

//重新给初值

TL0 = 0x33;

TH0 = 0xFE;

//控制PWM波

if(cnt < angle){

sg90_con = 1;

}else{

sg90_con = 0;

}

if(cnt == 40){ //当溢出40次,经过了20ms

cnt = 0; 

sg90_con = 1;

}

}


整体代码

#include "reg52.h"

#include "intrins.h"

 

sbit sg90_con = P1^1;

int angle;

int cnt = 0;

 

void Delay2000ms() //@11.0592MHz

{

unsigned char i, j, k;

 

_nop_();

i = 15;

j = 2;

k = 235;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

 

void Delay300ms() //@11.0592MHz

{

unsigned char i, j, k;

 

i = 3;

j = 26;

k = 223;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

 

void Timer0Init(void) //500微秒@11.0592MHz

{

//AUXR &= 0x7F;

TMOD &= 0xF0; //设置定时器模式16位

TMOD |= 0x01; //设置定时器模式

TL0 = 0x33; //设置定时初始值0.5ms

TH0 = 0xFE; //设置定时初始值

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

ET0 = 1; //打开定时器0中断

EA  = 1; //打开总中断EA

}

 

 

void main()

{

Delay300ms();//让硬件稳定一下

Timer0Init(); //初始化定时器

angle = 1;      //初始角度是0度,0.5ms,溢出1就是0.5,高电平

cnt = 0;

sg90_con = 1;//一开始从高电平开始

//每隔两秒切换一次角度

while(1){

angle = 3; //90度 1.5ms高电平

cnt = 0;

Delay2000ms();

angle = 1; //0度

cnt = 0;

Delay2000ms();

}

}

 

void Time0Handler() interrupt 1

{

cnt++;  //统计溢出的次数

//重新给初值

TL0 = 0x33;

TH0 = 0xFE;

//控制PWM波

if(cnt < angle){

sg90_con = 1;

}else{

sg90_con = 0;

}

if(cnt == 40){ //当溢出40次,经过了20ms

cnt = 0; 

sg90_con = 1;

}

}


推荐阅读

史海拾趣

Cypress Industries公司的发展小趣事

Cypress Semiconductor于1982年在美国加州的硅谷成立,这里是全球半导体行业的发源地之一。公司起初专注于高性能IC产品的研发和生产,为数据传输、远程通讯等领域提供解决方案。随着技术的不断发展和市场的扩大,Cypress逐渐将业务拓展至全球,并在多个国家和地区建立了生产基地和设计中心。

Coherent Inc公司的发展小趣事

1966年,Coherent Inc.由一群斯坦福大学的研究人员共同创立,其中包括物理学家James Hobart。初创时期的公司致力于激光技术的研究和开发,逐渐积累起了丰富的技术底蕴。这种对技术的执着追求和不断探索,为公司的后续发展奠定了坚实的基础。

BEI Sensors公司的发展小趣事

近年来,全球经济形势复杂多变,Beckhoff也面临着诸多挑战。然而,公司始终坚持创新驱动的发展战略,不断研发新产品、新技术,以应对市场的不断变化。同时,公司也积极调整业务结构,优化供应链管理,降低运营成本,以应对经济下行的压力。在这样的背景下,Beckhoff依然保持着稳健的发展态势,为电子行业的持续进步做出了重要贡献。

这五个故事从不同角度展示了Beckhoff Automation GmbH公司在电子行业中的发展历程和成就。从创始与早期发展,到基于PC控制技术的创新,再到全球业务拓展和中国市场的发展,以及应对经济挑战与持续创新,Beckhoff始终保持着对技术创新的追求和对市场变化的敏锐洞察。这些故事不仅展现了公司的实力和成就,也体现了其在电子行业中的重要地位和影响。

Abilis Systems公司的发展小趣事

自2001年正式进入中国市场以来,Beckhoff在中国的业务得到了迅速发展。公司先后在北京、上海、广州、成都等地设立了分支机构,并在多个城市设立了办事处。随着中国市场的不断扩大和需求的不断增长,Beckhoff不断推出适应中国市场的新产品和技术,为中国客户提供更加便捷、高效的服务。

Bomar公司的发展小趣事

Bomar公司成立于1963年,最初是一家专注于石英晶体制造的公司。在当时的电子行业,石英晶体作为频率控制元件,对于无线通信和电子设备的稳定运行至关重要。Bomar公司通过不断的研发和技术创新,成功突破了石英晶振在宽频率范围内的高稳定性问题,满足了严格的FCC规范。这一技术突破使得Bomar公司的石英晶振在市场上获得了广泛的认可,并为公司的发展奠定了坚实的基础。

睿赫(crechip)公司的发展小趣事

尽管睿赫公司在电子行业中取得了显著的成就,但公司也面临着诸多挑战。随着技术的不断进步和市场的不断变化,公司需要不断创新和进步,才能保持领先地位。

面对未来,睿赫公司将继续秉承“创新、卓越、诚信、共赢”的企业精神,不断加强技术研发和人才培养,推动公司的持续发展和壮大。同时,公司还将积极关注市场动态和客户需求,不断推出符合市场需求的新产品,为客户提供更加优质的服务和解决方案。

问答坊 | AI 解惑

光学模数转换器的原理及发展

豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板  180元 DSP5402学习开发板II200元 LABTOOL-48UXP &nbs ...…

查看全部问答>

中国IPTV产业标准研讨会现场全景及实录

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 新浪科技讯 2005年11月24日,由中国计算机用户协会多媒体应用专业委员会主办,智达市场策略顾问有限公司承办的中国IPTV产业政策及技术、标准研讨会在北京新世纪饭店召开。在此次会议上,将首次 ...…

查看全部问答>

Windows Embedded为航天圆梦

网络化、信息化的要求随着因特网技术的成熟、带宽的提高日益提高,使得航天时代不仅促进了运载火箭技术,应用卫星技术与深空探测技术的迅猛发展,而且也使因特网发展成了太空网,延伸到了1亿2000万公里的火星,促进了嵌入式技术在航天应用的迅 ...…

查看全部问答>

LED路灯地方标准7月1日起将在广东实施

国内首个LED路灯地方标准将于7月1日开始在广东实施,珠三角LED路灯行业自此将有章可循。 近日,广东省质量技术监督局审核通过了由东莞勤上光电股份有限公司提出并组织起草的《广东省LED路灯地方标准》,并将于7月1日起实施,制定此类标准在广东 ...…

查看全部问答>

【DSP入门都曾问过的几个问题,你问过没有?】

小弟新学DSP,现在想自己画一块DSP的开发板。找了很多参考资料,有几个疑问,我觉得可能初学者都会问的。 问题如下: 1.DSP程序的串口下载方式。 这种方式可以省了买仿真器的一笔很大的花费,这个电路上有什么特别之处么?跟一般的串口通讯电 ...…

查看全部问答>

nand flash盘符的问题

wince 6下在eboot中把flash分成了两个分区,一个给bin镜像: BP_OpenPartition(NEXT_FREE_LOC, ( g_burnSize + sector_size) / sector_size, PART_BINFS, TRUE, PART_CREATE_NEW); 一个分成fat供用户使用: BP_OpenPartition(NEXT_FREE_LOC, USE ...…

查看全部问答>

受益匪浅!

一套史上最牛套件!51+AVR单片机学习开发板!!https://bbs.eeworld.com.cn/thread-180989-1-1.html有什么大家可以跟帖留言哦!我会及时回复大家!!…

查看全部问答>

cycloneIII EP3C5E144C8N 中时钟的问题

时钟CLK[0..3] 和CLK[4..7] 如何连接,如果想通过pll输出一个时钟,那么输出的时钟应该锁定在那个引脚上呢,请各位大侠帮帮忙啊!!!!!!…

查看全部问答>

【活动贴】一起学器件指标第三弹内容讨论

【活动贴】一起学器件指标第三弹内容讨论先简述下活动方式: 1、每周我们发布一个器件类型,并公布部分学习的器件指标。说是部分,主要是因为大家肯定还会补充一些器件指标。2、在每周发布一个器件类型的同时,我们讨论下一周的器件类型,以及该器 ...…

查看全部问答>

【手机工具】FPGA高手必看资料,Xilinx的ISE软件高级设计功能的使用,强烈推荐!!!

          FPGA高手必看资料,Xilinx的ISE软件高级设计功能的使用,节选自经典书籍的经典章节,完全按照中国工程师和中国学生的思维方式,让人知其然,更知其所以然,非常具有针对性,所介绍的功能相 ...…

查看全部问答>