找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1678|回复: 14
打印 上一主题 下一主题
收起左侧

各位大神们看看这个波形用单片机可以怎么输出?

[复制链接]
跳转到指定楼层
楼主
基础的频率我是用STC15增强型PWM产生的并且可以调节频率     

我尝试过第一种方法    用STC15 PCA产生 100HZ的包络线  然后在将这个波形送到INT0来触发外部中断  当外部中断来的时候  我在中断里面重新改变增强型PWM的频率 从而实现一个I0口输出两种不同的频率
经过反复折腾 么有成功   

我尝试第二种 通过定时器定时  0-3S的时间   然后通过调节时间来触发定时器中断,当中断到了以后在中断里面更改频率  通过这样一来 还是失败了 不可以   


请问大师些还有什么办法可以     通过外围电路合起来也可以     

还有就是  这样的波形  叫什么波形     还是笼统的称为  PWM调制波吗  

下面是波形示例图



有点类似于 花园洒水的喷头  先是低频  过几秒 来一串高频     

谢谢大家了









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2021-9-20 11:35 | 只看该作者
数值控制问题
回复

使用道具 举报

板凳
ID:161164 发表于 2021-9-20 14:10 | 只看该作者
在你之前的贴子里,6楼不是已经给了答案了吗?

1.gif (501.94 KB, 下载次数: 85)

1.gif
回复

使用道具 举报

地板
ID:155507 发表于 2021-9-20 21:19 | 只看该作者
我给你来个程序试试

  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 定时器0,1可编程时钟分频输出举例---------------*/

  4. /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
  5. /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */
  6. /*---------------------------------------------------------------------*/

  7. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  8. //若无特别说明,工作频率一般为11.0592MHz


  9. #include "reg51.h"

  10. typedef unsigned char BYTE;
  11. typedef unsigned int WORD;

  12. #define FOSC 11059200L

  13. //-----------------------------------------------

  14. sfr P0M1 = 0x93;
  15. sfr P0M0 = 0x94;
  16. sfr P1M1 = 0x91;
  17. sfr P1M0 = 0x92;
  18. sfr P2M1 = 0x95;
  19. sfr P2M0 = 0x96;
  20. sfr P3M1 = 0xb1;
  21. sfr P3M0 = 0xb2;
  22. sfr P4M1 = 0xb3;
  23. sfr P4M0 = 0xb4;
  24. sfr P5M1 = 0xC9;
  25. sfr P5M0 = 0xCA;
  26. sfr P6M1 = 0xCB;
  27. sfr P6M0 = 0xCC;
  28. sfr P7M1 = 0xE1;
  29. sfr P7M0 = 0xE2;

  30. sfr AUXR      = 0x8e;               //辅助特殊功能寄存器
  31. sfr INT_CLKO  = 0x8f;               //唤醒和时钟输出功能寄存器

  32. sbit T0CLKO   = P3^5;               //定时器0的时钟输出脚

  33. #define F1KHz (65536-FOSC/2/1000)    //1T模式
  34. //#define F38_4KHz (65536-FOSC/2/12/38400) //12T模式

  35. sbit T1CLKO   = P3^4;               //定时器1的时钟输出脚

  36. #define F300Hz (65536-FOSC/2/300)    //1T模式
  37. //#define F38_4KHz (65536-FOSC/2/12/38400) //12T模式

  38. //-----------------------------------------------

  39. void main()
  40. {
  41.     P0M0 = 0x00;
  42.     P0M1 = 0x00;
  43.     P1M0 = 0x00;
  44.     P1M1 = 0x00;
  45.     P2M0 = 0x00;
  46.     P2M1 = 0x00;
  47.     P3M0 = 0x00;
  48.     P3M1 = 0x00;
  49.     P4M0 = 0x00;
  50.     P4M1 = 0x00;
  51.     P5M0 = 0x00;
  52.     P5M1 = 0x00;
  53.     P6M0 = 0x00;
  54.     P6M1 = 0x00;
  55.     P7M0 = 0x00;
  56.     P7M1 = 0x00;

  57.     AUXR |= 0x80;                   //定时器0为1T模式
  58. //  AUXR &= ~0x80;                  //定时器0为12T模式

  59.     AUXR |= 0x40;                   //定时器1为1T模式
  60. //  AUXR &= ~0x40;                  //定时器1为12T模式

  61.     TMOD = 0x00;                    //设置定时器为模式0(16位自动重装载)
  62.    
  63.     TMOD &= ~0x04;                  //C/T0=0, 对内部时钟进行时钟输出
  64. //  TMOD |= 0x04;                   //C/T0=1, 对T0引脚的外部时钟进行时钟输出

  65.     TL0 = F1KHz;                 //初始化计时值
  66.     TH0 = F1KHz >> 8;
  67.     TR0 = 1;
  68.     INT_CLKO |= 0x01;                //使能定时器0的时钟输出功能

  69.     TMOD = 0x00;                    //设置定时器为模式1(16位自动重装载)
  70.    
  71.     TMOD &= ~0x40;                  //C/T1=0, 对内部时钟进行时钟输出
  72. //  TMOD |= 0x40;                   //C/T1=1, 对T1引脚的外部时钟进行时钟输出

  73.     TL1 = F300Hz;                 //初始化计时值
  74.     TH1 = F300Hz >> 8;
  75.     TR1 = 1;
  76.     INT_CLKO |= 0x02;                //使能定时器1的时钟输出功能


  77.     while (1);                      //程序终止
  78. }

复制代码


回复

使用道具 举报

5#
ID:725110 发表于 2021-9-21 00:56 | 只看该作者
用三个IO口,输出三路PWM波形,然后加与非门,使用第三个PWM波来控制两种波形的工作时间
回复

使用道具 举报

6#
ID:123289 发表于 2021-9-21 22:42 | 只看该作者
1、做个定时中断,时常数从变量XT中取得。
2、中断服务程序,只做一件事,将P1.1求反(设它就是你需要的输出)。
3、将你需要的频率折算成周期,再将周期的一半折算成时常数送入XT时(如1KH,折算成1ms,一半就是0.5Mms,再折算成时常数,你自己折吧),就得到你所需要的频率了。
4、修改XT的值,就可以改变输出的频率。
回复

使用道具 举报

7#
ID:213173 发表于 2021-9-22 07:00 | 只看该作者
使用PCA输出高速脉冲功能,改变CCAP0H,CCAP0L重装值就改变输出频率。你这频率变化像是救护车鸣笛声源。
回复

使用道具 举报

8#
ID:254747 发表于 2021-9-27 09:30 | 只看该作者
非常感谢各位大佬 提供了这么多方案   谢谢   太感谢了    提前祝各位大佬国庆节日快乐 !!!
回复

使用道具 举报

9#
ID:254747 发表于 2021-9-27 09:31 | 只看该作者
wulin 发表于 2021-9-22 07:00
使用PCA输出高速脉冲功能,改变CCAP0H,CCAP0L重装值就改变输出频率。你这频率变化像是救护车鸣笛声源。

嗯嗯   谢谢   我去测试一下
回复

使用道具 举报

10#
ID:254747 发表于 2021-9-27 09:32 | 只看该作者
yzwzfyz 发表于 2021-9-21 22:42
1、做个定时中断,时常数从变量XT中取得。
2、中断服务程序,只做一件事,将P1.1求反(设它就是你需要的输 ...

嗯嗯  这个方法我测试过了   可行    谢谢 大佬
回复

使用道具 举报

11#
ID:254747 发表于 2021-9-27 09:34 | 只看该作者
angmall 发表于 2021-9-20 21:19
我给你来个程序试试

非常感谢你,还给我提供了程序  辛苦啦  
回复

使用道具 举报

12#
ID:254747 发表于 2021-9-27 09:35 | 只看该作者
lkc8210 发表于 2021-9-20 14:10
在你之前的贴子里,6楼不是已经给了答案了吗?

好的  我去查一下   可能是我当时没有看清楚   我在去看看  谢谢哦   
回复

使用道具 举报

13#
ID:254747 发表于 2021-10-13 15:00 | 只看该作者
lkc8210 发表于 2021-9-20 14:10
在你之前的贴子里,6楼不是已经给了答案了吗?

你好你展示的这个波形  是通过单片机发出来的还是 门电路发出来的啊  可以指教一下吗
回复

使用道具 举报

14#
ID:161164 发表于 2021-10-13 16:10 | 只看该作者
不将就123 发表于 2021-10-13 15:00
你好你展示的这个波形  是通过单片机发出来的还是 门电路发出来的啊  可以指教一下吗

单片机啊~
就是那你之前的贴子里,6楼的方案
回复

使用道具 举报

15#
ID:254747 发表于 2021-10-14 09:32 | 只看该作者
lkc8210 发表于 2021-10-13 16:10
单片机啊~
就是那你之前的贴子里,6楼的方案

哦哦 好的  非常感谢   我去研究一下  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表