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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6176|回復: 25
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
ID:101869 發表于 2021-8-28 18:11 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
使用STC15F104W 定時器模擬PWM,需要精確到控制頻率,也就是指定一個脈沖數,一秒時間到脈沖正好發完。求個思路!謝謝大家!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2021-8-28 19:52 來自觸屏版 | 只看該作者
要多快? 脈沖高電平時間是固定還是可變?
回復

使用道具 舉報

板凳
ID:101869 發表于 2021-8-28 20:18 來自觸屏版 | 只看該作者
lkc8210 發表于 2021-8-28 19:52
要多快? 脈沖高電平時間是固定還是可變?

這是一個同步調速,需要與主軸轉速同步調整,也就是主軸轉速快  伺服也要按比例加快
回復

使用道具 舉報

地板
ID:302400 發表于 2021-8-28 21:37 | 只看該作者
非凡科技 發表于 2021-8-28 20:18
這是一個同步調速,需要與主軸轉速同步調整,也就是主軸轉速快  伺服也要按比例加快





那是閉環控制,可不是簡簡單單的PWM
回復

使用道具 舉報

5#
ID:57657 發表于 2021-8-28 23:13 | 只看該作者
頻率范圍? 多少位的PWM?
回復

使用道具 舉報

6#
ID:101869 發表于 2021-8-29 07:50 來自觸屏版 | 只看該作者
npn 發表于 2021-8-28 23:13
頻率范圍? 多少位的PWM?

只求思路  頻率17K左右
回復

使用道具 舉報

7#
ID:401564 發表于 2021-8-29 18:12 | 只看該作者
PWMIF是中斷標志寄存器,可以在PWM計數器歸零時產生中斷,打開這個中斷充許就可以在每個歸零時進入中斷,你在中斷程序中每次加1不就可以了嗎?使用完之后再把加1的歸零就可以了
數據手冊中是有說明的,你認真看一下
這STC的PWM數據手冊太多了,用不著的話,我都不想看.....
回復

使用道具 舉報

8#
ID:57657 發表于 2021-8-29 18:28 | 只看該作者
非凡科技 發表于 2021-8-29 07:50
只求思路  頻率17K左右

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

使用道具 舉報

9#
ID:342954 發表于 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;
}

}
回復

使用道具 舉報

10#
ID:101869 發表于 2021-8-29 22:54 來自觸屏版 | 只看該作者
hejianmin 發表于 2021-8-29 18:32
使用定時器就可以了
sbit pwm_out =p1^2;
unsigned char tim_ji;

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

使用道具 舉報

11#
ID:101869 發表于 2021-8-29 22:55 來自觸屏版 | 只看該作者
npn 發表于 2021-8-28 23:13
頻率范圍? 多少位的PWM?

我是看別人用89C51做出來了
回復

使用道具 舉報

12#
ID:161164 發表于 2021-8-30 00:20 | 只看該作者
非凡科技 發表于 2021-8-28 20:18
這是一個同步調速,需要與主軸轉速同步調整,也就是主軸轉速快  伺服也要按比例加快

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

使用道具 舉報

13#
ID:213173 發表于 2021-8-30 08:03 | 只看該作者
非凡科技 發表于 2021-8-29 22:55
我是看別人用89C51做出來了

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

評分

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

查看全部評分

回復

使用道具 舉報

14#
ID:962962 發表于 2021-8-30 08:58 | 只看該作者
網上有源碼 用主輔定時器
回復

使用道具 舉報

15#
ID:959439 發表于 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;
}
回復

使用道具 舉報

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

使用道具 舉報

17#
ID:624769 發表于 2021-8-30 22:57 | 只看該作者
僅僅通過定時器,你要絕對的精準是不可能的。
首先,STC15F104W,用的是內部模擬晶振,本身就精度極低。其次,他的溫飄非常嚴重,同樣計時1小時,中午和夜里能相差超過20秒,所以,你真的需要精確的話,建議先換一個能外接晶振的單片機。
回復

使用道具 舉報

18#
ID:101869 發表于 2021-8-31 00:34 來自觸屏版 | 只看該作者
wulin 發表于 2021-8-30 08:03
按控制頻率的范圍和精度要求做一個16位數組表格。計算方法:定時器周期=1/頻率/2。表格長度取決于頻率范 ...

試試謝謝老師指導
回復

使用道具 舉報

19#
ID:101869 發表于 2021-8-31 00:35 來自觸屏版 | 只看該作者
lkc8210 發表于 2021-8-30 00:20
速度我知道可變
我問的是脈沖的高電平時間最短要維持多久

伺服十幾微秒應該可以的
回復

使用道具 舉報

20#
ID:101869 發表于 2021-8-31 00:36 來自觸屏版 | 只看該作者
§uperЦser 發表于 2021-8-30 09:01
unsigned char time,duty;
sbit P0_0=P0∧0
void timer1() interrupt3

謝謝指導
回復

使用道具 舉報

21#
ID:101869 發表于 2021-8-31 00:38 來自觸屏版 | 只看該作者
sinside 發表于 2021-8-30 09:05
不知道我的理解是否正確:
1. 設置PWM的占空比及其頻率輸出是不難做到的(雖然我沒有用過此款芯片), 所以1s  ...

應該芯片沒問題  我試過了極限能到390K  
回復

使用道具 舉報

22#
ID:101869 發表于 2021-8-31 00:38 來自觸屏版 | 只看該作者
188610329 發表于 2021-8-30 22:57
僅僅通過定時器,你要絕對的精準是不可能的。
首先,STC15F104W,用的是內部模擬晶振,本身就精度極低。其 ...

差幾十個脈沖沒事
回復

使用道具 舉報

23#
ID:624769 發表于 2021-8-31 02:33 | 只看該作者

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

使用道具 舉報

24#
ID:161164 發表于 2021-8-31 10:22 | 只看該作者
非凡科技 發表于 2021-8-31 00:35
伺服十幾微秒應該可以的

那就當作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. }
復制代碼


其中最重要的就是計算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

評分

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

查看全部評分

回復

使用道具 舉報

25#
ID:592807 發表于 2021-8-31 16:59 | 只看該作者
Y_G_G 發表于 2021-8-29 18:12
PWMIF是中斷標志寄存器,可以在PWM計數器歸零時產生中斷,打開這個中斷充許就可以在每個歸零時進入中斷,你在 ...

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

使用道具 舉報

26#
ID:130230 發表于 2021-8-31 18:13 | 只看該作者
用定時器中斷完全可行,自己提前計算好各個占空比的定時器重裝載值。到時候查表重新賦值即可。
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品福利视频一区二区三区 | 国产一区免费 | 国产无人区一区二区三区 | 日韩aⅴ片 | 中文字幕一区二区三区四区不卡 | 欧美精品在线免费观看 | 亚洲国产成人精品一区二区 | 免费一看一级毛片 | 日韩欧美在线精品 | 国产一区二区精品在线观看 | 国产精品久久精品 | 久久午夜电影 | 欧美日韩在线免费观看 | 亚洲人成人一区二区在线观看 | 免费在线一区二区 | www312aⅴ欧美在线看 | 亚洲一区二区三区在线视频 | 午夜视频在线观看视频 | 日日夜夜91 | 欧美日韩国产一区二区三区 | 日韩成人免费 | 成人国产精品久久 | 国产精品99免费视频 | 成人国产精品久久 | 日韩视频一区二区 | 欧美激情一区二区三区 | a网站在线观看 | 久久网一区二区三区 | 国产农村妇女毛片精品久久麻豆 | 99热首页| 91精品国产综合久久久动漫日韩 | 国产欧美一区二区三区免费 | 国产精品乱码一区二三区小蝌蚪 | 亚洲精品一区在线观看 | 97热在线| 久久黄色精品视频 | 国产精品久久久久久久7电影 | 老司机深夜福利网站 | 男女视频在线观看免费 | 欧美精品在线免费观看 | 久久1区|