找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么用定时器做相差180 PWM

[复制链接]
跳转到指定楼层
楼主

0-1000
通道1:小于5输出高.否则输出低  ?
通道2:=1000/2+5?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:344848 发表于 2024-8-19 21:40 | 只看该作者
ST公司有这样MCU,N年前我使用过ST公司STM8S系列单片机开发无刷三相直流电机的控制器,这一系列芯片的高级定时器采用互补输出模式;ARM核STM32系列单片机的高级定时器同样采用互补输出模式,它提供路数比STM8S系列单片机多。可根据实际需要选择。
回复

使用道具 举报

板凳
ID:344848 发表于 2024-8-19 21:44 | 只看该作者
目前使用ARM核的32位单片机的高级定时器都具备互补输出模式,如三星、NXP公司等等。
回复

使用道具 举报

地板
ID:401564 发表于 2024-8-20 13:12 | 只看该作者
你这只是相位差,并不是互补,可以试一下这个方案:
定义两个全局变量:
u16 flash_crc = 0;
u16 flash_cnt = 1000;

在定时器中断中加入flash_crc = (flash_crc + 1) % flash_cnt;
在主函数中或者定时器中断中检测,并输出电平
        if(flash_crc >= (flash_cnt/ 2))
        {
                高电平;
        }       
        else
        {
                低电平;
        }


这个是产生50%占空比的
根据 flash_crc  的值,可以输出不同长度的脉冲


回复

使用道具 举报

5#
ID:1130718 发表于 2024-8-20 13:31 | 只看该作者
首先先确定时基,假如是1000,让定时器执行累加操作,当寄存器内的数据达到了500的时候,让电平进行反转,这样就会输出一个占空比为50
回复

使用道具 举报

6#
ID:1034262 发表于 2024-8-20 15:13 | 只看该作者
STC8A8K64D4、STC8G2K64S4这些型号非常方便的输出多路带相位差的15位PWM,直接指定输出高低电平的时刻即可。
回复

使用道具 举报

7#
ID:734017 发表于 2024-8-21 00:41 | 只看该作者
Y_G_G 发表于 2024-8-20 13:12
你这只是相位差,并不是互补,可以试一下这个方案:
定义两个全局变量:
u16 flash_crc = 0;

u16 flash_crc = 0;
u16 flash_cnt = 1000;
void TM0_Isr() interrupt 1

   flash_crc = (flash_crc + 1) % flash_cnt;
  if(flash_crc <=5)
        {
                P1=0x01;
        }      
else if (flash_crc >= (flash_cnt/ 2) &&  flash_crc <= (flash_cnt/ 2)+5)
        
        {
                P1=0x02;
        }

else  P1=0x00;


屎山代码,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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