牛卧堂MCU技术交流

标题: M05x 弦波电机控制代码 V1.01 [打印本页]

作者: Angus    时间: 2014-1-10 16:07
标题: M05x 弦波电机控制代码 V1.01
本帖最后由 Angus 于 2014-7-23 09:38 编辑

A- : PWM0, 输出高时 MOSFET截止 ,  A+ : PWM1 输出高时 MOSFET导通, Hall_A 接 P40
B相  PWM23, Hall_b 接 P41
C相 PWM45, Hall_c 接 P42,    60度 Hall 信号
六路 PWM 同步起动, P1.2_AIN2接电位器调速
M051LDE_Hall_Sin_BLDC_V1.01.zip (23.46 KB, 下载次数: 5727)
V1.01:   由PWMB2精确定位测电流时刻点,增加Hall信号超时功能,堵转会立即把电压降到很低。

这是三相 MOSFET 输出, 未滤波的电压波形



弦波驱动、单极性调制的电机端电压波形图







作者: xiaoxiao2013    时间: 2014-1-13 12:01
另外,再请教下,用mini51做有霍尔的FOC资源够吗?AD相电流采样这块能否满足要求?
作者: jimmylin    时间: 2014-2-15 17:05
谢谢楼主分享
作者: w70770777    时间: 2014-2-27 09:37
本帖最后由 w70770777 于 2014-2-27 09:52 编辑

我看了程序,有几个问题想请教下楼主:
1.初始化时PWMA->CMR0 = 0;PWMA->CMR2 = 0;PWMB->CMR0 = 0;那么程序开机上电时 是怎么启动的?开机应该触发不了P40,P41,P42的中断吧

2.在hall中断程序“GPIOP2P3P4_IRQHandler()”中,找不到换相程序,那是怎么做到切换六个MOSFET 的状态的?

本人英文不太行,就着金山词霸翻译MO5xxDN手册看的资料,看着这么辛苦的份上,楼主大大请解答一下吧
作者: Angus    时间: 2014-2-27 14:17
w70770777 发表于 2014-2-27 09:37
我看了程序,有几个问题想请教下楼主:
1.初始化时PWMA->CMR0 = 0;PWMA->CMR2 = 0;PWMB->CMR0 = 0;那么 ...

弦波控制,没有换相的概念,三路互补 PWM 不停输出不同占空比的 PWM ,形成三相弦波。 三相弦波会形成旋转的磁场,带动转子转动。

进入主循环之前有一句,DutyCMR  = 500 ; 把90度时的占空比设为 50%了, 在 PWM 中断里, 输出峰值为 50% 的三相弦波, 这时电机就会转。 然后由 P40,P41,P42测到的 Hall 的位置,校正弦波角度。达到平稳运转目的。
作者: w70770777    时间: 2014-2-27 19:57
Angus 发表于 2014-2-27 14:17
弦波控制,没有换相的概念,三路互补 PWM 不停输出不同占空比的 PWM ,形成三相弦波。 三相弦波会形成旋 ...

谢谢 解答,进过今天的反复找资料 这两个问题也算解决了,但是又有新的疑问:
1.TabSin[180]这个数组是把60°分成180份 每份应该1/3°,但是我按sin函数算出来 却对不上表格的数值,请教下数组是怎么的出来的;

2.if(temp32u <= 0xFFFF)AngleStep=Divide((60<<16)*40,temp32u);其中“(60<<16)*40”里面乘以40是因为每个PWM周期中断是40US么?如果是40US一周期,那pwm的频率是25Khz,对不上前面的15.6Khz

3.三路互补 PWM 不停输出不同占空比的 PWM,肯定会出现三路下桥臂同时触通的时候,我知道三路下桥臂同时触通会有刹车的效果,不知道会不会影响电机性能

4.楼主大大给的程序是SPWM波形吧,不知道有没有SVPWM波形的程序。

5.M05xxdn系列网上找不到,不知道哪里可以申请样片,或者可以少量购买,来做试验。
作者: Angus    时间: 2014-2-27 22:36
w70770777 发表于 2014-2-27 19:57
谢谢 解答,进过今天的反复找资料 这两个问题也算解决了,但是又有新的疑问:
1.TabSin[180]这个数组是把 ...

1>,TabSin[180]是0~180度正弦表,每度一个数据。
2>,这里应是80,你再重新下载一下。PWM周期是 80us,PWM频率是 25MHz/1000/2 = 12.5KHz
3>,SPWM和SVPWM都会出现上三路和下三路MOSFET全通的情况,不影响运转特性。
4>,这是SPWM波。M051的性能是可以做 SVPWM 的,目前我没时间做。
5>,芯片可以找芯唐的代理,或直接电话给芯唐的销售。
作者: w70770777    时间: 2014-2-28 09:42
Angus 发表于 2014-2-27 22:36
1>,TabSin[180]是0~180度正弦表,每度一个数据。
2>,这里应是80,你再重新下载一下。PWM周期是 80us,P ...

恩 我重新下载了一遍

对于1>,如果是对应0~180度正弦,那“PWMA->CMR0 = 500 + DutyCMR*TabSin[temp32u]/65536 ;”这里面的除数应该是32768吧,疑惑不解;

越是思考越是有些疑问:
1.当“PWMA->CMR0 = 500”时,那在一个PWM周期内,A相的正向电流和负向电流通电时间相同,那是不是宏观来看A相处于正弦波的0电压状态?

2.如果第1点成立,CMR最大值为1000,那是不是意味着正弦波可调的幅值是CMR/2?
作者: xiaoxiao2013    时间: 2014-2-28 11:33
w70770777 发表于 2014-2-28 09:42
恩 我重新下载了一遍

对于1>,如果是对应0~180度正弦,那“PWMA->CMR0 = 500 + DutyCMR*TabSin[temp32u] ...

我来回答
1、“PWMA->CMR0 = 500 + DutyCMR*TabSin[temp32u]/65536 ;”这里面的除数应该是65536,没有错
2、“PWMA->CMR0 = 500”,明明有500的占空比,为什么说是该相电压为0呢?如果看三相合成电压也不是0啊
3、你的第一点不成立,所以最后一条是错的
作者: w70770777    时间: 2014-2-28 14:31
xiaoxiao2013 发表于 2014-2-28 11:33
我来回答
1、“PWMA->CMR0 = 500 + DutyCMR*TabSin[temp32u]/65536 ;”这里面的除数应该是65536,没有错
...

谢谢 回答
但是依旧没有解答我的疑惑,比如TabSin【1】 = 0X23C,那么0X23C/65536=0.008728,而sin1°=0.01745
如果0X23C/32786=0.017446 那就对的上了。


作者: xiaoxiao2013    时间: 2014-2-28 16:52
本帖最后由 xiaoxiao2013 于 2014-2-28 16:53 编辑
w70770777 发表于 2014-2-28 14:31
谢谢 回答
但是依旧没有解答我的疑惑,比如TabSin【1】 = 0X23C,那么0X23C/65536=0.008728,而sin1°=0. ...

你理解错了,这两个是两码事,你把它们混在一起了,试着先把65536这个去掉想一想,先去掉想想角度怎么来的,这步弄懂然后你就明白了
作者: Angus    时间: 2014-3-1 12:11
w70770777 发表于 2014-2-28 18:26
能不能详细的和我说说,这个困扰我很久了


除32768没错,DutyCMR 的最大取值为 500。
如果除 65536 ,DutyCMR 的最大取值就变为 1000 了, 这样与 PWM 的周期值 1000 就对应起来了。PWM 的周期CNR=CMR占空比时,l输出电压100%。
这样做,一是从PWM的角度便于理解输出电压占空比,二是除65536,编译器直接取高16位,运算快。
作者: w70770777    时间: 2014-3-1 13:25
Angus 发表于 2014-3-1 12:11
除32768没错,DutyCMR 的最大取值为 500。
如果除 65536 ,DutyCMR 的最大取值就变为 1000 了, 这样与 PW ...

这么说 如果除 65536 ,DutyCMR 应该赋值为1000吧,这样我就理解了

还有下面两个问题,我是否猜的对呢:
1.当“AngleNow = 0°”“PWMA->CMR0 = 500”时,那在一个PWM周期内,A相的正向电流和负向电流通电时间相同,那是不是宏观来看A相处于正弦波的0电压状态?

2.如果第1点成立,CMR最大值为1000,那是不是意味着正弦波可调的幅值是CMR/2?
作者: Angus    时间: 2014-3-11 17:37
w70770777 发表于 2014-3-1 13:25
这么说 如果除 65536 ,DutyCMR 应该赋值为1000吧,这样我就理解了

还有下面两个问题,我是否猜的对呢: ...

You are all right  ^_^
作者: w70770777    时间: 2014-3-25 08:47
Angus 发表于 2014-3-11 17:37
You are all right  ^_^

谢谢解惑,实验板终于做好了,开始动手实验了
作者: w70770777    时间: 2014-4-22 10:39
楼主 我又来请教了

实验板感觉不是很成功,有几个问题我也很困惑:
1.PWM->CMR0 = 100 - DutyCMR*TabSin[temp32u]/32768 ; 其中DutyCMR赋值为100,我不敢把PWM放的太大,因为没有限流,怕爆管子,这样出来的效果很奇怪。因为死区时间我设为30个周期,那么当PWM->CMR0值小于30的时候,上桥臂会有很长一段时间处于关断状态。
2.正弦怎么测电流?一般方波是在PWM高电平中间来一个中断来测量电流值,但是正弦情况不一样,在PWM高电平中间这点,是A\B\C三相上桥同时开通的点,应该是没有电流,那么怎么测电机的电流呢?
3.我在运转电机是,电机抖动非常厉害,而且电流非常大,一直查不出是什么问题。
作者: Angus    时间: 2014-5-9 14:01
换相只要正确,是不会爆管子的, 有Hall 的电机, 只要Hall 不坏, 换相就不会错.
如果抖动厉害, 电流又很大, 可能是 Hall 对应关系不对.  
作者: xiaoxiao2013    时间: 2014-12-16 14:21
本帖最后由 xiaoxiao2013 于 2014-12-16 15:27 编辑

霍尔角度已明白,重新编辑下。

作者: 匿名    时间: 2019-4-28 14:20
你好,这个有参考原理图吗?

作者: 匿名    时间: 2019-11-22 17:59
楼主,电话多少啊
作者: 匿名    时间: 2019-11-26 13:31
游客 113.87.167.x 发表于 2019-11-22 17:59
楼主,电话多少啊

021-62365999
作者: 匿名    时间: 2022-9-23 15:28
有原理圖嗎  ?
作者: 匿名    时间: 2022-9-25 08:45
請問一 下Hall 狀態相對於sin 角度 6,4,5,2,3,1,


作者: lpx280666373    时间: 2022-11-21 16:47
膜拜大佬。。。方波还没弄明白呢




欢迎光临 牛卧堂MCU技术交流 (http://www.nuvoton-mcu.com/) Powered by Discuz! X3.2