这仅仅是一个不作死就不会死业余程序猿干出的蠢事,大神们手下留情,砖头少飞一下,小的在此先谢过了。 很多年前,大约在07年还是05年。就有过用单片机模拟DSP跑变频器程序的想法。因为老一辈曾经用2051跑俄罗斯方块,想想人家既然能同时处理场、行还有视频信号,那么跑一个120度相差的三相正弦波应该没问题吧,迫不及待的敲一段代码,烧进AT89S52单片机一运行,结果是否定的。 S52用24M的晶振居然只能跑出几赫兹的变频正弦波来。失望之余就把代码丢一旁,后来一次硬盘损坏,代码也丢失了。 上个月由于生病加上工作的不容易,宅家里,没事瞅了瞅老姚的STC单片机,发现其中到了STC12CXXX以上的单片机居然都是1T指令周期,时钟能上35MHz,心头一亮,又闪出了想跑一跑变频器的想法。 说干就干,找来洞洞板,搭上最小系统,时钟吗,找了张DVD解码板,搞到一颗27M的,先用上再说。 紧接着就是满盘找以前写的代码,结果是失望的,想起那次硬盘损坏,代码早就无影无踪了。 老早就听说过变频器算法是很复杂的,毕竟没玩过DSP,也没听人家说过。只听人说过,这算法不是歪着脖子半小时能想出的东东。我现在也早已没有了当年的激情了。 思来想去,反正51速度也不够。那还是用当年的查表法吧。(有人就要说了,PIC不是1T的吗,而且人家一开始就是!?)您可别忘了,PIC是快,最高时钟一个指令200NS。可是你也别忘了,由于它的指令过于简单,简单到查表指令都没。而且我当年就用PIC测试过,那一堆查表指令下来,还没S52跑得快! 好了,回到正题,当年的数据表没了,而且你现在叫我用手算,你还是杀了我吧。。。。 歪脖子一想还是交给电脑吧,好吧立马动手敲代码。N小时后如下结果,计算一次居然要差不多十分钟,由于没开多线程,计算过程中界面也卡死,奇葩吧? ^_^ file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.jpg 吼吼!你那不是相差120度的三角波波么?你骗我这刚上幼儿园的小盘友?! 额额,是的,一张51能把这波波跑出来也就很能干了,何况还有一个业余的程序猿。。。。 迫不及待烧入STC12C5A32S2,嘿嘿,电机转起来了(家里没放三相电机,这里用的一个三相无刷电机测试的,闲余时我去搭一个三相全桥IGBT,直接输出380V AC,挂一个7.5KW电机玩玩)结果又悲剧了,电机虽然运行平稳,而且可以很低速运行(市面上的电调可不行,我手上买有2套,启动平稳运行大约都十几赫兹以上)可是最高速度也就十几赫兹,而且程序还老是复位!而我又没开启看门狗!汗。。。 注:三相直流电机与三相鼠笼式电机最大的区别是,直流电机直接挂50Hz无法启动,而鼠笼式可以。 沉思之后明白了,检查代码,居然38K字节了,人家STC12C5A32S2只有32K好么。 另,一共360度,每度再分成100份,光数据表大不说,指针溢出,一个周期跑下来也耗时多多。 更改代码重新计算,再次烧入,电机再次转起来,慢慢提高频率,电机也跟着快起来,当高到50Hz左右时电流开始减小,再高电机停转,这也是三相无刷直流电机高速不能输入正弦波的缘故。 好了,今儿到此结束,以后有空继续鼓捣。 结束语 为啥本文中不提供代码? 玩儿这东东,可不光是能敲代码就可以的,老鸟很明白。(老鸟也不需要代码,只需要思路即可。) 倘若您也喜欢跟我作死,那么我总结几条会作死的总结。 1、 硬件 无论是MOS管,还是IGBT,对于没太玩过的,您注意了,爆管就如同爆花生米,特别是玩上380AC的,那烟花是一个劲的赞^_^,本尊已经不知道爆了多少米了。。。。。 2、 代码 这个到没什么,要求就是精简。汇编妥妥的^_^,您要是会C++等,那么算法就OK了。 只是需要时间罢了^_^
|