본문으로 건너뛰기

tkl pwm | PWM 드라이버

TKL PWM 공용영역은 하드웨어 수로에 맥박 폭 산출한 신호를 생성하고 입력 붙잡음을 통해서 맥박 타이밍 뒤를 읽습니다. 수로의 극성, 의무 주기 및 빈도를 구성하고, 그 후에 시작, 조정하고, 또는 런타임에 산출을 멈추십시오. 채널에 의해 주소TUYA_PWM_NUM_E, 시작TUYA_PWM_NUM_0.

PWM 신호는 높은 시간의 비율로 아날로그 가치를 ( 의무 주기) 암호로 합니다. 예를 들어, 10 ms 기간과 함께, 7 ms 높은 시간은 70% 듀티 사이클이며 4 ms 높은 시간은 40 % 듀티 사이클입니다. 의무 주기 조정은 효과적인 아날로그 산출을 변화합니다.

프로젝트

OPERATE_RET tkl_pwm_init(TUYA_PWM_NUM_E ch_id, const TUYA_PWM_BASE_CFG_T *cfg);

주어진 극성, 의무 주기 및 빈도를 가진 PWM 수로를 초기화하십시오.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 채널 인덱스, 시작TUYA_PWM_NUM_0.
cfgconst TUYA_PWM_BASE_CFG_T *채널 구성.

구성 구조는:

typedef struct {
TUYA_PWM_POLARITY_E polarity;
TUYA_PWM_COUNT_E count_mode;
// pulse duty cycle = duty / cycle; e.g. duty = 5000, cycle = 10000 -> 50%
uint32_t duty;
uint32_t cycle;
uint32_t frequency; // Hz
} TUYA_PWM_BASE_CFG_T;

polarity활성 수준 선택:

주요 특징이름 *
TUYA_PWM_NEGATIVE낮은 수준 산출
TUYA_PWM_POSITIVE높은 수준의 출력

count_mode카운터 모드 선택:

주요 특징이름 *
TUYA_PWM_CNT_UP계산 (과태)
TUYA_PWM_CNT_UP_AND_DOWNUp-and-down 계산, 보완 이중 모드

duty이름 *cycle의무 비율을 것과 같이 놓으십시오duty / cycle. frequencyHz에서 출력 주파수입니다.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

프로젝트

OPERATE_RET tkl_pwm_deinit(TUYA_PWM_NUM_E ch_id);

PWM 채널을 분리합니다. 지속적인 출력을 중지하고 채널의 소프트웨어 및 하드웨어 리소스를 릴리스합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm 스타트

OPERATE_RET tkl_pwm_start(TUYA_PWM_NUM_E ch_id);

PWM 채널에서 출력을 시작합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm 스톱

OPERATE_RET tkl_pwm_stop(TUYA_PWM_NUM_E ch_id);

PWM 채널에 출력을 중지합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm multichannel start의

OPERATE_RET tkl_pwm_multichannel_start(TUYA_PWM_NUM_E *ch_id, uint8_t num);

동기화된 결합된 산출을 위해 몇몇 PWM 수로를, 엄격한 타이밍 필요조건을 가진 케이스를 위해 시작하십시오.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_E *시작하려면 채널 인덱스의 배열.
numuint8_t배열의 수로.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm multichannel stop에

OPERATE_RET tkl_pwm_multichannel_stop(TUYA_PWM_NUM_E *ch_id, uint8_t num);

몇몇 PWM 수로를 함께 멈추십시오.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_E *채널 인덱스의 배열을 중지합니다.
numuint8_t배열의 수로.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

프로젝트

OPERATE_RET tkl_pwm_duty_set(TUYA_PWM_NUM_E ch_id, uint32_t duty);

채널의 의무 주기를 설정합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
dutyuint32_t의무 주기, 사용duty / cycle.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm frequency set에

OPERATE_RET tkl_pwm_frequency_set(TUYA_PWM_NUM_E ch_id, uint32_t frequency);

채널의 출력 주파수를 설정합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
frequencyuint32_tHz에서 출력 주파수.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm polarity set의 경우

OPERATE_RET tkl_pwm_polarity_set(TUYA_PWM_NUM_E ch_id, TUYA_PWM_POLARITY_E polarity);

채널의 출력 극성을 설정합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
polarityTUYA_PWM_POLARITY_ETUYA_PWM_NEGATIVE또는TUYA_PWM_POSITIVE.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm info set의 설정

OPERATE_RET tkl_pwm_info_set(TUYA_PWM_NUM_E ch_id, const TUYA_PWM_BASE_CFG_T *info);

채널의 전체 구성을 대체, 그래서 당신은 극성, 의무 주기를 변경할 수 있습니다, 런타임에 주파수 및 채널을 다시 시작.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
infoconst TUYA_PWM_BASE_CFG_T *새로운 채널 구성 (see)tkl_pwm_init).

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm info get의 경우

OPERATE_RET tkl_pwm_info_get(TUYA_PWM_NUM_E ch_id, TUYA_PWM_BASE_CFG_T *info);

채널의 현재 구성을 읽습니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
infoTUYA_PWM_BASE_CFG_T *산출: 수로 윤곽.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm cap 스타트

OPERATE_RET tkl_pwm_cap_start(TUYA_PWM_NUM_E ch_id, const TUYA_PWM_CAP_IRQ_T *cfg);

채널에 PWM 입력 캡처 모드를 시작, 입력 신호에 펄스 타이밍 측정.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.
cfgconst TUYA_PWM_CAP_IRQ_T *캡처 구성.

캡처 구성 구조는:

typedef struct {
TUYA_PWM_CAPTURE_MODE_E cap_mode; // capture mode
TUYA_PWM_POLARITY_E trigger_level; // trigger edge
uint32_t clk; // sampling rate of the capture signal
TUYA_PWM_IRQ_CB cb; // capture callback
void *arg; // argument passed to the callback
} TUYA_PWM_CAP_IRQ_T;

cap_mode캡처 모드 선택:

주요 특징이름 *
TUYA_PWM_CAPTURE_MODE_ONCE단일 트리거
TUYA_PWM_CAPTURE_MODE_PERIOD공급 업체

trigger_level트리거 가장자리를 선택합니다:

주요 특징이름 *
TUYA_PWM_NEGATIVE연락처
TUYA_PWM_POSITIVE연락처

clk캡처된 신호를 위한 샘플링 시계입니다.cb캡처 콜백이며,arg그것을 통과:

typedef void (*TUYA_PWM_IRQ_CB)(TUYA_PWM_NUM_E port, TUYA_PWM_CAPTURE_DATA_T data, void *arg);

typedef struct {
uint32_t cap_value; // captured data
TUYA_PWM_POLARITY_E cap_edge; // capture edge: TUYA_PWM_NEGATIVE = falling, TUYA_PWM_POSITIVE = rising
} TUYA_PWM_CAPTURE_DATA_T;

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

tkl pwm cap 스톱

OPERATE_RET tkl_pwm_cap_stop(TUYA_PWM_NUM_E ch_id);

채널에서 PWM 입력 캡처 모드를 중지합니다.

제품 설명제품정보이름 *
ch_idTUYA_PWM_NUM_EPWM 수로 색인.

**리턴 **OPRT_OK성공에. 다른 값의 경우, 참조tuya_error_code.h.

이름 *

50% 의무 주기 산출을 시작하십시오, 런타임에 의무 주기를 조정하고, 그 때 정지하고 수로를 deinitialize:

void tuya_pwm_test(void)
{
OPERATE_RET ret;
TUYA_PWM_BASE_CFG_T cfg = {
.polarity = TUYA_PWM_POSITIVE,
.duty = 1000,
.cycle = 10000,
.frequency = 1000,
};

ret = tkl_pwm_init(TUYA_PWM_NUM_0, &cfg);
if (ret != OPRT_OK) {
return;
}

ret = tkl_pwm_start(TUYA_PWM_NUM_0);
if (ret != OPRT_OK) {
return;
}
tkl_system_delay(5000);

ret = tkl_pwm_info_get(TUYA_PWM_NUM_0, &cfg);
if (ret != OPRT_OK) {
return;
}
if (cfg.duty != 5000) {
cfg.duty = 5000;
}
ret = tkl_pwm_info_set(TUYA_PWM_NUM_0, &cfg);
tkl_system_delay(5000);

ret = tkl_pwm_stop(TUYA_PWM_NUM_0);
if (ret != OPRT_OK) {
return;
}
ret = tkl_pwm_deinit(TUYA_PWM_NUM_0);
if (ret != OPRT_OK) {
return;
}
}