200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > ESP8266-SDK的3路PWM输出

ESP8266-SDK的3路PWM输出

时间:2020-02-18 15:30:13

相关推荐

ESP8266-SDK的3路PWM输出

ESP8266的PWM和硬件定时器都是使用同一个中断定时器,所以同时只能使用一个,这点要注意

1、PWM的初始化

void pwm_init(

uint32 period,

uint8 *duty,

uint32 pwm_channel_num,

uint32 (*pin_info_list)[3])

参数:

uint32 period : PWM 周期;

uint8 *duty : 各路 PWM 的占空⽐比

uint32 pwm_channel_num: PWM 通道数

uint32 (*pin_info_list)[3]: PWM 各通道的 GPIO 硬件参数。本参数是⼀一个 n * 3

uint32 pwm_duty[3]= {0};

uint32 io_info[3][3]={

{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12},

{PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},

{PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15,15}

};

//pwm_init(1000,pwm_duty,3,io_info);

pwm_init(1000, //设置pwm的周期

pwm_duty, //设置pwm的占空比

3, //pwm的通道数

io_info); //pwM的管脚

通过上面就设置好了GPIO12、GPIO13、GPIO15为PWM输出

2、使用软定时器的回调函数来改变占空比

os_timer_disarm(&pwm_timer);

os_timer_setfn(&pwm_timer,(os_timer_func_t *)pwm_callback,NULL);

os_timer_arm(&pwm_timer,100,0);

void pwm_set_duty(uint32 duty, uint8 channel) 这个函数就是用来改变占空比的,duty为改变占空比 channel为哪一个通道

uint32 duty : 设置⾼高电平时间参数,占空⽐比的值为 (duty*45)/ (period*1000)

uint8 channel : 当前要设置的 PWM 通道,取值范围依据实际使⽤用了⼏几路 PWM,

每次更新 PWM 设置后,都需要重新调用void pwm_start (void)函数才能生效

void pwm_callback(void)

{

static unsigned int duty = 0;

if(duty > 20000)

{

duty = 0;

}

duty = duty+ 200;

pwm_set_duty(duty,0);

pwm_set_duty(20000-duty,1);

pwm_set_duty(duty,2);

pwm_start();

os_timer_arm(&pwm_timer,100,0);

}

这样GPIO12、GPIO15、GPIO13就可以输出可变的PWM

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。