————————————————————————————————————————————

PWM(脉冲宽度调制)

  • 对模拟信号电平进行数字编码的方法

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设计要求:

  • 由于AT89系列单片机没有PWM控制器,所以通过定时器产生PWM
  • 通过按钮控制P2.0输出高低电平的时间,占空比可调范围:0~100%,每次按下按钮以10%步进,通过示波器看到对应波形。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

电路功能:

第一个放大器的作用是反相,将P2.0口输出的电压反相,得到一个绝对值相等的负电压。R1和R2阻止相同,不放大。

第二个放大器的作用是放大电压,并再次反相。放大倍数是R4:R5=1000:100=10倍。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实验现象:

  • 首次按下按钮时,n=0,占空比0%,P2.0低电平10ms,高电平0ms,电机不转。
  • 第二次按下按钮,n=1,占空比10%,P2.0低电平9ms,高电平1ms,电机转1ms停9ms。
  • 第三次按下按钮,n=2,占空比20%,P2.0低电平8ms,高电平2ms,电机转2ms停8ms。
  • ...
  • 十次循环过后n=0,重新开始

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

元件清单:

  • BUTTON
  • AT89C51
  • MOTOR
  • RES,p.s.严格对应图中阻止
  • OPAMP
  • COUNTER TIMER,p.s.COUNTER TIMER(频率计)设置OperatingMode项为frequency
  • Digital Oscilloscope

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

实现代码:

 #include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit PWM = P2 ^ ;
uchar n = ;
void Delay(uchar m)
{
uchar a, b, c;
while(m--)
for (c = ; c > ; --c)
for (b = ; b > ; --b)
for (a = ; a > ; --a);
}
void PWMout(uchar n)
{
PWM = ; //先置PWM信号为低电平,此时可以看到在波形图上出现波峰
Delay( - n); //延时10-n(ms)
PWM = ; //置PWM信号为高电平,此时波形图出现波谷
Delay(n); //延时n(ms)
}
int main()
{
EA = ; //通过按钮中断来修改n的值
EX0 = ;
IT0 = ;
while()
{
PWMout(n); //脉冲输出子程序
}
}
void Int0()interrupt
{
if (n == ) //n在0-10中循环
n = ;
else ++n;
}

51单片机 | 模拟PWM调制控制实验的更多相关文章

  1. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...

  2. 使用引脚模拟PWM波控制引脚

    /********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...

  3. 进阶之路(基础篇) - 005 模拟PWM波控制引脚

    /********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...

  4. [51单片机] 以PWM控制直流电机为例建一个简单的51工程框架

    目录 1)功能概述 2)引脚连接 3)框架介绍 4)模块说明 5)复用规则 6)工程链接 1)功能概述 名称:独立按键控制直流电机调速 内容:对应的电机接口需用杜邦线连接到uln2003电机控制端; ...

  5. 51单片机模拟I2C总线的C语言实现

    电路原理图   EEPROM为ATMEL公司的AT24C01A.单片机为ATMEL公司的AT89C51. 软件说明 C语言为Franklin C V3.2.将源程序另存为testi2c.c,用命令 C ...

  6. 51单片机ALE引脚的控制(摘录)

    ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节. 在FLASH编程期间,此引脚用于输入编程脉冲. 在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频 ...

  7. 单片机PWM调制技术

    我们可以看看下图,下图就是一个典型的PWM的波形图. T是一个周期,T1就是高电平所占用的时间,T2就是低电平所占用的时间. 如上图所示T1为脉冲宽度(就是导通时间),周期为T,则输出电压的平均值为U ...

  8. 51单片机-独立按键控制led矩阵的左移和右移

    51单片机学习 独立按键 控制led灯光矩阵的左移和右移 开发板采用的是普中的A2学习开发板,具体的代码如下: typedef unsigned int u16; void delay(u16 tim ...

  9. 51单片机引脚ALE/PROG/PSEN/EA/Vpp

    51单片机的4个控制引脚,其中一个引脚是复位引脚(RST/Vpd),RST是复位引脚,当RST输入端保持2个机器周期以上高电平时,就实现复位. ALE/PROG是地址锁存允许信号输出端,在读写外部存储 ...

随机推荐

  1. 小Z爱划水(NOIP信(sang)心(bin)赛)From FallDream

    题目: 小Z在机房.他和其它机房同学都面临一个艰难的抉择,那就是 要不要划水? 每个人都有自己的一个意见,有的人想做题,有的人想划水. 当然,每个人只能选择一个事情做.如果一个人做的事情和他想做的不同 ...

  2. git代码仓库迁移(从github到oschina)【转】

    转自:http://blog.csdn.net/a5244491/article/details/44807937 版权声明:本文为博主原创文章,未经博主允许不得转载. 因为一些特殊原因,需要将公司原 ...

  3. C程序编译过程浅析【转】

    转自:http://blog.csdn.net/koudaidai/article/details/8092647 前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接” ...

  4. C++ 采集音频流(PCM裸流)实现录音功能

    与上一篇的“C++ 播放音频流(PCM裸流)” 点击打开链接 相对应,本篇是关于用C++实现录音功能的.同样是直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用,也可以下载本人上传的相关 ...

  5. $.getJSON无法对外部变量进行赋值的问题

    如下,即可将d中的值赋给外部变量 //把ajax的异步设置成同步,防止$.getJSON无法对外部变量进行赋值,必须在$.getJson前面 $.ajaxSetup({async:false}); $ ...

  6. FileInputStream读取文件&FileOutputStream写入文件

    概念摘自:http://jingyan.baidu.com/article/5552ef473ab5f2518ffbc98e.html Java的流式输入输出建立在4个抽象类的基础上:InputStr ...

  7. Selenium2+python自动化10-登录案例【转载】

    前言 前面几篇都是讲一些基础的定位方法,没具体的案例,小伙伴看起来比较枯燥,有不少小伙伴给小编提建议以后多出一些具体的案例.本篇就是拿部落论坛作为测试项目,写一个简单的登录测试脚本. 在写登录脚本的时 ...

  8. cloudflare 301 重定向设置

    https://support.cloudflare.com/hc/en-us/articles/218411427#redirects 将 https://dfg.com/* 设置301重定向到 h ...

  9. Educational Codeforces Round 32

    http://codeforces.com/contest/888 A Local Extrema[水] [题意]:计算极值点个数 [分析]:除了第一个最后一个外,遇到极值点ans++,包括极大和极小 ...

  10. 求int最大值以及int二进制

    求int最大值:(((unsigned int)(~0))>>1) 求int的2进制串 string str = ""; int iNum = 100; for(int ...