打印

GD32F303 BLDC电机换向控制

[复制链接]
5821|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CharryW|  楼主 | 2019-11-27 12:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
BLDC直流无刷电机的控制需要MCU实现电子换向控制,GD32 MCU的高级定时器很适合用来说电机控制应用,可产生3对可编程死区的互补PWM波,还有一个空余通道可以用于进行ADC采样触发。加之高主频和零等待特性,GD32可以实现高性能的BLDC、FOC控制,拿GD32F303来说,M4F内核支持FPU,具有两个高级定时器,3个独立ADC模块。单芯片即可实现控制频率16K左右的双FOC控制。
BLDC控制相对FOC比较简单,实现转子位置检测并提前一定电角度换向即可。附件是此前学习BLDC的换向控制原理时做的按键控制单步顺序换向的demo,每按一下按键可以控制电机进行一次换向,测试时使用的电机是4对极,所以点击6*4次按键电机转动一圈。长按按键可固定占空比和换向延时进行无位置检测的开环运行,让电机连续转动。

换向demo.rar

534.2 KB

使用特权

评论回复
沙发
zeshoufx| | 2019-11-27 13:40 | 只看该作者
谢谢分享,,,,,,,

使用特权

评论回复
板凳
CharryW|  楼主 | 2019-11-27 15:06 | 只看该作者
    通道配置切换时,需要注意各通道切换的一致性,在同一时刻生效,避免中间的时间差带来风险,所以可以采用直接写CHCTL2寄存器的方式、或者开启通道影子寄存器,配置好各通道后用软件换向事件让配置生效。如以下代码:   

           #ifdef  REGISTER

            temp =TIMER_CHCTL2(TIMER0);
            temp|=TIMER_CHCTL2_CH0EN|TIMER_CHCTL2_CH2NEN;
            temp&=~(TIMER_CHCTL2_CH0NEN|TIMER_CHCTL2_CH1EN|TIMER_CHCTL2_CH1NEN|TIMER_CHCTL2_CH2EN);
            TIMER_CHCTL2(TIMER0)=temp;

            #else
            timer_channel_output_state_config(TIMER0,TIMER_CH_0,TIMER_CCX_ENABLE);
            timer_channel_output_state_config(TIMER0,TIMER_CH_1,TIMER_CCX_DISABLE);
            timer_channel_output_state_config(TIMER0,TIMER_CH_2,TIMER_CCX_DISABLE);

            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_0, TIMER_CCXN_DISABLE);
            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_1, TIMER_CCXN_DISABLE);
            timer_channel_complementary_output_state_config(TIMER0, TIMER_CH_2, TIMER_CCXN_ENABLE);

            timer_event_software_generate(BLDC_PWM_TIMER, TIMER_EVENT_SRC_CMTG);            
            #endif

使用特权

评论回复
地板
zhuotuzi| | 2019-11-30 20:20 | 只看该作者
试试看

使用特权

评论回复
5
coshi| | 2019-12-5 14:37 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
aoyi| | 2019-12-5 14:44 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
drer| | 2019-12-5 14:51 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
粒雄李雄| | 2020-3-24 22:47 | 只看该作者
CharryW 发表于 2019-11-27 15:06
通道配置切换时,需要注意各通道切换的一致性,在同一时刻生效,避免中间的时间差带来风险,所以可以采 ...

楼主你好,我定时器参照你的设定进行初始化,然后还是无法触发adc采集,adc初始化的需要注意什么吗?我的adc初始化是用例程的注入组初始化,请问是哪里出问题了吗?

使用特权

评论回复
9
hua_ren| | 2020-3-26 11:49 | 只看该作者
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索?

使用特权

评论回复
10
darklighttt| | 2020-3-26 21:57 | 只看该作者
hua_ren 发表于 2020-3-26 11:49
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索? ...

可以问官方要示例代码,或者从开源的代码上移植。

使用特权

评论回复
11
詹求实| | 2020-3-29 22:53 | 只看该作者
支持下,谢谢分享,如果有全套的代码就更好了。

使用特权

评论回复
12
xdqfc| | 2020-3-30 10:40 | 只看该作者
hua_ren 发表于 2020-3-26 11:49
如果驱动PMSM电机,做正弦波驱动,该怎么配置呢?一直没有看到示例代码。难道只有自己摸索? ...

假如就是普通的正弦波的话,就直接按正弦波表格输出就是了,没有什么奥妙,假如是矢量的话,在得到S16Global_dq_Uq和S16Global_dq_Ud之前的计算就直接按照书本介绍的来就是,网上有大把的介绍,关键是电流采样一定要平滑处理,必须要平滑处理,之后的换向表格假如想偷懒的话,最近我看了中颖的一款单片机,只要把上面两个参数给他,就直接得出三相的占空比了,这个是真牛X。还有就是PID的处理,两个参数需要经过试验才能够得出,人家不会给你的。

使用特权

评论回复
13
hua_ren| | 2020-3-31 10:28 | 只看该作者
TI的电机库就做的很好。使用起来很方便。自己再编写底层代码,以来费时间,2来不知道是否正确,真是个头疼的问题。

使用特权

评论回复
14
swatchis| | 2020-10-31 15:33 | 只看该作者
学习下,谢谢

使用特权

评论回复
15
sctfd| | 2020-12-31 16:13 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
16
萝卜头008| | 2021-1-4 10:00 | 只看该作者
学习下,多谢

使用特权

评论回复
17
zhuozhixin| | 2021-10-25 17:06 | 只看该作者
谢谢楼主分享。

使用特权

评论回复
18
QQ2224043166| | 2021-12-8 17:30 | 只看该作者
为楼主点赞,分享的很棒,

使用特权

评论回复
19
QQ2224043166| | 2021-12-8 18:39 | 只看该作者

使用特权

评论回复
20
woshic23| | 2022-8-23 20:59 | 只看该作者
ll啊

使用特权

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

本版积分规则

4

主题

142

帖子

3

粉丝