找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1399|回复: 6
收起左侧

怎么用定时器做相差180 PWM

[复制链接]
ID:734017 发表于 2024-8-18 16:02 | 显示全部楼层 |阅读模式
195905pe049b49084o0mbu.png
0-1000
通道1:小于5输出高.否则输出低  ?
通道2:=1000/2+5?
回复

使用道具 举报

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  的值,可以输出不同长度的脉冲


回复

使用道具 举报

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

使用道具 举报

ID:1034262 发表于 2024-8-20 15:13 | 显示全部楼层
STC8A8K64D4、STC8G2K64S4这些型号非常方便的输出多路带相位差的15位PWM,直接指定输出高低电平的时刻即可。
回复

使用道具 举报

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 单片机教程网

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