找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

怎么用定时器做相差180 PWM

查看数: 1734 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-8-18 16:02

正文摘要:

0-1000 通道1:小于5输出高.否则输出低  ? 通道2:=1000/2+5?

回复

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;


屎山代码,
ID:1034262 发表于 2024-8-20 15:13
STC8A8K64D4、STC8G2K64S4这些型号非常方便的输出多路带相位差的15位PWM,直接指定输出高低电平的时刻即可。
ID:1130718 发表于 2024-8-20 13:31
首先先确定时基,假如是1000,让定时器执行累加操作,当寄存器内的数据达到了500的时候,让电平进行反转,这样就会输出一个占空比为50
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:344848 发表于 2024-8-19 21:44
目前使用ARM核的32位单片机的高级定时器都具备互补输出模式,如三星、NXP公司等等。
ID:344848 发表于 2024-8-19 21:40
ST公司有这样MCU,N年前我使用过ST公司STM8S系列单片机开发无刷三相直流电机的控制器,这一系列芯片的高级定时器采用互补输出模式;ARM核STM32系列单片机的高级定时器同样采用互补输出模式,它提供路数比STM8S系列单片机多。可根据实际需要选择。

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

Powered by 单片机教程网

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