找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

M05x 弦波电机控制代码 V1.01

  [复制链接]
跳转到指定楼层
楼主
Angus 发表于 2014-1-10 16:07:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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, 下载次数: 6240)
V1.01:   由PWMB2精确定位测电流时刻点,增加Hall信号超时功能,堵转会立即把电压降到很低。

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



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






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 顶 踩
回复

使用道具 举报

沙发
xiaoxiao2013 发表于 2014-1-13 12:01:02 | 只看该作者
另外,再请教下,用mini51做有霍尔的FOC资源够吗?AD相电流采样这块能否满足要求?
回复 支持 反对

使用道具 举报

板凳
jimmylin 发表于 2014-2-15 17:05:25 | 只看该作者
谢谢楼主分享
回复 支持 反对

使用道具 举报

地板
w70770777 发表于 2014-2-27 09:37:41 | 只看该作者
本帖最后由 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手册看的资料,看着这么辛苦的份上,楼主大大请解答一下吧
回复 支持 反对

使用道具 举报

5#
 楼主| Angus 发表于 2014-2-27 14:17:44 | 只看该作者
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 的位置,校正弦波角度。达到平稳运转目的。
回复 支持 反对

使用道具 举报

6#
w70770777 发表于 2014-2-27 19:57:00 | 只看该作者
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系列网上找不到,不知道哪里可以申请样片,或者可以少量购买,来做试验。
回复 支持 反对

使用道具 举报

7#
 楼主| Angus 发表于 2014-2-27 22:36:46 | 只看该作者
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>,芯片可以找芯唐的代理,或直接电话给芯唐的销售。
回复 支持 反对

使用道具 举报

8#
w70770777 发表于 2014-2-28 09:42:17 | 只看该作者
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?
回复 支持 反对

使用道具 举报

9#
xiaoxiao2013 发表于 2014-2-28 11:33:29 | 只看该作者
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、你的第一点不成立,所以最后一条是错的
回复 支持 反对

使用道具 举报

10#
w70770777 发表于 2014-2-28 14:31:53 | 只看该作者
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 那就对的上了。

回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU