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

標題: 請教關于STC8H單片機比較輸出PWM的疑問 [打印本頁]

作者: shendu0900    時間: 2022-11-11 14:17
標題: 請教關于STC8H單片機比較輸出PWM的疑問
各位大佬我又來了,這次是遇到的問題是這樣,使用比較器輸出固定的頻率和占空比驅動舵機,按照查到的資料設置頻率和占空比后舵機只有在2.5%,10%的時候才會動,而且動的角度也有問題,按照舵機的資料對應的占空比應該是0.5MS->25%, 1MS->5%, 1.5ms->7.5%,2MS->10%,2.5MS->12.5%,由于才開始摸這個芯片不是很了解,請各位大佬賜教。頻率設置的是20毫秒,單片機程序如下:

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

void CH1_PWM_SET(unsigned long f_set_ch1,float duty_ch1)  //設置占空比
{
  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)  //頻率設置
{
  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;
}



作者: shendu0900    時間: 2022-11-11 14:33
后來用定時器的方法測試了下是沒有問題的,看來應該是頻率或者占空比設置的地方有問題,請各位大佬幫忙看看是哪里出了問題
作者: lkc8210    時間: 2022-11-11 17:29








CCR = 20352
ARR = 13568
PWM Hz = 24000000/20353 = 1179 Hz
PWM % = 13568/20353 = 66.66%

作者: lkc8210    時間: 2022-11-13 17:15
更正

作者: shendu0900    時間: 2022-11-15 15:07
大佬,感謝之前的解答,我根據(jù)這個思路重新改寫了程序,但是還是無法達到效果,我把程序貼上來,注釋部分是我根據(jù)查到資料的理解,麻煩幫忙看看是哪里有問題

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

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

        PWMA_CCR1H = 0X0f;   //4000轉16進制為FA0,  CCR的值為周期內(nèi)高電平的時間
        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;      //開啟使能總開關
        PWMA_CR1 |= 0X01;   //打開計數(shù)器
        P_SW2 &= 0X7F;
}

//  1000000/20000 = 50HZ
//   4000/20000 = 20%
作者: Aresxiaogui    時間: 2023-7-14 09:52
樓主想問你這個PWM是設置的哪路輸出呀,我在stc8h上設置P5.4輸出PWM實現(xiàn)不了嘞
作者: coody_sz    時間: 2023-7-14 16:58
示波器看過信號嗎?
作者: 劉佑紅    時間: 2023-7-17 18:18
樓主的程序中沒見設置分頻寄存器_PSCR,也就是說PWM沒有分頻,在24MHZ時鐘下,16位的ARR(ARRH+  ARRL)最大數(shù)值為65536,PWM最長周期是2.73ms.如果想得到20ms的周期,必須分頻才行。480000的數(shù)值已經(jīng)超過16位了,賦值給ARRHE CCER,會溢出的。
作者: 劉佑紅    時間: 2023-7-17 18:32
shendu0900 發(fā)表于 2022-11-15 15:07
大佬,感謝之前的解答,我根據(jù)這個思路重新改寫了程序,但是還是無法達到效果,我把程序貼上來,注釋部分是 ...

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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产免费又色又爽又黄在线观看 | 性一交一乱一伦视频免费观看 | 激情网站| 另类专区成人 | 亚洲免费大片 | 国产三区av | 91精品久久久 | 精品国产31久久久久久 | 久久精品欧美一区二区三区不卡 | 97国产精品视频人人做人人爱 | 国产一级久久久久 | 久久蜜桃av一区二区天堂 | 九九热在线免费观看 | 国产精品1区 | 国产高清视频一区二区 | 国产成人精品午夜视频免费 | 久久久久国产精品一区二区 | 羞羞视频免费在线 | 久久在线视频 | 亚洲欧美综合精品久久成人 | 99精品视频一区二区三区 | 国产精品视频一区二区三区, | 精品国产精品三级精品av网址 | 国产二区av | 国产一级成人 | 草久网 | 久久高清| 天天干天天玩天天操 | 日韩在线免费视频 | 国产精品久久 | 日本在线视频不卡 | 91色视频在线观看 | 国产精品揄拍一区二区久久国内亚洲精 | 韩国主播午夜大尺度福利 | 一区二区三区亚洲 | 国产精品日产欧美久久久久 | 国产成人精品一区二区 | 成人免费毛片在线观看 | 亚洲精品电影 | 亚洲二区视频 | 一区二区三区国产好 |