欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3398|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

請教關(guān)于STC8H單片機(jī)比較輸出PWM的疑問

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:159419 發(fā)表于 2022-11-11 14:17 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
各位大佬我又來了,這次是遇到的問題是這樣,使用比較器輸出固定的頻率和占空比驅(qū)動(dòng)舵機(jī),按照查到的資料設(shè)置頻率和占空比后舵機(jī)只有在2.5%,10%的時(shí)候才會動(dòng),而且動(dòng)的角度也有問題,按照舵機(jī)的資料對應(yīng)的占空比應(yīng)該是0.5MS->25%, 1MS->5%, 1.5ms->7.5%,2MS->10%,2.5MS->12.5%,由于才開始摸這個(gè)芯片不是很了解,請各位大佬賜教。頻率設(shè)置的是20毫秒,單片機(jī)程序如下:

#include "STC8H.h"
void pwma_init(unsigned long f_pwm_set);
void main()
{
   pwma_init(480000);  //  24M,設(shè)置50HZ頻率(24000000)*(1/50) = 480000
        
        while(1)
        {
         }
}

void CH1_PWM_SET(unsigned long f_set_ch1,float duty_ch1)  //設(shè)置占空比
{
  float a;
        a = duty_ch1 * f_set_ch1;
        P_SW2 |= 0x80;
        PWMA_CCR1H = ((unsigned int)(a))/256;
        PWMA_CCR1L = ((unsigned int)(a))%256;
        PWMA_CCMR1 = 0x60;
        PWMA_CCER1 &= 0xFD;
        PWMA_CCER1 |= 0x01;
        PWMA_OISR |=0x01;
        PWMA_ENO |= 0x01;
        P_SW2 &= 0x7f;
}

void pwma_init(unsigned long f_pwm_set)  //頻率設(shè)置
{
  P1M0 = 0xfe;
        P1M1 = 0xfe;
        
        P_SW2 |= 0x80;
        PWMA_CR1 &=0xfe;
        PWMA_ARRH = f_pwm_set/256;
        PWMA_ARRL = f_pwm_set%256;
        PWMA_CR1 &= 0x8f;
        P_SW2 &= 0x7f;
        
        CH1_PWM_SET(f_pwm_set,2.5);  占空比2.5%
        
        P_SW2 |= 0x80;
        PWMA_BKR = 0x80;
        PWMA_CR1 |= 0x01;
        P_SW2 &= 0x7F;
}


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

使用道具 舉報(bào)

沙發(fā)
ID:159419 發(fā)表于 2022-11-11 14:33 | 只看該作者
后來用定時(shí)器的方法測試了下是沒有問題的,看來應(yīng)該是頻率或者占空比設(shè)置的地方有問題,請各位大佬幫忙看看是哪里出了問題
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2022-11-11 17:29 | 只看該作者








CCR = 20352
ARR = 13568
PWM Hz = 24000000/20353 = 1179 Hz
PWM % = 13568/20353 = 66.66%
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2022-11-13 17:15 | 只看該作者
更正
回復(fù)

使用道具 舉報(bào)

5#
ID:159419 發(fā)表于 2022-11-15 15:07 | 只看該作者
大佬,感謝之前的解答,我根據(jù)這個(gè)思路重新改寫了程序,但是還是無法達(dá)到效果,我把程序貼上來,注釋部分是我根據(jù)查到資料的理解,麻煩幫忙看看是哪里有問題

P1M0 = 0XFE;
        P1M1 = 0XFE;
       
         CLKDIV = 0x18;     //主時(shí)鐘24M, 24分頻使用1M時(shí)鐘作為計(jì)數(shù)器時(shí)鐘

  P_SW2 |= 0X80;
        PWMA_CR1 &= 0XFE;   //關(guān)閉計(jì)數(shù)器   
        PWMA_ARRH = 0X4E;   //20000轉(zhuǎn)16進(jìn)制為4E20    ARR的值為一個(gè)PWM的周期長度
        PWMA_ARRL = 0X20;
        PWMA_CR1 &= 0X8F;  //向上計(jì)數(shù),邊沿對齊

        PWMA_CCR1H = 0X0f;   //4000轉(zhuǎn)16進(jìn)制為FA0,  CCR的值為周期內(nèi)高電平的時(shí)間
        PWMA_CCR1L = 0Xa0;   
        PWMA_CCMR1 = 0x60;   //PWM1模式
        PWMA_CCER1 |= 0XFD;  //信號高電平有效
        PWMA_CCER1 &= 0X01; //使能0C1輸出
        PWMA_OISR |= 0X01;    //空閑狀態(tài)輸出高電平
        PWMA_ENO |= 0X01;     //使能PWM1P輸出
         
        PWMA_BKR = 0X80;      //開啟使能總開關(guān)
        PWMA_CR1 |= 0X01;   //打開計(jì)數(shù)器
        P_SW2 &= 0X7F;
}

//  1000000/20000 = 50HZ
//   4000/20000 = 20%
回復(fù)

使用道具 舉報(bào)

6#
ID:1088441 發(fā)表于 2023-7-14 09:52 | 只看該作者
樓主想問你這個(gè)PWM是設(shè)置的哪路輸出呀,我在stc8h上設(shè)置P5.4輸出PWM實(shí)現(xiàn)不了嘞
回復(fù)

使用道具 舉報(bào)

7#
ID:1034262 發(fā)表于 2023-7-14 16:58 | 只看該作者
示波器看過信號嗎?
回復(fù)

使用道具 舉報(bào)

8#
ID:427868 發(fā)表于 2023-7-17 18:18 | 只看該作者
樓主的程序中沒見設(shè)置分頻寄存器_PSCR,也就是說PWM沒有分頻,在24MHZ時(shí)鐘下,16位的ARR(ARRH+  ARRL)最大數(shù)值為65536,PWM最長周期是2.73ms.如果想得到20ms的周期,必須分頻才行。480000的數(shù)值已經(jīng)超過16位了,賦值給ARRHE CCER,會溢出的。
回復(fù)

使用道具 舉報(bào)

9#
ID:427868 發(fā)表于 2023-7-17 18:32 | 只看該作者
shendu0900 發(fā)表于 2022-11-15 15:07
大佬,感謝之前的解答,我根據(jù)這個(gè)思路重新改寫了程序,但是還是無法達(dá)到效果,我把程序貼上來,注釋部分是 ...

你修改的這個(gè)雖然設(shè)置了 CLKDIV,欲降低系統(tǒng)時(shí)鐘,但P_SW2 |= 0X80;沒有寫在CLKDIV(地址FE01H)之前,會導(dǎo)致無法給CLKDIV賦值的,也就是初始化時(shí)系統(tǒng)時(shí)鐘分頻無效,仍然是24MHZ的時(shí)鐘。從運(yùn)行速度考慮,不建議那么低的系統(tǒng)時(shí)鐘,只需分頻PWM時(shí)鐘即可。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表