文号
t64876
阅读
48115
回复
19
收藏
16
FPGA搞SVPWM+VVVF,略囧
2014/04/20
IP:湖北
本帖最后由 yanli12321 于 2014-4-20 20:35 编辑

看到张静茹童鞋用STM32搞电机控制,我也心动了........按照我的习惯,理论推导是必须要走一遍滴,于是乎..............
QQ截图20140420180526.png
床铺党的胜利[s:125]

推了好几天,终于把SVPWM的算法推出来了,接下来就是写程序,在此为大家强烈推荐c4droid——安卓下的C编译器........程序猿居家旅行杀人灭口必备啊
QQ截图20140420180050.jpg

手机敲代码略慢.......但还是把SVPWM程序搞出来了.......其中结合了我之前搞得快速正弦表计算算法(详情参见https://www.kechuang.org/t/63198),计算压力小多了
QQ截图20140420182256.png

表示c4droid的界面很欢乐

SVPWM  C代码如下




QQ截图20140420182307.png
仿真输出......这个是输出占空比,人肉逻辑分析仪表示应该是SVPWM的龙猫波了[s:98]

感谢静茹姐姐帮忙分析数据..........看来一切正常
QQ图片20140420183016.jpg

程序搞出来了..........但问题是.........手头最好的MCU是一片ATMEGA16............用这货搞浮点计算简直就是个joke..........

头疼了好久,突然想起来之前买的一块FPGA开发板还没动过呢.........EP2C8 至少比AVR强吧[s:105]
新问题又来了.........之前只用verilog HDL给CPLD编过一些简单的程序.......正弦计算神马的压力山大,直到我得知FPGA可以用mif文件来初始化它的RAM,然后,一个邪恶的想法诞生了......
我把SVPWM程序稍稍修改了一下,按照mif文件的格式输出数据,出来是这样滴:
123.png
这个只输出了一相SVPWM数据,采用分时复用的方式输出三相信号

然后利用quartus II自带的IP核定义了一个RAM块,再用前面的mif文件初始化这个RAM.......SVPWM计算环节就这么被我大大咧咧地略过了

接下来试验了一下PWM输出三相SVPWM,8位分辨率,因为示波器要用一个通道触发.....所以只能看一相的波形了.......
QQ截图20140420180619.png
貌似很不错的样纸

接下来是VVVF(变压变频).........头一次看到这个概念还以为是神马高大上的东东,买来两本电力拖动研究了好久,在一大堆公式后面,我只看到了这么一句话:在转速低于额定转速时,保持V/F为恒指(不考虑绕组内阻);在转速高于额定转速时,采用恒压变频驱动。
坑爹啊!!!
接下来就好办了,还是用IP核生成除法器,由一个外部信号控制输出频率和电压,同时保持恒压频比。然后顺手找来了开发板自带的ADC驱动,拧电位器控制吧[s:101]
测试视频:
点击此处查看视频

恩,完全正常,下一步就是驱动电机咯

问题再一次来了.........手头没有三相感应电机,想来想去,找了个旧硬盘,用上面的无刷凑合吧[s:108]

测试环境:
QQ截图20140420180702.png

面包板上是顺手的搭的TC4420屌丝牌三相全桥[s:116]

因为是开环的,所以电机启动略麻烦,需要把转速调低然后手动拨一下才能转起来[s:247]
视频在此
点击此处查看视频

因为无刷电机气息磁场不是按正弦分布的........所以转起来有些抖动

实验目前就做到这里........打算等到暑假用DSP搞搞FOC,再带个PMSM。恩,大学还没上毕业设计就搞出来了[s:256]
最后附上所有的项目文件,程序全部采用verilog HDL编写

attachment icon FPGA SVPWM.zip 8.12MB ZIP 250次下载
QQ截图20140420180102.jpg
QQ截图20140420180115.jpg
QQ截图20140420180652.png
+100
科创币
金坷居士
2014/04/20
高端玩家
+1000
科创币
虎哥
2014/04/21
不错啊
12年8个月前IP:未同步
683516
1楼
单片机渣渣前来膜拜大神
引用
评论
12年8个月前IP:未同步
683517
2楼
为什么你的示波器要单独占用一个通道去触发?我的示波器通道1设置为上升沿触发,调一下触发电平,只要CH1和CH2测试的信号同频就可以正常显示了
引用
评论
yanli12321作者
12年8个月前IP:未同步
683532
3楼
张静茹 发表于 2014-4-20 19:45
为什么你的示波器要单独占用一个通道去触发?我的示波器通道1设置为上升沿触发,调一下触发电平,只要CH1和 ...


额,这次示波器比较鬼畜,SVPWM波死活不给触发,只好让FPGA另外输出一路方波触发......
引用
评论
12年8个月前IP:未同步
683536
4楼
yanli12321 发表于 2014-4-20 20:16
额,这次示波器比较鬼畜,SVPWM波死活不给触发,只好让FPGA另外输出一路方波触发......


你的占空比没RC滤波吗?
引用
评论
yanli12321作者
12年8个月前IP:未同步
683540
5楼
张静茹 发表于 2014-4-20 20:24
你的占空比没RC滤波吗?


一直习惯用示波器数字滤波,如果RC滤波的话应该就能正常触发了
引用
评论
12年8个月前IP:未同步
683574
6楼
yanli12321 发表于 2014-4-20 20:34
一直习惯用示波器数字滤波,如果RC滤波的话应该就能正常触发了


原来如此
引用
评论
12年8个月前IP:未同步
683585
7楼
虽然觉得FPGA弄这个略浪费,还是DSP比较合适。当然FPGA还是很万能的,用用练练Verilog还是不错的
引用
评论
12年8个月前IP:未同步
683614
8楼
大神
引用
评论
12年8个月前IP:未同步
683615
9楼
大神
引用
评论
12年8个月前IP:未同步
683655
10楼
谢谢大神,菜鸟前来学习学习
引用
评论
12年8个月前IP:未同步
683956
11楼
偶在等你的推导...........
+10
科创币
yanli12321
2014/04/23
老眼昏花差点看错...............
引用
评论
11年8个月前IP:上海
762987
12楼
这个必须顶啊~~~~~~~~~~~
引用
评论
11年8个月前IP:北京
766011
13楼
我是来看看的,哈哈哈~~~~~~~~~~~~~
引用
评论
11年8个月前IP:上海
766023
14楼
太强了
引用
评论
11年3个月前IP:北京
790558
15楼
你好,在斩波调节时,{counter0[13:0],clk1} 的波形是锯齿波,不是三角波吧。理论上调制波应该是三角波才是。是这个样子吗?请指教~!
引用
评论
11年3个月前IP:广东
790689
16楼
好像很牛逼的样子,数学渣前来膜拜,,,,,
我想问个问题,步进电机的启动加速和减速的频率曲线有没有接触过,,,步进电机得在合适的启动频率慢慢调整加速频率才能做到平顺起步,,,但我是个学渣看了好多文章都不知道在讲什么鬼,一直没有写出合适的程序,,,感觉你搞的这个应该懂,,,
引用
评论
10年6个月前IP:浙江
820327
17楼

这个图是用什么显示的?
引用
评论
10年6个月前IP:山东
820409
18楼
买个电源吧
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的