各位老铁晚上好。我是Mr_Dong 。今天我们来讲抽水电机流速模块的设计。
在抽水电机流速的控制中,主要是采用PWM的方式进行控制。所谓PWM就是脉宽调制器,通过调制器给电机提供一个具有一定频率的脉冲宽度可调的脉冲电。脉冲宽度越大即占空比越大,提供给电机的平均电压越大,电机转速就高。反之脉冲宽度越小,则占空比越越小。提供给电机的平均电压越小,电机转速就低。
下面先看一下API手册上对于API的说明:
下面举一个例子来说明PWM的控制。ESP8266有四个PWM输出接口,分别是:PWM0(GPIO12)、PWM1(GPIO15)、PWM2(GPIO14) 代码如下:
os_timer_t timer;
uint8 type,x,y,z;
uint32 duty=0;
/*******************************************************************
函数名称:display 函数
函数作用:定时器回调函数
函数输入参数说明:无
函数返回值说明:无
其他说明:
*******************************************************************/
void ICACHE_FLASH_ATTR display(void *arg)
{
for(y=0;y<3;y++)
{
for(z=0;z<12;z++)
{
duty=z*2000;
type=y;
//设置 PWM 某个通道信号的占空比, duty 占空比的值, type当前要设置的PWM通道
pwm_set_duty(duty,type);
//设置完成后,需要调用 pwm_start,PWM 开始
pwm_start();
}
}
}
/*******************************************************************
函数名称:PWM_Init 函数
函数作用:初始化PWM设置
函数输入参数说明:无
函数返回值说明:无
其他说明:
*******************************************************************/
void PWM_Init(void)
{
uint32 io_info[][3]={
{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12,}, //GPIO12
{PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13}, //GPIO13
{PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15,15} //GPIO15
}; //管脚分别为12,13,15
uint32 pwm_duty_init[3]={0,0,0}; //定义占空比为0
uint16 period=1000; //定义PWM周期为1000
uint8 num=3; //PWM 输出管脚数量为3个
pwm_init(period,pwm_duty_init,num,io_info);//初始化PWM设置
for(x=0;x<3;x++)
{
type=x;
pwm_set_duty(duty,type);//设置 PWM 某个通道信号的占空比, duty 占空比的值, type当前要设置的 PWM 通道
pwm_start();//设置完成后,需要调用 pwm_start,PWM 开始
}
}
/*******************************************************************
函数名称:mian 函数
函数作用:打印 hello,world
函数输入参数说明:无
函数返回值说明:无
其他说明:程序的运行的第一个函数
*******************************************************************/
void user_init(void)
{
UART_SetPrintPort(0); //设置串口0为调试口
uart_init(BIT_RATE_115200, BIT_RATE_115200); //打印波特率为115200
os_delay_us(1000);
// os_printf("hello,world");
PWM_Init(); //初始化PWM设置
os_timer_disarm(&timer); //使能一个定时器
os_timer_setfn(&timer,display,NULL);//s设置定时器回调函数为display
os_timer_arm(&timer,1000,1);//定时时间设置为1S
}
好了,今天的课程就这样了。。。。。晚安