標題: 關于8系PWM輸出設置 STC8H1K08單片機 [打印本頁]
作者: happy2058 時間: 2023-4-6 20:23
標題: 關于8系PWM輸出設置 STC8H1K08單片機
選用的單片機芯片8H1K08,只有定時器0,1,2 。 用了兩路串口分別是57600,9600.一個接屏幕,一個接讀卡器。占用兩個定時器,最后一個定時器用了計時和別的功能,現在還需要一路IO口輸出PWM功能,周期100us ,10us~20us可調,只能用硬件了。對著例程弄了一天了。沒輸出。IO我已經切換了,下面是我改的。還有時鐘也沒弄好。
void TxPulse()
{
P_SW2 = 0x80;
PWMA_CCER2 = 0x00; //寫CCMRx前必須先清零CCERx關閉通道
PWMA_CCMR4 = 0x60; //設置CC為PWMA輸出模式
PWMA_CCER2 = 0x10; //使能CC通道
PWMA_CCR4 = 100; //設置占空比時間
PWMA_ARR = 500; //設置周期時間
PWMA_ENO = 0x80; //使能PWM4N端口輸出
PWMA_BKR = 0x80; //使能主輸出
PWMA_CR1 = 0x01; //開始計時
}
51hei圖片_20230406201951.png (70.38 KB, 下載次數: 66)
下載附件
2023-4-6 20:20 上傳
用的是PWM4N_2 P3.3
作者: 劉佑紅 時間: 2023-6-15 23:02
我也正在試驗它,也是P3.3輸出,我覺得例程是PWM1P腳輸出的,要用PWMA通道4在P3.3輸出,還需定義輸出腳才行,所以在例程的基礎上增加了:PWMA_PS = 0xC0; //使能PWM4N端口選在P3.3(14腳),甚至還要改定義PWMA_CCER4和PWMA_CCMR4,但是否可以輸出,還沒有測試。
void pwmout(u16 zhankong)
{
P_SW2 |= 0x80; //使能XFR
PWMA_CCER1 = 0x00; //寫CCMRx前必須先清零CCERx關閉通道
PWMA_CCMR1 = 0x60; //設置CC1為PWMA輸出模式
PWMA_CCER1 = 0x01; //使能CC1通道
PWMA_CCR1 = zhankong; //設置占空比時間
PWMA_ARR = 99; //設置周期時間24MHZ時,PWM輸出120KHZ
PWMA_ENO = 0x80; //使能PWM4N端口輸出
PWMA_PS = 0xC0; //使能PWM4N端口選在P3.3(14腳)
PWMA_BKR = 0x80; //使能主輸出
PWMA_CR1 = 0x01; //開始計時
}
作者: zxq9781 時間: 2023-6-21 22:47
io要配置推挽輸出
作者: 1241526990 時間: 2023-6-24 02:55
有些型號默認輸出高阻態,不知道你設置沒
還需要用輔助寄存器切換IO口
可以參考PCA相關例程
作者: 劉佑紅 時間: 2023-6-25 18:33
是設置的問題,以下我測試輸出正常,占空比符合設置預期。輸出端口也是P3.3
include<stc8h.h> //STC8H1K08 TSSOP20
sbit out = P3^3; //電機PWM信號輸出
/*************************主函數**********************************/
void main()
{
P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x08; P3M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P_SW2 = 0x80;
PWMB_CCER2 = 0x00; //寫CCMRx前必須先清零CCERx關閉通道
PWMB_CCMR3= 0x60; //設置CC7為PWMA輸出模式
PWMB_CCER2 = 0x01; //使能CC7通道
PWMB_CCR7 = 5; //設置占空比時間
PWMB_ARR = 999; //設置周期時間
PWMB_ENO = 0x10; //使能PWM7端口輸出
PWMB_PS = 0x10; //PWM7在P3.3輸出
PWMB_BKR = 0x80; //使能主輸出
PWMB_CR1 = 0x01; //開始計時
while (1);
}
作者: coody_sz 時間: 2023-6-25 19:57
建議先測試STC官方的例程,然后再修改移植。
作者: Aresxiaogui 時間: 2023-7-14 09:39
為什么我用這段代碼在keil上進行軟件仿真時P3.3一直輸出的是高電平呢
作者: Aresxiaogui 時間: 2023-7-14 09:42
樓主搞定了嗎,我用P5.4想輸出PWM也一直輸出不了
作者: 劉佑紅 時間: 2023-7-17 21:02
剛測,正常輸出可調PWM,ARR和CCR采用預裝載方式,在使用中可隨時改變,寄存器初始化可參照設置。采用的STC8H1K16,P2.7腳輸出(PWM4N)
P_SW2 |= 0x80; //開啟P_SW2寄存器1000 0000
PWMA_CCER2 = 0x00; //寫CCMRx前必須先清零CCERx關閉通道
PWMA_CCMR4 = 0x68; //設置CC4為PWM輸出模式,開啟預裝載CCR4 0110 1000
//PWMA_CCMR4 = 0x78; //設置CC4為PWM輸出模式,開啟預裝載CCR4 0111 1000(負極性輸出)
PWMA_CCER2 = 0x40; //0100 0000單獨使能CC4N通道(不開CC4P),輸出高電平
PWMA_CCR4 = 2500; //設置占空比時間
PWMA_ARR = 5000; //設置周期時間
PWMA_PS = 0x40; //PWM4N在P2.7輸出0100 0000
PWMA_ENO = 0x80; //使能PWM4N端口輸出1000 0000
PWMA_BKR = 0x80; //使能主輸出1000 0000
PWMA_CR1 = 0x81; //開始計時 1000 0001開啟自動預裝載PWMA_ARR
作者: Aresxiaogui 時間: 2023-7-18 09:29
請問你的頻率設置的多少呢,為什么我用你這個改一下在P54口輸出就沒有效果呢
作者: 劉佑紅 時間: 2023-7-18 10:35
我的PWM輸出頻率范圍是1-25KHZ(由外部電壓改變頻率),系統是12MHZ,PWM時鐘不分頻。STC8H1K08的P5.4是PWM6口輸出,相應的寄存器需作對應修改。
作者: 劉佑紅 時間: 2023-7-18 11:45
STC8H單片機PWM的寄存器太多,且有些寄存器的功能看著比較相似,手冊介紹的也不太清楚,難以區別,設置起來非常困難,我前前后后閱讀器多次并反復設置測試,PWM才正常,但其捕捉功能我現在還沒明白。
樓主的PWM沒有輸出,我在STC8H1K16的4N已輸出正常,頻率和占空比按照預設要求輸出,經對比發現對寄存器的設置有以下不同:
51hei圖片_20230718110234.png (18.37 KB, 下載次數: 47)
下載附件
2023-7-18 11:37 上傳
1. PWMA_CCMR4。 樓主設置 0x60=0110 0000,我設置的是0x68=0110 1000,我與樓主相比是多開啟了占空比數值預裝載功能。官方的例程僅是輸出PWM測試,不改變占空比CCR和計數周期ARR的數值,所以官方例程沒有開啟占空比和計數周期預裝載功能,在實際應用時大都需要是是調整占空比和頻率,更改預裝載值,故大多數情況下是開啟。
2. PWMA_CCER2。樓主設置0x10=0001 0000,使B4位的CC4E=1,開啟的是4P比較功能,我設置的是0x40=0100 0000,使B6位的CC4NE=1,開啟的是4N比較功能。
我們開啟的是4N功能,故PWMA_CCER2應該設置為0x40才行。
3.樓主沒有設置PWMA_PS,即PWMA_PS是復位值0x00,其設置為4N在P1.7腳輸出;我設置PWMA_PS = 0x40=0100 0000,設置4N在P2.7腳輸出。樓主的是STC8H1K08,4N欲在P3.3輸出,設置PWMA_PS= 0xC0才行(11000000)。
4.PWMA_CR1。區別同1,我是開啟了ARR預裝載功能。
作者: coco1016 時間: 2023-8-5 08:31
說得很詳細,剛好有個項目要用,參考下,謝謝
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |