wangyifan 发表于 2023-1-29 09:43:59

请教STC32PWM输出问题

本帖最后由 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输出,我要开机时输出低电平,电机调速用,现在开机瞬间输出高电平然后才正常,这样电机会转动一会才停下。

神农鼎 发表于 2023-1-29 13:20:51

我要开机时输出低电平,电机调速用
======加100K 下拉电阻

在开机瞬间输出高电平
===是你程序初始化时,逻辑有错
举例:
I/O对外锁存是1,但I/O的工作模式是高阻输入,对外无输出能力,不影响外部状态
===A,你程序只是简单的将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出高/1
===B,你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0

wangyifan 发表于 2023-1-29 13:57:33

神农鼎 发表于 2023-1-29 13:20
我要开机时输出低电平,电机调速用
======加100K 下拉电阻



谢谢!我试一下。

神农鼎 发表于 2023-1-29 14:08:08

在开机瞬间输出高电平
===是你程序初始化时,逻辑有错
举例:
I/O对外锁存是1,但I/O的工作模式是高阻输入,对外无输出能力,不影响外部状态
===A,你程序只是简单的将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出高/1
===B,你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0

wangyifan 发表于 2023-1-29 15:31:31

PWM5和PWM6同样初始化的,PWM5就可以上电为低电平,PWM6要延迟1秒才可以。

神农鼎 发表于 2023-1-29 15:54:27

你程序将对外锁存从1改为0,再将 I/O的工作模式从高阻输入改到准双向口或强推挽,这时对外输出是低/0

梁工 发表于 2023-1-29 15:57:23

上电时PWM输出为高阻,使用外接的电阻确定上电时的电平,要高电平就上拉,要低电平就下拉。阻值一般3K~100K,我常用10K或20K。
初始化好PWM,启动PWM后,再允许PWM输出,设置IO为推挽输出。

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


wangyifan 发表于 2023-1-31 13:40:44

问题找到了,电机驱动板不匹配,PWM输出加了两电阻好了。
页: [1]
查看完整版本: 请教STC32PWM输出问题