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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2946|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久久久久久久久 | 九九爱这里只有精品 | 欧美精品在线播放 | a级片在线观看 | 在线成人av | 欧美日韩精品区 | 一区二区三区国产视频 | 成人超碰在线 | 精品三区| 欧美日韩中文字幕 | 人人人人干 | 日韩一区二区三区av | 亚州精品成人 | 一级片视频免费观看 | 久久婷婷国产 | 国产综合在线视频 | 欧美激情在线精品一区二区三区 | 国产日韩欧美一区二区在线播放 | 欧美亚洲在线视频 | 日本成人区 | 午夜免费精品视频 | 午夜精品| 午夜成人免费视频 | 亚洲一区二区三区四区五区中文 | 国产精品免费视频一区 | 国产精品一区三区 | a级片播放 | 精品免费国产一区二区三区四区介绍 | 午夜一区二区三区 | 亚洲国产一区二区三区在线观看 | 亚洲精品一区中文字幕乱码 | 亚洲一区二区在线播放 | 精品久久久久久久久久久 | 中文字幕亚洲精品 | yeyeav| 一区二区三区视频在线免费观看 | 日韩在线视频一区二区三区 | 国产精品成人一区二区三区夜夜夜 | 午夜电影日韩 | 午夜精品视频在线观看 | 日韩精品av一区二区三区 |