物联网全栈教程--手把手教你开发一个智能浇花器(3)抽水电机PWM流速控制

各位老铁晚上好。我是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
}

好了,今天的课程就这样了。。。。。晚安

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值