垂柳工作室 发表于 2024-12-22 12:26:44

梁工无刷电机控制程序代码下桥设置PWM输出,在换向时直接给高电平,芯片io是否会有问

在研学移植梁工控制无刷电动机代码时,发现梁工初始化设置PWM时,PWMA_CCER1 |= 0x05;OC1正负通道都打开了,换向时PWM1_L = 1;(即PWM1负通道同一引脚);PWM1负通道输出低电平时是否因为设置io为高阻状态,避免了短路?
void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable

        P2M1 &= ~(0x3f),        P2M0 |=(0x3f);
        PWMA_PSCR = 3;                // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR= 24;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR    = 255;        // 自动重装载寄存器,控制PWM周期
        PWMA_CCER1= 0;
        PWMA_CCER2= 0;
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS   = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;

        PWMA_CCMR1= 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR1   = 100;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER1 |= 0x05;                // 开启比较输出, 高电平有效
        PWMA_PS    |= 1;                // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
.......
void StepMotor(void) // 换相序列函数
{
        switch(step)
        {
        case 0:// ABPWM1, PWM2_L=1
                        PWMA_ENO = 0x00;        PWM1_L=0;        PWM3_L=0;
                        Delay_500ns();
                        PWMA_ENO = 0x01;                // 打开A相的高端PWM
                        PWM2_L = 1;                                // 打开B相的低端
                        ADC_CONTR = 0x80+6;        // 选择P1.6作为ADC输入 即C相电压
                        CMPCR1 = 0x8c + 0x10;        //比较器下降沿中断

                        break;
.......
case 3:// BAPWM2, PWM1_L=1
                        PWMA_ENO = 0x04;        PWM2_L=0;        PWM3_L=0;        // 打开B相的高端PWM
                        Delay_500ns();
                        PWM1_L = 1;                                // 打开C相的低端
                        ADC_CONTR = 0x80+10;        // 选择P0.2作为ADC输入 即C相电压
                        CMPCR1 = 0x8c + 0x20;        //比较器上升沿中断

                        break;
.......

DebugLab 发表于 2024-12-22 12:36:28

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=4830&pid=124219

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=4830&pid=124233

梁工 发表于 2024-12-22 23:28:04

PWM1输出PWM,PWM1_L仅仅作为IO使用,不受PWM控制。
页: [1]
查看完整版本: 梁工无刷电机控制程序代码下桥设置PWM输出,在换向时直接给高电平,芯片io是否会有问