找回密码
 立即注册
查看: 185|回复: 4

如何设计32G PWM 初始化或者停止后输出是低电平?

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-13 13:13:35

3

主题

13

回帖

525

积分

高级会员

积分
525
发表于 2025-5-18 13:52:47 | 显示全部楼层 |阅读模式
如何设计32G PWM 初始化或者停止后输出是低电平?

回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16635
发表于 2025-5-18 14:20:51 | 显示全部楼层
截图202505181419467772.jpg


截图202505181420144380.jpg

截图202505181420467500.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2390

回帖

6014

积分

版主

积分
6014
发表于 2025-5-18 16:39:33 | 显示全部楼层
初始化的时候,因为上电默认为高阻模式,所以可以先打开内部的下拉电阻,然后设置引脚电平为0后再切换I/O模式,最后再初始化PWM信号
如果对于上电大概100ms的初始化时间可能存在的高电平仍然不能接受,可以使用外部的下拉电阻,这样上电的时候,因为引脚默认为高阻,
所以会受到外部下拉电阻的电平控制。


停止PWM输出可以使用PWMx_ENO对应位设置为0实现,此时电平可以直接使用I/O口控制,例如关闭P20端口的PWM后,
直接使用P20=0即可实现停止输出后为低电平。
想要继续PWM,可以使用PWM_ENO重新打开PWM输出。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:421
  • 最近打卡:2025-06-16 08:17:35

26

主题

117

回帖

894

积分

高级会员

积分
894
发表于 2025-5-18 20:59:00 | 显示全部楼层
                if(X_Rotation_flag==0)  //如果正转命令
                {                               
                    P10 = 1;
                    PWMA_ENO &= 0xfc;        //
                    PWMA_ENO |= 0x02;  //使能P11端口                       
                   }       
                else
                 {
                   P11 = 1;          
                    PWMA_ENO &= 0xfc;        //
                    PWMA_ENO |= 0x01;  //使能P10端口                                                               
                 }
这个是我使用32G128K 驱动电机正反转的程序 你可以借鉴一下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:94
  • 最近打卡:2025-06-16 11:51:06

74

主题

6089

回帖

1万

积分

超级版主

积分
12721
发表于 2025-5-19 09:40:44 | 显示全部楼层
高级PWM连续输出0或1有2种方法(以PWM1P为例):

1、使用PWMx_ENO禁止输出PWM,对应IO成为普通IO,禁止PWM输出后,由这个IO直接输出高或低电平。
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 1;            // P1.0输出高电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms
               
  PWMA_ENO |= 0x01;   // 允许PWM1P输出
  delay_ms(5);        // P1.0输出PWM 5ms
  P10 = 0;            // P1.0输出低电平
  PWMA_ENO &= ~0x01;  // 关闭PWM输出
  delay_ms(5);        // P1.0输出高电平5ms

2、设置PWMx_CCMRn,强制PWM输出有效(高)电平/无效(低)电平。
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x40;  // 强制PWM输出无效(低)电平
  delay_ms(5);                               // PWM输出低电平5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x60;  // PWM正常输出
  delay_ms(5);                               // PWM输出5ms
  PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | 0x50;  //强制PWM输出有效(高)电平
  delay_ms(5);                               // PWM输出高电平5ms

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 13:05 , Processed in 0.236207 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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