[电机及执行机构驱动] 无刷电机判断霍尔传感器排列

[复制链接]
 楼主| 七颗咖啡豆 发表于 2016-8-23 10:24 | 显示全部楼层 |阅读模式
手动转电机一圈,出来12个霍尔状态。
中断IO双边沿触发
BLDC.BLCD_tab = BLCD_H1<<2|BLCD_H2<<1|BLCD_H3<<0;
5 4 6 2 3 1  5 4 6 2 3 1;
按道理这是120度排列的时序,但为什么有两个。并且按照这个上电,手动很难转动电机。
 楼主| 七颗咖啡豆 发表于 2016-8-23 10:26 | 显示全部楼层
void BLDCtable(u8 aa)
{
        if(aa)
        {
        switch(BLDC.BLCD_tab)
        {
                                case 5://T1   T4 导通 中间+了IR2108逻辑转换  这里面的时序最终是T1 T4导通
                                BLCD_WT2_Set;//                                                                                                                                T2                                                                PB2
                                BLCD_WT4_Reset;//                                                                                                                        T4                                                                PB10
                                BLCD_WT6_Set;//                                                                                                                                T6                                                                PB0
                               
                                TIM_ForcedOC1Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare1(TIM3,BLDC.pwm);//BLDC.pwm     T1    TIM3_CH1    PB4       
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);// InActive输出的是1  和手册相反  Active输出0  硬件光耦逻辑反  新版取消了逻辑反
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);
                               
                                compute_speed();
                                break;
                               
                                case 4:        //T1   T6
                                BLCD_WT2_Set;       
                                BLCD_WT4_Set;
                                BLCD_WT6_Reset;//                       
                               
                               
                                TIM_ForcedOC1Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare1(TIM3,BLDC.pwm);//BLDC.pwm     T1    TIM3_CH1    PB4       
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);


                               
                                compute_speed();
                                break;
                       
                                case 6:                  //T3  T6               
                                BLCD_WT2_Set;
                                BLCD_WT4_Set;
                                BLCD_WT6_Reset;               
                               
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);//
                                TIM_ForcedOC2Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare2(TIM3,BLDC.pwm);//
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);

                                compute_speed();
                                break;
                               
                                case 2://T3 T2
                                BLCD_WT2_Reset;
                                BLCD_WT4_Set;       
                                BLCD_WT6_Set;
                                                                               
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);//
                                TIM_ForcedOC2Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare2(TIM3,BLDC.pwm);//
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);
                                                               
                                compute_speed();                                       
                                break;                                       
                               
                                case 3:        //T5  T2
                                BLCD_WT2_Reset;
                                BLCD_WT4_Set;
                                BLCD_WT6_Set;
                       
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare4(TIM3,BLDC.pwm);       
                               
                                compute_speed();                                       
                                break;
                               
                                case 1:                 //T5  T4                                                       
                                BLCD_WT2_Set;       
                                BLCD_WT4_Reset;//                                       
                                BLCD_WT6_Set;
                                                       
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare4(TIM3,BLDC.pwm);       
               
                                compute_speed();
                                break;
                               
                                default:
//                                        BLCD_WT2_Reset;
//                                        BLCD_WT4_Reset;                                               
//                                        BLCD_WT6_Reset;                                                       

//                                        TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_InActive);
//                                        TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_InActive);
//                                        TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_InActive);
                       
                                break;
                        }//switch       
                }
        else
        {
                switch(BLDC.BLCD_tab)
                {
                                case 5://T3   T2
                                BLCD_WT2_Reset;
                                BLCD_WT4_Set;       
                                BLCD_WT6_Set;
                                                                               
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);//
                                TIM_ForcedOC2Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare2(TIM3,BLDC.pwm);//
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);                       
                                        compute_speed();       
                                break;
                               
                                case 4:        //T5   T2
                                BLCD_WT2_Reset;
                                BLCD_WT4_Set;
                                BLCD_WT6_Set;
                       
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare4(TIM3,BLDC.pwm);                                                       
                                        compute_speed();               
                                break;
                               
                                case 6:                  //T5  T4
                                BLCD_WT2_Set;       
                                BLCD_WT4_Reset;//                                       
                                BLCD_WT6_Set;
                                                       
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare4(TIM3,BLDC.pwm);       
                                       
                                        compute_speed();
                                break;
                               
                                case 2://T1 T4
                                BLCD_WT2_Set;//                                                                                                                                T2                                                                PB2
                                BLCD_WT4_Reset;//                                                                                                                        T4                                                                PB10
                                BLCD_WT6_Set;//                                                                                                                                T6                                                                PB0
                               
                                TIM_ForcedOC1Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare1(TIM3,BLDC.pwm);//BLDC.pwm     T1    TIM3_CH1    PB4       
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);// InActive输出的是1  和手册相反  Active输出0
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);
                                        compute_speed();
                                break;                                       
                               
                                case 3:        //T1  T6
                                BLCD_WT2_Set;       
                                BLCD_WT4_Set;
                                BLCD_WT6_Reset;//                       
                               
                               
                                TIM_ForcedOC1Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare1(TIM3,BLDC.pwm);//BLDC.pwm     T1    TIM3_CH1    PB4       
                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_Active);
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);
               
                                        compute_speed();
                                break;
                               
                                case 1:                 //T3  T6
                                BLCD_WT2_Set;
                                BLCD_WT4_Set;
                                BLCD_WT6_Reset;               
                               
                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_Active);//
                                TIM_ForcedOC2Config(TIM3,TIM_OCMode_PWM1);TIM_SetCompare2(TIM3,BLDC.pwm);//
                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_Active);

                                        compute_speed();
                                break;
                               
                                default:
//                                                BLCD_WT2_Reset;
//                                                BLCD_WT4_Reset;                                               
//                                                BLCD_WT6_Reset;                                                       

//                                                TIM_ForcedOC1Config(TIM3,TIM_ForcedAction_InActive);
//                                                TIM_ForcedOC2Config(TIM3,TIM_ForcedAction_InActive);
//                                                TIM_ForcedOC4Config(TIM3,TIM_ForcedAction_InActive);
                                break;
                        }//switch       
        }
}
 楼主| 七颗咖啡豆 发表于 2016-8-23 10:30 | 显示全部楼层
120度的不是一个机械周期出6个霍尔信号么?
60度的可以是一个机械周期12个霍尔信号,但是60的有000和111两个状态,这里却没有
 楼主| 七颗咖啡豆 发表于 2016-8-23 10:41 | 显示全部楼层
300v    10000r/min的电机
jafeliu 发表于 2016-8-29 11:26 | 显示全部楼层
你这个是2对极(4极)的电机,所以转一个机械周期,会有2个周期的HALL信号。
wr12306 发表于 2016-9-26 09:37 | 显示全部楼层
你好 我最近也碰到类似的问题  就是不太懂电机启动前的霍尔校准这块
董自祝 发表于 2016-9-27 09:40 | 显示全部楼层
就是6个状态啊,你转的那是机械转速了,他安装的时候是按照电角度(120度)来安装的,两者不要混淆了。
 楼主| 七颗咖啡豆 发表于 2016-10-9 14:09 | 显示全部楼层
问题解决,我的时序没有问题,硬件上出了问题。
机械转一圈有2组霍尔信号出来没有问题。不用改时序
 楼主| 七颗咖啡豆 发表于 2016-10-9 14:11 | 显示全部楼层
wr12306 发表于 2016-9-26 09:37
你好 我最近也碰到类似的问题  就是不太懂电机启动前的霍尔校准这块

有霍尔的,开机先直接读取霍尔状态,然后给时序,转起来了就交给中断自动切换时序就行了
wr12306 发表于 2016-10-10 13:46 | 显示全部楼层
七颗咖啡豆 发表于 2016-10-9 14:11
有霍尔的,开机先直接读取霍尔状态,然后给时序,转起来了就交给中断自动切换时序就行了 ...

谢谢楼主的回复,感谢
tianqi911 发表于 2018-3-19 17:07 | 显示全部楼层
大赞。刚好用到。正好看见这篇**。感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

508

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部