找回密码
 立即注册
查看: 2617|回复: 7

请教STC32PWM输出问题

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-05-03 08:21:55

7

主题

22

回帖

1071

积分

金牌会员

积分
1071
发表于 2023-1-29 09:43:59 | 显示全部楼层 |阅读模式
本帖最后由 wangyifan 于 2023-1-29 09:50 编辑

//------------------PWM输出P2^0 P2^1------------               
    PWMB_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMB_CCER2 = 0x00;
    PWMB_CCMR1 = 0x68; //通道模式配置
    PWMB_CCMR2 = 0x68;
    PWMB_CCER1 = 0x55; //配置通道输出使能和极性33输出低55输出高
    PWMB_CCER2 = 0x55;

    PWMB_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
    PWMB_ARRL = (u8)PWM_PERIOD;

    PWMB_ENO = 0x00;
    PWMB_ENO |= ENO5P; //使能输出
    PWMB_ENO |= ENO6P; //使能输出

    PWMB_PS = 0x00;    //高级 PWM 通道输出脚选择位
    PWMB_PS |= PWM5_0; //选择 PWM5_0 通道
    PWMB_PS |= PWM6_0; //选择 PWM6_0 通道
    //PWMA_CCR1H=0x00;
                //PWMA_CCR1L=0x00;
    //PWMB_CCR6H = 0x00; //设置占空比时间
    //PWMB_CCR6L = 0x00;                        
               
                PWMB_BKR = 0x80;   //使能主输出
                PWMB_CR1 |= 0x81;  //使能ARR预装载,开始计时

P2.0和P2.1口PWM输出,我要开机时输出低电平,电机调速用,现在开机瞬间输出高电平然后才正常,这样电机会转动一会才停下。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-1-29 13:20:51 | 显示全部楼层
我要开机时输出低电平,电机调速用
======加100K 下拉电阻

在开机瞬间输出高电平
===是你程序初始化时,逻辑有错
举例:
I/O对外锁存是1,但I/O的工作模式是高阻输入,对外无输出能力,不影响外部状态
===A,你程序只是简单的将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出高/1
===B,你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0
  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-05-03 08:21:55

7

主题

22

回帖

1071

积分

金牌会员

积分
1071
发表于 2023-1-29 13:57:33 | 显示全部楼层
神*** 发表于 2023-1-29 13:20
我要开机时输出低电平,电机调速用
======加100K 下拉电阻

谢谢!我试一下。
  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-1-29 14:08:08 | 显示全部楼层
在开机瞬间输出高电平
===是你程序初始化时,逻辑有错
举例:
I/O对外锁存是1,但I/O的工作模式是高阻输入,对外无输出能力,不影响外部状态
===A,你程序只是简单的将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出高/1
===B,你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0
  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-05-03 08:21:55

7

主题

22

回帖

1071

积分

金牌会员

积分
1071
发表于 2023-1-29 15:31:31 | 显示全部楼层
PWM5和PWM6同样初始化的,PWM5就可以上电为低电平,PWM6要延迟1秒才可以。
  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-1-29 15:54:27 | 显示全部楼层
你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-1-29 15:57:23 | 显示全部楼层
上电时PWM输出为高阻,使用外接的电阻确定上电时的电平,要高电平就上拉,要低电平就下拉。阻值一般3K~100K,我常用10K或20K。
初始化好PWM,启动PWM后,再允许PWM输出,设置IO为推挽输出。

楼主“PWM6要延迟1秒才可以”,这个一定是程序问题,仔细检查。也可以直接下载我的例子观察。

1.png

STC32G-高级PWM相关程序.rar

730.68 KB, 下载次数: 130

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2025-05-03 08:21:55

7

主题

22

回帖

1071

积分

金牌会员

积分
1071
发表于 2023-1-31 13:40:44 | 显示全部楼层
问题找到了,电机驱动板不匹配,PWM输出加了两电阻好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-3 15:02 , Processed in 0.131050 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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