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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教關于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;
}


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

使用道具 舉報

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

使用道具 舉報

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








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

使用道具 舉報

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

使用道具 舉報

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

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

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

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

//  1000000/20000 = 50HZ
//   4000/20000 = 20%
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97色在线视频 | 免费看一级毛片 | 成人一区二区在线 | 国产在线看片 | 国产www在线 | 日韩在线播放一区 | 7777在线 | 欧美视频免费在线观看 | 中文字幕免费中文 | 一本色道久久综合亚洲精品高清 | 九九爱这里只有精品 | 亚洲一区中文字幕在线观看 | 秋霞影院一区二区 | 亚洲欧美日韩电影 | 伊人春色成人 | a国产一区二区免费入口 | 秋霞在线一区 | 欧美日日| 国产精品久久久久久久久久久久冷 | 91久久精品日日躁夜夜躁国产 | 久久一| 国产在线永久免费 | 91精品国产乱码久久久久久久久 | 成人午夜毛片 | 中文字幕乱码一区二区三区 | 91精品国产乱码久久久 | 亚洲国产中文在线 | 97av视频 | 国产精品污www一区二区三区 | 中文字幕一区在线 | 日韩视频一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | av片网 | 欧美国产视频 | 国产日韩91 | 国久久 | 亚洲精品九九 | 精品国产精品国产偷麻豆 | 成人免费视频 | 久久久久亚洲视频 | 成人午夜在线观看 |