利用 51 定时器生成 PWM

1 PWM 简介

PWM(Pulse Width Modulation,脉冲宽度调制)是按一定规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调制方式。

在控制系统中最常用的是矩形波 PWM 信号,在控制时需要调节 PWM 波占空比。如下图所示,占空比是指高电平持续时间在一个周期时间内的百分比。控制电机的转速时,占空比越大,速度越快,如果全为高电平,占空比为 100% 时,速度达到最快。

当用单片机 I/O 输出 PWM 信号时,可采用以下三种方法:

  • 利用软件延时。当高电平延时时间到时,对 I/O 口电平取反变成低电平,再延时;当低电平延时时间到时,对该 I/O 口电平取反;如此循环,就可得到 PWM 信号。
  • 利用定时器。控制方法同上,只是利用单片机的定时器来定时进行高、低电平的翻转,而不用软件延时。
  • 利用单片机自带的 PWM 控制器。

2 定时器的应用

单片机的周期

  • 时钟周期,也成为振荡周期,定义为时钟频率的倒数(单片机外接晶振的倒数,如 12MHz 晶振的时钟周期就是 1/12 us)。它是单片机中最基本、最小的时间单位。在一个时钟周期内,CPU 仅完成一个最基本的动作。
  • 状态周期:时钟周期的 2 倍。
  • 机器周期 TcyT_{cy}Tcy​:单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作。如取指令、存储器读/写等。机器周期由 12 个时钟周期( 6 个状态周期)组成。
  • 指令周期:指 CPU 执行一条指令所需的时间。指令周期一般包含 1 ~ 4 个机器周期。

定时器/计数器本质

定时器/计数器的本质是加 1 计数器(16 位),有高 8 位和低 82 个寄存器组成。TMOD 是定时器/计数器的工作模式寄存器,确定工作方式和功能,TCON 是控制寄存器,控制 T0T1 的启动和停止及设置溢出标志。

1 计数器输入的计数脉冲的来源:

  • 一个由系统的时钟振荡器输出脉冲经 12 分频后送来
  • 一个由 T0T1 引脚输入的外部脉冲源,每来一个脉冲计数器加 1

当加到计数器全为 1 时,在输入一个脉冲就使计数器回零,且计数器的溢出使 TCON 寄存器中 TF0TF11,向 CPU 发出中断请求。如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

定时器定时时间:计数值 NNN × 机器周期 TcyT_{cy}Tcy​。

定时器初值

溢出时计数器的值减去计数初值才是加 1 计数器的计数值。

定时器一旦启动,它便在原来的数值上开始加 1 计数,若在程序开始时,没有设置 TH0TL0,则默认是 0,假设时钟频率为 12MHz12 个时钟周期为一个机器周期,那么此时机器周期就是 1 us,计满 TH0TL0 就需要 216−12^{16} - 1216−1 个数,再来一个脉冲计数器溢出,随即向 CPU 申请中断,因此溢出一次共需 65536us,约 65.5ms

如果想要定时 50 ms,那么就需先给 TH0TL0 装入一个初值,在这个初值的基础上计 5000 个数后,定时器溢出,此时刚好就是 50ms 中断一次。当需要定时 1s 时,我们可以产生 2050ms 的定时器中断后,便认为是 1s

定时器初值计算方法

当用定时器的方式 1 时,设机器周期为 TcyT_{cy}Tcy​,定时器产生一次中断的时间为 ttt,那么需要计数的个数为 N=t/TcyN = t / T_{cy}N=t/Tcy​,装入 THX 和 TLX 中的数分别为:

THX=(65536−N)/256THX = (65536 - N) / 256THX=(65536−N)/256
TLX=(65536−N)%256TLX = (65536 - N) \% 256TLX=(65536−N)%256

3 示例-舵机的驱动

舵机的原理

舵机的控制信号,一般是脉宽调制(PWM)信号,如下图,反映了 PWM 信号和舵机转动角度的关系,可以简单的理解为,通过给舵机通电的时间控制,结合角度传感器的反馈信号检测和控制,实现了舵机的精确角度控制。

舵机的控制信号周期为 20ms 的脉宽调制信号(PWM),其中脉宽从 0.5ms ~ 2.5ms,相应的舵盘位置从 0 ~ 180度,呈线型变化。也就是说,给舵机提供一定的脉宽,输出轴就会保持一定的对应角度,无论外接转矩怎么改变,直到提供另外一个脉冲信号,才会改变输出角度到新的对应的位置上。

舵机内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的脉冲信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

伺服电动机的周期通常为 20ms,希望以 50Hz 的频率产生脉冲。

180 度电机与 360 度电机

360 度舵机与一般舵机的区别是:给一般舵机一个 PWM 信号,舵机会转到一个特定角度,而给 360 度舵机一个 PWM 信号,舵机会以一个特定的速度转动,类似与电机。但与电机不同的是,360 舵机是闭环控制,速度控制稳定。

PWM 信号与 360° 舵机转速的关系:

  • 0.5ms ———— 正向最大转速
  • 1.5ms ———— 速度为 0
  • 2.5ms ———— 反向最大转速

利用 51 单片机驱动舵机

通过上述分析,可以得出 1ms 对应 90°,那么 0.1ms 对应 。由于驱动舵机的控制信号周期为 20ms,可以将 20ms 的周期信号分为 200 份,那么 1 份代表 0.1ms,相对应舵机的转角为 9°。

因此,将定时器中断一次的时间设定为 0.1 ms,即定时时间为 0.1ms。采用定时器 1 工作方式 2(8 位初值自动重载)。

  • 计算定时器初值

    1. 机器周期 Tcy=12×1/(11.0592×106)sT_{cy} = 12 × 1 / (11.0592 × 10^6) sTcy​=12×1/(11.0592×106)s 约等于 1.0851us1.0851 us1.0851us
    2. 定时时间 t=0.1mst = 0.1mst=0.1ms
    3. 计数值 N=t/Tcy=0.1ms/1.0851us=92N = t / T_{cy} = 0.1ms / 1.0851 us = 92N=t/Tcy​=0.1ms/1.0851us=92
    4. 装入 THX 和 TLX 的数为:THX=TLX=256−92=164THX = TLX = 256-92 = 164THX=TLX=256−92=164
  • 代码
void T1_Init(void)
{TMOD &= 0x0F;     //设置定时器模式TMOD |= 0x20;     //设置定时器模式   TH1 = 164;         //设置定时初始值TL1 = 164;            //设置定时重载值TF1 = 0;          //清除TF1标志TR1 = 1;          //定时器1开始计时
}

利用 51 定时器生成 PWM相关推荐

  1. 10.利用STM32定时器的PWM输出功能,直接获取PWM波形。

    本实验向大家展示如何输出占空比固定的PWM波形. 1.工程的建立: 2.主函数代码: 3.pwm_output.c代码: 4.output.h代码: 5.结果: 6.结果显示不出来的请看上几节的文章, ...

  2. 一个定时器生成多路PWM波形的原理和方法成都自动化开发

    在很多工程应用中,需要使用到PWM波(脉宽调制),例如电机调速.温度控制调整功率等.本文讲述怎么利用单片机的一个定时器生成多路PWM波形. 一般的,PWM的周期t1是一个固定值,如1ms,10ms,1 ...

  3. 利用AT89C52定时器输出可调PWM

    利用AT89C52定时器输出可调PWM 知识储备: PWM即是脉宽冲宽度调制,也称脉宽调制,其意义就是通过微处理器的数字输出来对模拟电路进行调制的一种有效技术. 由于单片机只能输出高电平(1),或者低 ...

  4. 【STM32编程】一个定时器生成多路PWM波形的原理和方法

    PWM产生原理 PWM的周期t1是一个固定值,如1ms,10ms,100ms等,在一个周期中包含了高电平t2和低电平t3,它们的关系是t2+t3=t1.改变一个周期中高电平的时间,就能达到速度或者功率 ...

  5. STM32Cube的PWM控制应用篇(二)用两个个定时器生成三个相位差120度的等效正弦波

    STM32Cube的PWM控制基础篇(一)一路PWM设置 STM32Cube的PWM控制基础篇(二)多路占空比不同的PWM STM32Cube的PWM控制基础篇(三)定时器的PWM设置详解 STM32 ...

  6. STM32: 利用高级定时器产生6路互补PWM波形输出在BLDC中H-PWM-L-ON驱动方式下驱动无刷电机

    原文网址:http://jingyan.eeboard.com/article/73847#/prettyPhoto%5Bpp_gal%5D/6/ http://jingyan.eeboard.com ...

  7. Proteus基于51单片机通过PWM脉冲调制控制电机转速_按键与串口控制转速_电机转速可测

    文章目录 原理图 驱动电路 MOTOR-ENCODER详解 串口通信 电机测速原理 PWM 软件部分 成果 临近期末,学校的单片机课程需要做课程设计,主要内容是基于51单片机的可调速电机,具体要求如下 ...

  8. 10. GD32F103C8T6 定时器-测量pwm的占空比和频率

    一. 利用TIM2的输入通道0,通道1测量pwm的占空比和频率 1. 配置gpio void inpit_gpio_config(void) {rcu_periph_clock_enable(RCU_ ...

  9. 利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇“显示贪吃蛇”

    利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇"显示贪吃蛇" 完整的项目链接: https://github.com/linxinloningg/51_chip_ ...

最新文章

  1. 在ESXi主机上关闭无响应的虚拟机
  2. 三阶魔方花样玩法,公式汇总
  3. Cocos2dx坐标转换
  4. python --面向对象
  5. Python笔记:变量的作用域
  6. 查看Eclipse版本号,及各个版本区别
  7. 使用python的turtle绘画滑稽脸
  8. SpringCloud 第十二章 Gateway新一代网关
  9. Android Studio插件整理
  10. 微信公众号授权scope参数错误或没有scope权限
  11. Hacking 基础关
  12. zjhu1016密码锁
  13. Scratch基础(一):安装和了解软件
  14. 【网络】inux流量控制器TC(Traffic Control)
  15. 使用moviepy快速剪辑和拼接视频
  16. Oracle特殊语句
  17. 网传鸿蒙系统测试版pS,鸿蒙系统测试版3.0-鸿蒙系统app测试版3.0安卓v3.0下载-pszxw下载站...
  18. tft账号服务器错误,TFTLCD无法显示的问题
  19. npm start运行成功界面,及网址运行界面
  20. 三、VR视频播放器开发 ---- Android VR视频/Google VR for Android /VR Pano/VR Video

热门文章

  1. 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现
  2. 26个音序的正确写法和占格_别让瞎练毁了健康,26个健身动作正误对比图,让我们正确健身...
  3. php限制小程序访问,PHP投票小程序,防超时,防IP限制
  4. 哪些人不适合去做科研(转)
  5. 计算机视觉 - 知识点总结(面试、笔试)
  6. php nginx exec kill,彻底杀死nginx并重启
  7. 苹果手机怎样用计算机,苹果手机怎么连接电脑,详细教您怎么使用苹果手机连接电脑...
  8. 什么端口可以抓LINUX,linux下抓包工具
  9. 后端时间转js时间,主要用于取倒计时
  10. luogu P1231 教辅的组成