久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5807|回復(fù): 25
收起左側(cè)

單片機(jī)怎樣用模擬PWM精確控制脈沖頻率,求思路

  [復(fù)制鏈接]
ID:101869 發(fā)表于 2021-8-28 18:11 來自手機(jī) | 顯示全部樓層 |閱讀模式
50黑幣
使用STC15F104W 定時器模擬PWM,需要精確到控制頻率,也就是指定一個脈沖數(shù),一秒時間到脈沖正好發(fā)完。求個思路!謝謝大家!

回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2021-8-28 19:52 來自手機(jī) | 顯示全部樓層
要多快? 脈沖高電平時間是固定還是可變?
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-28 20:18 來自手機(jī) | 顯示全部樓層
lkc8210 發(fā)表于 2021-8-28 19:52
要多快? 脈沖高電平時間是固定還是可變?

這是一個同步調(diào)速,需要與主軸轉(zhuǎn)速同步調(diào)整,也就是主軸轉(zhuǎn)速快  伺服也要按比例加快
回復(fù)

使用道具 舉報

ID:302400 發(fā)表于 2021-8-28 21:37 | 顯示全部樓層
非凡科技 發(fā)表于 2021-8-28 20:18
這是一個同步調(diào)速,需要與主軸轉(zhuǎn)速同步調(diào)整,也就是主軸轉(zhuǎn)速快  伺服也要按比例加快





那是閉環(huán)控制,可不是簡簡單單的PWM
回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2021-8-28 23:13 | 顯示全部樓層
頻率范圍? 多少位的PWM?
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-29 07:50 來自手機(jī) | 顯示全部樓層
npn 發(fā)表于 2021-8-28 23:13
頻率范圍? 多少位的PWM?

只求思路  頻率17K左右
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-8-29 18:12 | 顯示全部樓層
PWMIF是中斷標(biāo)志寄存器,可以在PWM計數(shù)器歸零時產(chǎn)生中斷,打開這個中斷充許就可以在每個歸零時進(jìn)入中斷,你在中斷程序中每次加1不就可以了嗎?使用完之后再把加1的歸零就可以了
數(shù)據(jù)手冊中是有說明的,你認(rèn)真看一下
這STC的PWM數(shù)據(jù)手冊太多了,用不著的話,我都不想看.....
回復(fù)

使用道具 舉報

ID:57657 發(fā)表于 2021-8-29 18:28 | 顯示全部樓層
非凡科技 發(fā)表于 2021-8-29 07:50
只求思路  頻率17K左右

17K需要硬件PWM,此型號不支持,改用STC其他型號。
回復(fù)

使用道具 舉報

ID:342954 發(fā)表于 2021-8-29 18:32 | 顯示全部樓層
使用定時器就可以了
sbit pwm_out =p1^2;
unsigned char tim_ji;
void to(void) interrupt 1
{
tim_ji++;
  if(tim_ji>100)
{
tim_ji=0;
}
if(tim_ji>50)
{
pwm_out=1;
}
else

{
pwm_out=0;
}

}
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-29 22:54 來自手機(jī) | 顯示全部樓層
hejianmin 發(fā)表于 2021-8-29 18:32
使用定時器就可以了
sbit pwm_out =p1^2;
unsigned char tim_ji;

您這個做不到精確的發(fā)送  比如一秒發(fā)送12345個怎么處理 時間到剛好發(fā)完
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-29 22:55 來自手機(jī) | 顯示全部樓層
npn 發(fā)表于 2021-8-28 23:13
頻率范圍? 多少位的PWM?

我是看別人用89C51做出來了
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2021-8-30 00:20 | 顯示全部樓層
非凡科技 發(fā)表于 2021-8-28 20:18
這是一個同步調(diào)速,需要與主軸轉(zhuǎn)速同步調(diào)整,也就是主軸轉(zhuǎn)速快  伺服也要按比例加快

速度我知道可變
我問的是脈沖的高電平時間最短要維持多久
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2021-8-30 08:03 | 顯示全部樓層
非凡科技 發(fā)表于 2021-8-29 22:55
我是看別人用89C51做出來了

按控制頻率的范圍和精度要求做一個16位數(shù)組表格。計算方法:定時器周期=1/頻率/2。表格長度取決于頻率范圍和分辨率要求。定時器設(shè)置16位自動重裝模式,按需直接從數(shù)組取對應(yīng)數(shù)據(jù)賦值TH0、TL0重裝。STC15F104W完全可以勝任。

評分

參與人數(shù) 1黑幣 +10 收起 理由
非凡科技 + 10 很給力!

查看全部評分

回復(fù)

使用道具 舉報

ID:962962 發(fā)表于 2021-8-30 08:58 | 顯示全部樓層
網(wǎng)上有源碼 用主輔定時器
回復(fù)

使用道具 舉報

ID:959439 發(fā)表于 2021-8-30 09:01 | 顯示全部樓層
unsigned char time,duty;
sbit P0_0=P0∧0
void timer1() interrupt3
{
    time++;
    if(time==100)
    {
         time=0;
    }
    if(time>=duty)
        P0_0=1;
    else
        P0_0=0;
}
回復(fù)

使用道具 舉報

ID:935919 發(fā)表于 2021-8-30 09:05 | 顯示全部樓層
不知道我的理解是否正確:
1. 設(shè)置PWM的占空比及其頻率輸出是不難做到的(雖然我沒有用過此款芯片), 所以1s 發(fā)的脈沖數(shù)其實可以通過 設(shè)置PWM的頻率解決.
2. 麻煩的是1s發(fā)出的脈沖數(shù)要剛剛好, 不要多一個也不要少一個: 一個可能的思路是, PWM在設(shè)置頻率(周期的)時候, 同事啟用周期中斷---就是一個PWM周期中斷一次, 然后在中斷函數(shù)里面做個計數(shù)器, 如果1s的脈沖數(shù)量到了, 就停止或者切換PWM輸出(頻率), 有可能要注意是否提前一兩個周期操作, 這個可以實際調(diào).
至于你的芯片是否能夠在17K的頻率下, 完成這種操作, 就要你自己評估了.
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-8-30 22:57 | 顯示全部樓層
僅僅通過定時器,你要絕對的精準(zhǔn)是不可能的。
首先,STC15F104W,用的是內(nèi)部模擬晶振,本身就精度極低。其次,他的溫飄非常嚴(yán)重,同樣計時1小時,中午和夜里能相差超過20秒,所以,你真的需要精確的話,建議先換一個能外接晶振的單片機(jī)。
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-31 00:34 來自手機(jī) | 顯示全部樓層
wulin 發(fā)表于 2021-8-30 08:03
按控制頻率的范圍和精度要求做一個16位數(shù)組表格。計算方法:定時器周期=1/頻率/2。表格長度取決于頻率范 ...

試試謝謝老師指導(dǎo)
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-31 00:35 來自手機(jī) | 顯示全部樓層
lkc8210 發(fā)表于 2021-8-30 00:20
速度我知道可變
我問的是脈沖的高電平時間最短要維持多久

伺服十幾微秒應(yīng)該可以的
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-31 00:36 來自手機(jī) | 顯示全部樓層
§uperЦser 發(fā)表于 2021-8-30 09:01
unsigned char time,duty;
sbit P0_0=P0∧0
void timer1() interrupt3

謝謝指導(dǎo)
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-31 00:38 來自手機(jī) | 顯示全部樓層
sinside 發(fā)表于 2021-8-30 09:05
不知道我的理解是否正確:
1. 設(shè)置PWM的占空比及其頻率輸出是不難做到的(雖然我沒有用過此款芯片), 所以1s  ...

應(yīng)該芯片沒問題  我試過了極限能到390K  
回復(fù)

使用道具 舉報

ID:101869 發(fā)表于 2021-8-31 00:38 來自手機(jī) | 顯示全部樓層
188610329 發(fā)表于 2021-8-30 22:57
僅僅通過定時器,你要絕對的精準(zhǔn)是不可能的。
首先,STC15F104W,用的是內(nèi)部模擬晶振,本身就精度極低。其 ...

差幾十個脈沖沒事
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-8-31 02:33 | 顯示全部樓層

首先,精度肯定不高。
如果,高低電平占空比一樣的話,建議:
直接拿時鐘數(shù)(如24Mhz)/2/要發(fā)的脈沖數(shù),賦值給TH0,TL0,T0也不要用中斷方式翻轉(zhuǎn)了IO了,直接用T0CLK_OUT, 來輸出時鐘, T2 計時 1秒(這個總會吧?12T模式, 定時 31.25ms, 累加32次就是一秒)滿1秒關(guān)閉TR0,
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2021-8-31 10:22 | 顯示全部樓層
非凡科技 發(fā)表于 2021-8-31 00:35
伺服十幾微秒應(yīng)該可以的

那就當(dāng)作20us吧
  1. #include <STC15F2K60S2.H>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 — 65535
  4. typedef         unsigned long        u32;  //0 — 4294967295
  5. sbit Pulse_Out = P3^7;
  6. u16 Pulse_Count, Pulse_Count_Max = 10;
  7. void Timer1Init(void)                //10us@12.000MHz
  8. {
  9.         AUXR |= 0x40;                //Timer clock is 1T mode
  10.         TMOD &= 0x0F;                //Set timer work mode
  11.         TMOD |= 0x20;                //Set timer work mode
  12.         TL1 = 0x88;                //Initial timer value
  13.         TH1 = 0x88;                //Set reload value
  14.         TF1 = 0;                //Clear TF1 flag
  15.         TR1 = 1;                //Timer1 start run
  16. }

  17. void timer1_int (void) interrupt 3  //10us@12.000MHz
  18. {
  19.                 Pulse_Out = (Pulse_Count < 2);  //20us 高電平
  20.                 if(Pulse_Count<Pulse_Count_Max)
  21.                 {
  22.                         Pulse_Count++;
  23.                 }else{
  24.                         Pulse_Count=0;
  25.                 }       
  26. }
復(fù)制代碼


其中最重要的就是計算Pulse_Count_Max
如要模擬每秒1千脈沖,即1kHz
Pulse_Count_Max就等于1000000us/1000/10us =100
如要模擬每秒5千脈沖,即5kHz
Pulse_Count_Max就等于1000000us/5000/10us =20
但Pulse_Count_Max是由零開始的,所以要減一
即1kHz:Pulse_Count_Max =99
即5kHz:Pulse_Count_Max =19

評分

參與人數(shù) 1黑幣 +10 收起 理由
非凡科技 + 10 很給力!

查看全部評分

回復(fù)

使用道具 舉報

ID:592807 發(fā)表于 2021-8-31 16:59 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-8-29 18:12
PWMIF是中斷標(biāo)志寄存器,可以在PWM計數(shù)器歸零時產(chǎn)生中斷,打開這個中斷充許就可以在每個歸零時進(jìn)入中斷,你在 ...

樓主要的是模擬PWM不是硬件PWM,模擬PWM就是手動控制IO口輸出高低電平,一般的做法定時器控制IO輸出高低電平。
回復(fù)

使用道具 舉報

ID:130230 發(fā)表于 2021-8-31 18:13 | 顯示全部樓層
用定時器中斷完全可行,自己提前計算好各個占空比的定時器重裝載值。到時候查表重新賦值即可。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线视频三区 | 羞羞网站在线观看 | 91看片免费版 | 国产欧美一区二区三区免费 | 手机在线观看av | 久草综合在线视频 | 日韩www | 不卡一区二区在线观看 | 91极品视频 | 欧美日韩一区二区三区四区五区 | 久久久精彩视频 | 中文字幕日韩欧美 | 中文字幕av网站 | 蜜桃av鲁一鲁一鲁一鲁 | 日韩欧美三级电影 | 日韩欧美在线播放 | 久久精品亚洲成在人线av网址 | 草草精品 | 一呦二呦三呦国产精品 | 色婷婷婷婷色 | 91精品久久久久久久 | 国产福利观看 | 久久久久久久久久久福利观看 | av一级久久| 国产精品99 | 亚洲码欧美码一区二区三区 | 亚洲精品成人在线 | 国产精品久久国产精品 | 免费一区二区三区 | 久久69精品久久久久久久电影好 | 欧洲亚洲精品久久久久 | 国产性生活一级片 | 国产真实乱全部视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久国产精品无码网站 | 久久免费视频在线 | 国产sm主人调教女m视频 | 午夜大片 | 国产高清在线观看 | 国产精品久久久久久中文字 | 久草精品视频 |