這僅僅是一個不作死就不會死業(yè)余程序猿干出的蠢事,大神們手下留情,磚頭少飛一下,小的在此先謝過了。
很多年前,大約在07年還是05年。就有過用單片機(jī)模擬DSP跑變頻器程序的想法。因為老一輩曾經(jīng)用2051跑俄羅斯方塊,想想人家既然能同時處理場、行還有視頻信號,那么跑一個120度相差的三相正弦波應(yīng)該沒問題吧,迫不及待的敲一段代碼,燒進(jìn)AT89S52單片機(jī)一運行,結(jié)果是否定的。
S52用24M的晶振居然只能跑出幾赫茲的變頻正弦波來。失望之余就把代碼丟一旁,后來一次硬盤損壞,代碼也丟失了。
上個月由于生病加上工作的不容易,宅家里,沒事瞅了瞅老姚的STC單片機(jī),發(fā)現(xiàn)其中到了STC12CXXX以上的單片機(jī)居然都是1T指令周期,時鐘能上35MHz,心頭一亮,又閃出了想跑一跑變頻器的想法。
說干就干,找來洞洞板,搭上最小系統(tǒng),時鐘嗎,找了張DVD解碼板,搞到一顆27M的,先用上再說。
緊接著就是滿盤找以前寫的代碼,結(jié)果是失望的,想起那次硬盤損壞,代碼早就無影無蹤了。
老早就聽說過變頻器算法是很復(fù)雜的,畢竟沒玩過DSP,也沒聽人家說過。只聽人說過,這算法不是歪著脖子半小時能想出的東東。我現(xiàn)在也早已沒有了當(dāng)年的激情了。
思來想去,反正51速度也不夠。那還是用當(dāng)年的查表法吧。(有人就要說了,PIC不是1T的嗎,而且人家一開始就是???)您可別忘了,PIC是快,最高時鐘一個指令200NS??墒悄阋矂e忘了,由于它的指令過于簡單,簡單到查表指令都沒。而且我當(dāng)年就用PIC測試過,那一堆查表指令下來,還沒S52跑得快!
好了,回到正題,當(dāng)年的數(shù)據(jù)表沒了,而且你現(xiàn)在叫我用手算,你還是殺了我吧。。。。
歪脖子一想還是交給電腦吧,好吧立馬動手敲代碼。N小時后如下結(jié)果,計算一次居然要差不多十分鐘,由于沒開多線程,計算過程中界面也卡死,奇葩吧? ^_^
吼吼!你那不是相差120度的三角波波么?你騙我這剛上幼兒園的小盤友?!
額額,是的,一張51能把這波波跑出來也就很能干了,何況還有一個業(yè)余的程序猿。。。。
迫不及待燒入STC12C5A32S2,嘿嘿,電機(jī)轉(zhuǎn)起來了(家里沒放三相電機(jī),這里用的一個三相無刷電機(jī)測試的,閑余時我去搭一個三相全橋IGBT,直接輸出380V AC,掛一個7.5KW電機(jī)玩玩)結(jié)果又悲劇了,電機(jī)雖然運行平穩(wěn),而且可以很低速運行(市面上的電調(diào)可不行,我手上買有2套,啟動平穩(wěn)運行大約都十幾赫茲以上)可是最高速度也就十幾赫茲,而且程序還老是復(fù)位!而我又沒開啟看門狗!汗。。。
注:三相直流電機(jī)與三相鼠籠式電機(jī)最大的區(qū)別是,直流電機(jī)直接掛50Hz無法啟動,而鼠籠式可以。
沉思之后明白了,檢查代碼,居然38K字節(jié)了,人家STC12C5A32S2只有32K好么。
另,一共360度,每度再分成100份,光數(shù)據(jù)表大不說,指針溢出,一個周期跑下來也耗時多多。
更改代碼重新計算,再次燒入,電機(jī)再次轉(zhuǎn)起來,慢慢提高頻率,電機(jī)也跟著快起來,當(dāng)高到50Hz左右時電流開始減小,再高電機(jī)停轉(zhuǎn),這也是三相無刷直流電機(jī)高速不能輸入正弦波的緣故。
好了,今兒到此結(jié)束,以后有空繼續(xù)鼓搗。
結(jié)束語
為啥本文中不提供代碼?
玩兒這東東,可不光是能敲代碼就可以的,老鳥很明白。(老鳥也不需要代碼,只需要思路即可。)
倘若您也喜歡跟我作死,那么我總結(jié)幾條會作死的總結(jié)。
1、 硬件
無論是MOS管,還是IGBT,對于沒太玩過的,您注意了,爆管就如同爆花生米,特別是玩上380AC的,那煙花是一個勁的贊^_^,本尊已經(jīng)不知道爆了多少米了。。。。。
2、 代碼
這個到?jīng)]什么,要求就是精簡。匯編妥妥的^_^,您要是會C++等,那么算法就OK了。
只是需要時間罷了^_^