单片机小白 发表于 2025-5-18 13:52:47

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

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

神农鼎 发表于 2025-5-18 14:20:51







王昱顺 发表于 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输出。

zhang32568 发表于 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 驱动电机正反转的程序 你可以借鉴一下。

梁工 发表于 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

页: [1]
查看完整版本: 如何设计32G PWM 初始化或者停止后输出是低电平?