欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STC8H8K64 PWM互補輸出3路信號
[打印本頁]
作者:
huxingjie9
時間:
2025-11-5 16:45
標題:
STC8H8K64 PWM互補輸出3路信號
#include "STC8H.h"
// 定義 PWM 引腳(主通道和互補通道)
sbit PWM1_OUT = P3^0; // 主 PWM1
sbit PWM1B_OUT = P3^1; // 互補 PWM1
sbit PWM2_OUT = P3^2; // 主 PWM2
sbit PWM2B_OUT = P3^3; // 互補 PWM2
sbit PWM3_OUT = P3^4; // 主 PWM3
sbit PWM3B_OUT = P3^5; // 互補 PWM3
// PWM 占空比(0~255,8位PWM)
unsigned char PWM1_Duty = 128; // 50% 占空比
unsigned char PWM2_Duty = 128;
unsigned char PWM3_Duty = 128;
// 死區時間(單位:us,需根據實際需求調整)
#define DEAD_TIME 2 // 2us 死區
// 延時函數(微秒級,根據系統時鐘調整)
void DelayUs(unsigned int us) {
while(us--);
}
// 初始化 PCA 模塊為 8 位 PWM 模式
void PCA_Init() {
PCA_PWM0 = 0x00; // 通道0:8位PWM,無相位反轉
PCA_PWM1 = 0x00; // 通道1:8位PWM,無相位反轉
PCA_PWM2 = 0x00; // 通道2:8位PWM,無相位反轉
// 設置 PCA 時鐘源:系統時鐘/12(假設系統時鐘11.0592MHz,PWM頻率≈11.0592MHz/(12*256)≈3.58kHz)
PCA_CLK = 0x02; // 時鐘源選擇:SYSclk/12
// 設置初始占空比
PCA0 = 255 - PWM1_Duty; // 8位PWM:占空比 = (255 - PCAx)/256
PCA1 = 255 - PWM2_Duty;
PCA2 = 255 - PWM3_Duty;
// 使能 PCA 中斷和模塊
EA = 1; // 總中斷使能
EPCA = 1; // PCA 中斷使能
PCA_RUN = 1; // 啟動 PCA 計數器
}
// PCA 中斷服務函數(處理互補輸出和死區)
void PCA_ISR() interrupt 7 {
// 清除中斷標志
if (CCF0) CCF0 = 0; // 通道0中斷標志
if (CCF1) CCF1 = 0; // 通道1中斷標志
if (CCF2) CCF2 = 0; // 通道2中斷標志
// 讀取當前主 PWM 狀態(高/低電平)
bit pwm1_state = PWM1_OUT;
bit pwm2_state = PWM2_OUT;
bit pwm3_state = PWM3_OUT;
// 生成互補 PWM(帶死區)
// 1. 主 PWM 為高電平時,互補 PWM 先關斷,延時死區后再開低電平
// 2. 主 PWM 為低電平時,互補 PWM 先關斷,延時死區后再開高電平
// 處理 PWM1 互補
PWM1B_OUT = 0; // 先關斷互補通道
DelayUs(DEAD_TIME); // 死區延時
PWM1B_OUT = !pwm1_state;// 互補輸出
// 處理 PWM2 互補
PWM2B_OUT = 0;
DelayUs(DEAD_TIME);
PWM2B_OUT = !pwm2_state;
// 處理 PWM3 互補
PWM3B_OUT = 0;
DelayUs(DEAD_TIME);
PWM3B_OUT = !pwm3_state;
}
void main() {
PCA_Init();
while(1) {
// 可在此動態調整占空比(示例:固定占空比)
// PWM1_Duty = ...;
// PCA0 = 255 - PWM1_Duty;
}
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1