打印
[电机及执行机构驱动]

无刷电机判断霍尔传感器排列

[复制链接]
2356|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
七颗咖啡豆|  楼主 | 2016-8-23 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
七颗咖啡豆|  楼主 | 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的电机

使用特权

评论回复
5
jafeliu| | 2016-8-29 11:26 | 只看该作者
你这个是2对极(4极)的电机,所以转一个机械周期,会有2个周期的HALL信号。

使用特权

评论回复
6
wr12306| | 2016-9-26 09:37 | 只看该作者
你好 我最近也碰到类似的问题  就是不太懂电机启动前的霍尔校准这块

使用特权

评论回复
7
董自祝| | 2016-9-27 09:40 | 只看该作者
就是6个状态啊,你转的那是机械转速了,他安装的时候是按照电角度(120度)来安装的,两者不要混淆了。

使用特权

评论回复
8
七颗咖啡豆|  楼主 | 2016-10-9 14:09 | 只看该作者
问题解决,我的时序没有问题,硬件上出了问题。
机械转一圈有2组霍尔信号出来没有问题。不用改时序

使用特权

评论回复
9
七颗咖啡豆|  楼主 | 2016-10-9 14:11 | 只看该作者
wr12306 发表于 2016-9-26 09:37
你好 我最近也碰到类似的问题  就是不太懂电机启动前的霍尔校准这块

有霍尔的,开机先直接读取霍尔状态,然后给时序,转起来了就交给中断自动切换时序就行了

使用特权

评论回复
10
wr12306| | 2016-10-10 13:46 | 只看该作者
七颗咖啡豆 发表于 2016-10-9 14:11
有霍尔的,开机先直接读取霍尔状态,然后给时序,转起来了就交给中断自动切换时序就行了 ...

谢谢楼主的回复,感谢

使用特权

评论回复
11
tianqi911| | 2018-3-19 17:07 | 只看该作者
大赞。刚好用到。正好看见这篇**。感谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

508

帖子

4

粉丝