找回密码
 立即注册
查看: 250|回复: 2

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:419
  • 最近打卡:2025-05-02 06:28:49

24

主题

108

回帖

452

积分

中级会员

积分
452
发表于 2024-12-22 12:26:44 | 显示全部楼层 |阅读模式
在研学移植梁工控制无刷电动机代码时,发现梁工初始化设置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:  // AB  PWM1, 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:  // BA  PWM2, 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;
.......

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-12-22 12:36:28 | 显示全部楼层
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-12-22 23:28:04 | 显示全部楼层
PWM1输出PWM,PWM1_L仅仅作为IO使用,不受PWM控制。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:19 , Processed in 0.132991 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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