找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何用单片机产生一个方波

  [复制链接]
跳转到指定楼层
楼主
             请问各位大佬,如何用单片机产生一个100KHZ的方波,占空比50%
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:189881 发表于 2017-7-17 21:38 | 只看该作者
最好是32单片机
回复

使用道具 举报

板凳
ID:146878 发表于 2017-7-18 09:29 | 只看该作者
定时5ms,端口反转一次
回复

使用道具 举报

地板
ID:219856 发表于 2017-7-18 13:48 | 只看该作者
用cubemx软件先设置GPIO口,然后再在特定的区域使用HAL库里的翻转函数Trogger就好拉~
回复

使用道具 举报

5#
ID:219467 发表于 2017-7-18 14:29 | 只看该作者
快速pwm?
回复

使用道具 举报

6#
ID:220552 发表于 2017-7-18 14:57 | 只看该作者
PWM输出,根据例程稍作改动就好了
回复

使用道具 举报

7#
ID:220574 发表于 2017-7-18 15:54 | 只看该作者
定时25ms,交替输出高低电平,最好用STM32
回复

使用道具 举报

8#
ID:123289 发表于 2017-7-19 06:56 | 只看该作者
劝楼主改学CEO专业。
回复

使用道具 举报

9#
ID:220714 发表于 2017-7-19 09:50 | 只看该作者
单片机脚位交替输出0 1就是方波 这个也不会的话就别学单片机了
回复

使用道具 举报

10#
ID:220771 发表于 2017-7-19 11:53 | 只看该作者
定时25ms,交替输出高低电平,
回复

使用道具 举报

11#
ID:47286 发表于 2017-7-19 12:31 | 只看该作者
楼上前辈们 为什么是25ms啊 100KHz/s是1000ms里100000个 一高一低是一个 那不应该是5ns翻转一次吗

谁教我一下啊
回复

使用道具 举报

12#
ID:220946 发表于 2017-7-20 14:09 | 只看该作者
pwm, 这个不难吧
回复

使用道具 举报

13#
ID:221127 发表于 2017-7-20 16:53 | 只看该作者
使用K60单片机的一个FTM模块,频率和占空比都可以设置啦
回复

使用道具 举报

14#
ID:160725 发表于 2017-7-20 17:02 | 只看该作者
很有用的资料,感谢
回复

使用道具 举报

15#
ID:221132 发表于 2017-7-20 17:05 | 只看该作者
PWM脉冲宽度调节
回复

使用道具 举报

16#
ID:221135 发表于 2017-7-20 17:16 | 只看该作者
可以用PWM波调速
回复

使用道具 举报

17#
ID:221145 发表于 2017-7-20 17:54 | 只看该作者
单片机IO以一定时间间隔输出高低电平。
回复

使用道具 举报

18#
ID:213173 发表于 2017-7-20 19:03 | 只看该作者
dzbj 发表于 2017-7-19 12:31
楼上前辈们 为什么是25ms啊 100KHz/s是1000ms里100000个 一高一低是一个 那不应该是5ns翻转一次吗

谁教 ...

你说的5ns翻转一次是对的,说25ms朋友没有走心。
回复

使用道具 举报

19#
ID:221165 发表于 2017-7-20 19:36 | 只看该作者
设置PWM输出,或者简单反转高低电平
回复

使用道具 举报

20#
ID:61582 发表于 2017-7-20 20:26 | 只看该作者
这个方式非常多,建议你现在先学习定时器中断,可以使用定时器中断的方式进行pwm输出,也可以使用定时器的查询方式进行pwm输出,上述是常规的方法,你最好查询你手上有的单片机的手册,有些单片机也许会自带脉冲串输出功能,只需要对几个寄存器进行设置即可进行脉冲的输出。
回复

使用道具 举报

21#
ID:221305 发表于 2017-7-21 11:51 | 只看该作者
用PWM控制输出方波
回复

使用道具 举报

22#
ID:221349 发表于 2017-7-21 14:30 | 只看该作者
pwm输出
回复

使用道具 举报

23#
ID:221379 发表于 2017-7-21 15:31 | 只看该作者
用stm32 pwm 想输出多少就多少
回复

使用道具 举报

24#
ID:221405 发表于 2017-7-21 16:31 | 只看该作者
正电平
回复

使用道具 举报

25#
ID:220355 发表于 2017-7-21 21:24 | 只看该作者
简单一点的就用51单片机的定时器做,启动定时器0中断,在中断中启动定时器1,定时器0定时产生高电平的时间,定时器1定时产生低电平的时间就行了
回复

使用道具 举报

26#
ID:221483 发表于 2017-7-21 23:04 | 只看该作者
历害了,学习下
回复

使用道具 举报

27#
ID:221484 发表于 2017-7-21 23:08 | 只看该作者
pwm输出
回复

使用道具 举报

28#
ID:221486 发表于 2017-7-21 23:16 | 只看该作者
用stm32的通用定时器设置,32做的话比较方便
回复

使用道具 举报

29#
ID:221499 发表于 2017-7-22 00:38 | 只看该作者
就是PWM吧,网上搜 例程很多的
回复

使用道具 举报

30#
ID:221001 发表于 2017-7-22 01:38 | 只看该作者
用PCF8591T实现DA功能    能产生方波 正弦波 三角波 锯齿波
回复

使用道具 举报

31#
ID:219625 发表于 2017-7-22 05:13 | 只看该作者
用STM32的定时器中断或者硬件PWM输出实现。
回复

使用道具 举报

32#
ID:221507 发表于 2017-7-22 08:36 | 只看该作者
PWM脉冲宽度调节
回复

使用道具 举报

33#
ID:221571 发表于 2017-7-22 12:31 | 只看该作者
采用定时器交替输出高低电平即可
回复

使用道具 举报

34#
ID:189104 发表于 2017-7-22 15:09 | 只看该作者

 定时一定时间,端口反转一次
回复

使用道具 举报

35#
ID:221606 发表于 2017-7-22 15:32 | 只看该作者
用pwn,很简单的
回复

使用道具 举报

36#
ID:221605 发表于 2017-7-22 15:36 | 只看该作者
利用定时器PWM输出 功能  PWM占空比可设置为50%
回复

使用道具 举报

37#
ID:221628 发表于 2017-7-22 16:49 | 只看该作者
你用什么单片机,产生周期方波的方法很多,基本都要用到定时器,比如51可以用定时器中断的方法(或查询),在中断服务函数内把某个端口取反。另外如果你用stm32的话,stm32的定时器本身就可以设置产生PWM波
回复

使用道具 举报

38#
ID:111634 发表于 2017-7-22 17:54 | 只看该作者
本帖最后由 zl2168 于 2017-7-22 21:46 编辑

实例69  输出周期脉冲方波(示波器显示)
Proteus仿真一下,确认有效。
实例69 输出周期脉冲方波.rar (34.2 KB, 下载次数: 30)
实例70 输出矩形脉冲波.rar (34.07 KB, 下载次数: 13)

以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

39#
ID:221618 发表于 2017-7-22 19:28 | 只看该作者
用定时器或者PWM
回复

使用道具 举报

40#
ID:219197 发表于 2017-7-22 22:22 | 只看该作者
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uint num,t;
sbit led1=P1^0;
//void yanshi(uint xms)
//{
//        uint i,j;
//        for(i=xms;i>0;i--)
//                for(j=110;j>0;j--);
//}
void chuzhi()
{
        TMOD=0x01;//éèÖö¨ê±Æ÷0Îa1¤×÷·½ê½1
        TH0=(65536-45872)/256;//45872=ËùÇóμ¥λ걼ä50ms/(12/11.0592MHZ),11.0592MHZÎa¾§ÕñμÄÕeμ′ÖüÆú
        TL0=(65536-45872)%256;
        EA=1;//′ò¿a×üÖD¶Ï
        TR0=1;//′ò¿a¶¨ê±0
        ET0=1;//ÔêDí¶¨ê±Æ÷0ÖD¶Ï
}
void T0_0() interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;//ÖØ×°3õÖμ
        num++;//ÿ1y50msTH0òçÂúò»′Î,num×Ô¼óò»′Î
        t=10;
        if(num==t){led1=~led1;}//μ±num=tμÄê±oòè¡·′ò»′Î
  if(num==20){num=0;led1=~led1;}//20¸ö50ms′ú±í×Å1sò2¾íêÇ1sÎaÖüÆúÿμ½ò»¸öÖüÆúled1óÖè¡·′ò»′Π ¾íDÎ3éáËò»¸ö2¨
}
void main()
{
        chuzhi();
        while(1);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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