音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

請(qǐng)問各位,怎樣用PIC產(chǎn)生一個(gè)頻率線性變化連續(xù)脈波出來呢?

作者:liao_43 欄目:單片機(jī)
請(qǐng)問各位,怎樣用PIC產(chǎn)生一個(gè)頻率線性變化連續(xù)脈波出來呢?
我想做一子程序:頻率變化為:0Hz----5kHz,,占空為50%
,只要輸入起始頻率,終止頻率,變化時(shí)間,就可以實(shí)現(xiàn)頻率的線性變化。
我想了幾個(gè)月,都沒有想出一個(gè)好方法出來.

2樓: >>參與討論
martin
定時(shí)中斷,中斷里將IO取反,改變定時(shí)初值來改變頻率設(shè)定。
 
3樓: >>參與討論
liao_43
每個(gè)脈波周期都不同
如果用除法來算的話,在高頻時(shí),不夠時(shí)間用啊.
如果是累加時(shí)間或累減時(shí)間偏差的話,速度會(huì)快點(diǎn).但,我不知道用什么方便的方法算出那個(gè)時(shí)間偏差來.

4樓: >>參與討論
systemchip

你最高頻率為5KHZ,即周期為0.2MS=200微秒,占空比為50%,也即高低電平約為100微秒,你要求最低假設(shè)為1HZ,周期為1秒,高低電平各為500毫秒,你所謂的線性變化是怎么樣的?假設(shè)你用4MHZ的話,每條指令執(zhí)行為1微秒,100微秒約折合大約一百條指令,這還不能滿足你的要求嗎?

5樓: >>參與討論
liao_43
回復(fù)systemchip
在5K,4MHZ的情況下,計(jì)算半周期時(shí)間,(1000000/2)/5K,在設(shè)計(jì)
子程序時(shí),5K是要輸入的參數(shù),1000000/2=500000,需要使用三個(gè)節(jié)的除法。運(yùn)算時(shí)間肯定不止100us.

* - 本貼最后修改時(shí)間:2005-10-23 21:04:32 修改者:liao_43

6樓: >>參與討論
fumac
最好的方法是查表:)也是最簡(jiǎn)單的
 
7樓: >>參與討論
liao_43
回復(fù)fumac
頻率上升或下降的斜率不同,查不了表,太多數(shù)據(jù)了。

* - 本貼最后修改時(shí)間:2005-10-23 21:11:16 修改者:liao_43

8樓: >>參與討論
picexpert
造一下表好不?
造一下表好不?

9樓: >>參與討論
liao_43
回復(fù):picexpert
請(qǐng)教picexpert,如何造表?
我需要編寫的子程序是:輸入起始頻率(f1),終止頻率(f2),變化時(shí)間(t),就可以實(shí)現(xiàn)頻率的線性變化。起始頻率(f1) 終止頻率(f2) 變化時(shí)間(t)這三個(gè)量
都是變量,我確實(shí)想不出怎樣將所有數(shù)據(jù)羅列出來。

10樓: >>參與討論
picexpert
PWM
如果你用的是硬件PWM,您就把你的PWM時(shí)間發(fā)生器的值做到表中(是一個(gè)遞變的值),
如:
ADDWF PCL,F
DT 01;
DT 02;
DT 03;
.
.
.
如此下去,再查此表將定時(shí)數(shù)據(jù)取送到相關(guān)的時(shí)間發(fā)生器中如(定時(shí)器)等.如果你做的是軟PWM請(qǐng)參考應(yīng)用筆記(MICROCHIP)CN_00645A.pdf(MICROCHIP網(wǎng)上有)

11樓: >>參與討論
picexpert
你的T也是變量?
你的T也是變量?

12樓: >>參與討論
liao_43
回復(fù):picexpert
是的,不單是起始頻率(f1),終止頻率(f2)是變量,變化時(shí)間(t)也是變量.
所以就很頭痛.picexpert,sorry,公司里不能上網(wǎng),我只能晚上下班后回復(fù)你.

13樓: >>參與討論
eeproom
你做什么應(yīng)用?
   看起來像電機(jī)驅(qū)動(dòng),建議還是找其他辦法,如果你的驅(qū)動(dòng)參數(shù)是可變的,查表法就需要在RAM中做好大一張表,如果固定變化參量,倒是可以固定在ROM中。我曾做過一個(gè)電機(jī)驅(qū)動(dòng),在24MHZ下最快時(shí)間為16us,極其復(fù)雜。要想辦法讓得到參數(shù)的時(shí)間最少。

14樓: >>參與討論
wenbilin
問題好像沒講清楚?!單片機(jī)也不是萬能的!
 
15樓: >>參與討論
picexpert
速度不夠吧
沒搞頭,這三個(gè)做為參數(shù)只能運(yùn)算了,時(shí)間不夠用,如果可能的話可以將表做出幾個(gè)檔來,也就是說不是連續(xù)的,這樣處理一下把表放在ROM中,否則時(shí)間肯定不夠.PIC的中檔片子是跑不到24M的.你可以試一下PIC18的或DSPIC30的電機(jī)控制的,30的應(yīng)該比較好,速度也夠快了,但是量產(chǎn)要注意成本控制喲?!

16樓: >>參與討論
liao_43
速度夠了.
這是做數(shù)碼相機(jī)里的步進(jìn)馬達(dá)耐久測(cè)試.上面三個(gè)參數(shù)想通過按鍵和LCD輸入PIC里,然后啟動(dòng)步進(jìn)馬達(dá)做CW加速--CW恒速--CW減速--停止--CCW加速--CCW恒速--CCW減速--停止,耐久模式.步進(jìn)馬達(dá)的速度不是很高,我用的PIC是16F74.因?yàn)槊看文途媚J嚼锏钠鹗妓俣龋(wěn)定速度,變化時(shí)間都不同,所以就想編寫一個(gè)子程序來實(shí)現(xiàn).不過想了幾個(gè)月都沒有想出來.現(xiàn)在每次做耐久時(shí),都要改寫程序,所以很頭痛了.


17樓: >>參與討論
picexpert
回樓上
我指的是你用你的CHIP來計(jì)算三維參數(shù)時(shí)間可能不夠用,如果你的PWM 的F高一點(diǎn)的話,你的程序中又是每個(gè)T中又存在乘除運(yùn)算,速度可能不夠.象你現(xiàn)在這樣做那應(yīng)該是夠了.

18樓: >>參與討論
eeproom
你的實(shí)現(xiàn)方法有問題的
   我猜就是電機(jī)驅(qū)動(dòng),要求電機(jī)從0加速到指定的速度,100周期是要不完的,我給你一個(gè)方案你試一下,
   //事先計(jì)算好規(guī)定加速、減速、恒速的運(yùn)轉(zhuǎn)圈數(shù),計(jì)時(shí)器的上下限值
   void MotorDrive(unsigned int end_rate,unsigned int start_rate,unsigned int speedup_circle,unsigned int speeddown_circle,unsigned int speedkeep_circle)     
{
    unsigned CHAR i;
    unsigned CHAR j;    //i,j用來計(jì)算加速,j減速計(jì)數(shù)
    unsigned int timer_value_buf;
    ......
    di();
    for(;;) {
     if(!TMRxIF) continue;
      MOTOR_CP=!MOTOR_CP;    //驅(qū)動(dòng)一次了
      TMRxIF=0;
      TMRx=timer_value_buf;
      //接下來計(jì)算下一個(gè)timer_value_buf的值
      if(speedup_circle)  {  
         .....        //讓i,j去控制timer_value_buf的變化,如果走過360度,就減去speedup一次,
         continue;
       }         
      else if(Speedkeep_circle){
         ......     //這里最輕松了,只計(jì)算圈數(shù)了
         continue;
     }
     else if(speeddown_circle) {
        ......     //相當(dāng)于加速的倒算
        continue;
     }
     break;
  }
   ei();
  }
這里沒有什么除法,我曾用這個(gè)方法在96周期內(nèi)實(shí)現(xiàn)1200轉(zhuǎn)x(400步/轉(zhuǎn)x2)的步進(jìn)電機(jī)驅(qū)動(dòng),還要中斷驅(qū)動(dòng)另一個(gè)電機(jī)。i,j控制加減速不用說吧。
      

* - 本貼最后修改時(shí)間:2005-10-27 9:06:30 修改者:eeproom

19樓: >>參與討論
liao_43
回復(fù):picexpert
我做耐久的步進(jìn)馬達(dá)是兩相的,18度一步,步進(jìn)馬達(dá)的驅(qū)動(dòng)器自己做的,集合在PIC16F74那塊控制板上,我是用橋式驅(qū)動(dòng)步進(jìn)馬達(dá)的,一共用了一個(gè)PORT口,8根數(shù)據(jù)線來控制步進(jìn)馬達(dá)的相序。所以不能用PIC里的硬體PWM來控制步進(jìn)馬達(dá)。所以每一步都要運(yùn)算,時(shí)間還是不夠。

20樓: >>參與討論
liao_43
回復(fù):eeproom
"//讓i,j去控制timer_value_buf的變化",你的意思是不是步進(jìn)馬達(dá)每轉(zhuǎn)一圈,timer_value_buf就等量減少,即每次都減去一個(gè)常量?如果是這樣的話,我覺得你那種控制方法不能控制步進(jìn)馬達(dá)線性加減速,speed=1/(T-△t*n),T是初始周期,△t是常量,n是運(yùn)轉(zhuǎn)的圈數(shù)。而且,你的加減速控制不能達(dá)到單步變化。我想實(shí)現(xiàn)的變速是,speed=speed_1+t*((speed_2-speed1)/T),speed_1是初始速度,speed_2是終止速度,T是變化時(shí)間。

21樓: >>參與討論
eeproom
呵呵
   我有特殊需要,需要計(jì)算運(yùn)轉(zhuǎn)圈數(shù)讓別的電機(jī)同步驅(qū)動(dòng),你這里不需要圈數(shù),問題就更加簡(jiǎn)單。我有說走一圈才變速嗎?實(shí)際上我在兩圈就達(dá)到需要的速度了。誰說電機(jī)加減速是線性的?找本教科書看看再說。另外你那18度一步的電機(jī)那里買來的?我出高價(jià)買幾個(gè)玩玩。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于IC選型 請(qǐng)大家評(píng)審一下
尋找PIC16C745中文資料
單片機(jī)菜鳥問題:pic如何進(jìn)行十進(jìn)制數(shù)調(diào)整
為什么中斷程序中“加1”不起作用?
pic16f870程序
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)