PWM
简要说明
脉冲宽度调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
接口描述
csi_pwm_initialize
pwm_handle_t csi_pwm_initialize(uint32_t idx)
功能描述:
- 通过传入的idx号初始化对应的PWM控制器实例,返回控制器实例的句柄。
参数:
idx
: 设备号。
返回值:
NULL: 初始化失败。
其它: 实例句柄。
csi_pwm_uninitialize
void csi_pwm_uninitialize(pwm_handle_t handle)
功能描述:
- PWM实例反初始化。该接口会停止PWM实例正在进行的传输(如果有),并且释放相关的软硬件资源。
参数:
handle
: 实例句柄。
返回值:
- 无
csi_pwm_power_control
int32_t csi_pwm_power_control(pwm_handle_t handle, csi_power_stat_e state)
功能描述:
- PWM电源控制。
参数:
handle
: 实例句柄。state
: 设备实例的功耗模式,参看 csi_power_stat_e的定义。
返回值:
- 错误码。
csi_pwm_config
int32_t csi_pwm_config(pwm_handle_t handle,
uint8_t channel,
uint32_t period_us,
uint32_t pulse_width_us)
功能描述:
- 配置PWM channel通道的占空比。
参数:
handle
: 实例句柄。channel
: 通道号。period_us
: 一个周期时间(单位微秒)。pulse_width_us
: 一个高电平脉冲时间(单位微秒)。
返回值:
- 错误码。
csi_pwm_config_polarity
int32_t csi_pwm_config_polarity(pwm_handle_t handle,
uint8_t channel,
pwm_output_polarity_e polarity)
功能描述:
- 配置PWM 输出channel通道的极性。
参数:
handle
: 实例句柄。channel
: 通道号。pwm_output_polarity_e 定义。
返回值:
- 错误码。
pwm_output_polarity_e:
名字 | 定义 | 备注 |
---|---|---|
PWM_OUTPUT_POLARITY_LOW | 输出低电平 | |
PWM_OUTPUT_POLARITY_HIGH | 输出高电平 |
csi_pwm_config_deadzone
int32_t csi_pwm_config_deadzone(pwm_handle_t handle,
uint8_t channel,
uint32_t deadzone_us);
功能描述:
- 配置PWM channel通道的死区时长。
参数:
handle
: 实例句柄。channel
: 通道号。deadzone_us
: 死区时间(单位微秒)。
返回值:
- 错误码。
csi_pwm_start
void csi_pwm_start(pwm_handle_t handle, uint8_t channel)
功能描述:
- 开始产生信号。
参数:
handle
: 实例句柄。channel
: 通道号。
返回值:
- 无。
csi_pwm_stop
void csi_pwm_stop(pwm_handle_t handle, uint8_t channel)
功能描述:
- 停止产生信号。
参数:
handle
: 实例句柄。channel
: 通道号。
返回值:
- 无。
示例
PWM示例1
int32_t pwm_signal_test(uint32_t pwm_idx, uint8_t pwm_ch)
{
int32_t ret;
pwm_handle_t pwm_handle;
pwm_handle = csi_pwm_initialize(pwm_idx);
if (pwm_handle == NULL) {
printf("csi_pwm_initialize error\n");
return -1;
}
ret = csi_pwm_config(pwm_handle, pwm_ch, 3000, 1500);
if (ret < 0) {
printf("csi_pwm_config error\n");
return -1;
}
csi_pwm_start(pwm_handle, pwm_ch);
mdelay(20);
ret = csi_pwm_config(pwm_handle, pwm_ch, 200, 150);
if (ret < 0) {
printf("csi_pwm_config error\n");
return -1;
}
mdelay(20);
csi_pwm_stop(pwm_handle, pwm_ch);
csi_pwm_uninitialize(pwm_handle);
return 0;
}
int example_pwm(uint32_t pwm_idx, uint8_t pwm_pin)
{
int32_t ret;
ret = pwm_signal_test(pwm_idx, pwm_pin);
if (ret < 0) {
printf("pwm_signal_test error\n");
return -1;
}
printf("pwm_signal_test OK\n");
return 0;
}
int main(void)
{
return example_pwm(EXAMPLE_PWM_IDX, EXAMPLE_PWM_CH_IDX);
}