Stm32 L9110驱动风扇

一.原理图
 

二.示例代码
 

#include "pwm.h"


//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM_PWM_Init(u16 arr,u16 psc)
{  
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;

	RCC_APB1PeriphClockCmd(UserPeriph_ADCx, ENABLE);// 
 	RCC_APB2PeriphClockCmd(UserPeriph_GPIOx , ENABLE);  //使能GPIO外设时钟使能
	                                                                     	

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = UserPeriph_PINx; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(UserGPIOx, &GPIO_InitStructure);

	
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 80K
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(UserTIMEx, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC3Init(UserTIMEx, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  TIM_CtrlPWMOutputs(UserTIMEx,ENABLE);	//MOE 主输出使能	

	TIM_OC3PreloadConfig(UserTIMEx, TIM_OCPreload_Enable);  //CH1预装载使能	 
	
	TIM_ARRPreloadConfig(UserTIMEx, ENABLE); //使能TIMx在ARR上的预装载寄存器
	
	TIM_Cmd(UserTIMEx, ENABLE);  //使能TIM1
}
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"


#define UserTIMEx TIM3
#define UserPeriph_ADCx RCC_APB1Periph_TIM3
#define UserPeriph_GPIOx RCC_APB2Periph_GPIOB
#define UserGPIOx GPIOB
#define UserPeriph_PINx GPIO_Pin_0

#define close 100
#define one_step 80
#define two_step 60
#define three_step 40
#define four_step 20

void TIM_PWM_Init(u16 arr,u16 psc);

#endif

 

    TIM_PWM_Init(100,10);

    switch(pwm){
        case 0: TIM_SetCompare3(TIM3,close); break;
        case 1: TIM_SetCompare3(TIM3,one_step); break;
        case 2: TIM_SetCompare3(TIM3,two_step); break;
        case 3: TIM_SetCompare3(TIM3,three_step); break;
        case 4: TIM_SetCompare3(TIM3,four_step); break;
    }

三.注意点

PB0 占空比 为 100 关闭
pB1 占空比 为0 关闭

早市向来以卖菜者居多,但总有一些年长者将自家闲置废旧物品拿来早市摆摊售卖,一来可以打发早起的这段时光,二来可以享受二次创业给自己带来的乐趣,当然,也给喜欢物美价廉、充满好奇心、喜欢瞎折腾的人创造淘宝机会,这个是什么,CUP风扇,2块钱买回家来研究一番。 CPU风扇是四线制,一般情况下,红黑分别为正负,接上12V电压,转速超快,发出嗡嗡嚎叫声,说明风扇还可以用,但还有黄蓝两根线不知是什么线,于是万事不解百度一下找到了答案,其中蓝线为PWM调速线,做了一下试验,将蓝线接地,风扇立即减慢直至停止,如果接上脉宽调制信号,就可以调速了,酷暑难耐,如果做一个电风扇,无级变速加摆头,让夏天不再炎热,岂不美哉! 原理介绍: 接入电源后,红色指示灯亮,打开风扇控制开关S1,风扇开始转动,打开摆头控制开关S2,风扇开始摆动。 脉宽调制电路功能说明:采用NE555控制芯片,如上图,上电后,电流通过1K电阻、IN5819二极管、可调电阻对0.1微法电容进行充电,通过可调电阻IN5819、1K电阻进行放电,构成占空比可调的方波发生器,用于控制风扇转速。 转向驱动电路功能说明:仍然以NE555控制芯片为核心,如上图,2脚和6脚的解法构成双稳态触发器,当按下2脚的开关时,3脚输出高电平,7脚通过三极管s8050输出低电平,当按下6脚开关时,高低电平相反,变为高低电平两路输出, 通过L9110驱动电机,控制电机左右旋转。 演示视频:
### 回答1: 以下是L9110风扇模块的 Arduino 库程序。您可以将其导入到 Arduino IDE 中,然后在您的项目中使用它。 ```c++ /* * L9110 Fan Module Library * * This library provides a set of functions to control the L9110 Fan Module. * * Version 1.0.0 * Author: Aritro Mukherjee * Date: 28/05/2021 * */ #ifndef L9110Fan_h #define L9110Fan_h #include "Arduino.h" class L9110Fan { public: L9110Fan(int in1, int in2); void setSpeed(int speed); private: int _in1; int _in2; }; #endif ``` ```c++ #include "L9110Fan.h" L9110Fan::L9110Fan(int in1, int in2) { _in1 = in1; _in2 = in2; pinMode(_in1, OUTPUT); pinMode(_in2, OUTPUT); } void L9110Fan::setSpeed(int speed) { if (speed > 255) { speed = 255; } else if (speed < -255) { speed = -255; } if (speed > 0) { analogWrite(_in1, speed); digitalWrite(_in2, LOW); } else if (speed < 0) { analogWrite(_in2, -speed); digitalWrite(_in1, LOW); } else { digitalWrite(_in1, LOW); digitalWrite(_in2, LOW); } } ``` 使用示例: ```c++ #include "L9110Fan.h" L9110Fan fan(3, 5); void setup() { } void loop() { fan.setSpeed(255); // Full speed delay(2000); fan.setSpeed(-255); // Reverse full speed delay(2000); fan.setSpeed(0); // Stop delay(2000); } ``` ### 回答2: L9110风扇模块库是一种为控制L9110双H桥驱动芯片设计的软件库。L9110风扇模块是一种常见的直流电机驱动模块,常用于控制风扇或其他小型直流电机的转动。该库的作用是简化使用L9110风扇模块的开发过程,提供了一系列函数和方法来方便用户控制风扇模块的运行。 使用L9110风扇模块库,用户无需了解底层的硬件细节,只需通过简单的函数调用,即可实现对风扇模块的控制。库中的函数包括启动、停止、正转、反转等操作,用户可以根据需要选择合适的函数进行调用。此外,库还提供了一些参数设置的函数,如设置PWM占空比、设置电机转速等。 使用L9110风扇模块库的优势在于它简化了开发的流程和代码量。开发者只需关注业务逻辑和功能实现,而无需过多关注硬件细节和底层驱动的实现。库的封装性和易用性,使得初学者也能轻松上手使用L9110风扇模块进行项目开发。 总之,L9110风扇模块库是一种方便、高效的软件开发工具,为使用L9110风扇模块的开发者提供了便利。通过使用该库,开发者可以更加快速地实现对L9110风扇模块的控制,并将其应用于各种项目中。 ### 回答3: L9110风扇模块库是一种针对L9110风扇模块的软件库。这个库包含了一系列函数和方法,可以方便地控制L9110风扇模块。 L9110风扇模块是一种常见的电子模块,用于控制风扇的转速和方向。它通常由一个L9110芯片和两个直流电机组成。L9110芯片具有H桥驱动功能,可以驱动两个直流电机的转动。 使用L9110风扇模块库可以简化控制L9110风扇模块的过程。通过调用库中的函数和方法,可以方便地实现对风扇的启动、停止、改变转速和改变转向等操作。 库中常见的函数和方法包括: 1. `begin()`:初始化L9110风扇模块,设置引脚等。 2. `startFan()`:启动风扇。 3. `stopFan()`:停止风扇。 4. `setFanSpeed(speed)`:设置风扇的转速,speed取值范围通常为0-255。 5. `changeFanDirection(direction)`:改变风扇的转向,direction参数通常为正、负值或布尔类型。 通过使用L9110风扇模块库,我们可以更加方便地实现对风扇的控制。只需简单调用库中的函数和方法,就可以实现起动和停止风扇、改变转速和转向等操作。这极大地简化了编程的复杂性,同时提高了代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值