L9110H电机驱动模块-FPGA

        L9110H电机驱动芯片,该芯片内部集成了一个H型全桥式高电压大电流电机驱动电路,可以单独驱动一个直流电机。

1.1  电机驱动原理

        H型全桥式驱动电路包含四个三极管和一个电机,其电路图如图1.1所示。将四个三极管分成两组,若两组三极管同时导通或同时关断,此时电机不会工作;如果想使用该驱动电路驱动电机运转,就必须导通其电路中位于对角线上的一对三极管。此时两组三极管的状态必须互补:当一组导通时,另一组必须关断。当三极管Q1、Q4导通,Q2、Q3关断时,电机两端所加为正向电压,此时电机将会顺时针转动;当三极管Q2、Q3导通,Q1、Q4关断时,机两端所加为反向电压,此时电机将会逆时针转动。要注意的是,在直流电机运转的过程中要使电机不断在四个象限之间切换,即在顺时针转动和逆时针转动之间切换。即四个三极管在Q1、Q4导通且Q2、Q3关断,和Q1、Q4关断且Q2、Q3导通这两种状态之间切换。

e8dcf7170db3492ab3986dd65b15260f.png

1.1 H型全桥驱动电路示意图

        为了方便控制三极管的导通和关断,一般会在基础的H型全桥驱动电路上增加四个与门和两个非门。这种设计方案的电路如图1.2所示。通过这样的电路设计,只需要一个信号ENABLE就可以控制H型全桥式驱动电路上所有三极管的开关;然后再分别给两个非门提供一个方向输入信号,这样只需要两个信号DIR-L和DIR-R就可以控制H型全桥驱动电路的四个三极管的导通和关断,以达到控制电机转动方向的效果。这样的设计减少了系统管脚的使用率,仅仅只用三个信号就能控制电机的运转。

ac098068bdc444e08e735e55d18d553d.png

1.2 具有使能控制和方向逻辑的H型全桥驱动电路示意图

        电机驱动模块运行状态逻辑真值表如表1.1所示。

1.1 电机驱动模块运行状态逻辑真值表

IB

IA

运行状态

X

X

停止

1

0

正转

0

1

反转

1

1

刹停

0

0

停止

        通过FPGA芯片控制L9110H电机驱动模块上的管脚IB和IA来控制风扇的开关、转动方向和转动速度,即当IB信号为PWM波、IA信号为低电平时风扇正转,此时风扇的转速由PWM波的占空比决定;当IB信号为低电平、IA信号为PWM波时风扇反转,此时风扇的转速同样由PWM波的占空比决定。

电机驱动的代码非常简单,只需要控制管脚IA和IB的值,如下所示

module motor_driver(
    input           clk     ,
    input           rst_n   ,
    input   [2:0]   gear    ,//档位可根据需要进行设置

    output          IA      ,
    output  reg     IB
);

    parameter   [31:0]  StepLockOut = 32'd200000;//250Hz

    reg     [32:0]  StepCounter ;

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        StepCounter <= 0;
    else if(StepCounter == StepLockOut -1)
        StepCounter <= 0;
    else
        StepCounter <= StepCounter + 1;
end

always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
        IB <= 0;
    else
    case(gear)
        3'd0:begin
            IB <= 0;
        end
        3'd1:begin
            if(StepCounter <= StepLockOut/5 -1)
                IB <= 1;
            else
                IB <= 0;
        end
        3'd2:begin
            if(StepCounter <= StepLockOut/5*2 -1)
                IB <= 1;
            else
                IB <= 0;
        end
        3'd3:begin
            if(StepCounter <= StepLockOut/5*3 -1)
                IB <= 1;
            else
                IB <= 0;
        end
        3'd4:begin
            if(StepCounter <= StepLockOut/5*4 -1)
                IB <= 1;
            else
                IB <= 0;
        end
        3'd5:begin
                IB <= 1;
        end
        default:IB <= 0;
    endcase
end

assign IA = 0;

endmodule

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
淘宝买了几个4g舵机,3.2一个,价格便宜,但是不带电路板和摆臂。 样子如下图,带5根线,2根电机线,3根电位器线。 拆开后,大概就是这个样子,可见棕色和白色两根线接电位器的两端,黄线接电位器中间。 我这里用的图,都是淘宝卖家拍的,下面的拆开图,是6g舵机的,但是接线是一样的。 万用表测量了一下,这个电位器是4.9K的,也就当5K吧。 这个舵机是萝莉群的群友推荐的,希望我能做个舵机的电路板出来驱动它。 一直拖了一个多星期吧,硬件电路是几天前就搭好了,今天下午大概写了一下代码,本来想用一下PID算法,显得高大上一点,不过后来看了看,这种东西比较简单,单纯的比例算法就可以了,不需要PID这么复杂。 思路大概解释一下。 电路板用了3个元件,一个STC15W408AS DIP16的单片机。 这个单片机带10位精度的ADC,刚好测量舵机里面电位器的位置。 然后电机驱动用的L9110 DIP8。 L9110最大电流0.8A,对于4g舵机的小空心杯电机来说,足够了。 而且L9110的电路也非常简单。 最后一个元件就是加了个47uf的电容。如果是改贴片元件,大概10uf和0.1uf两个贴片电容就差不多了。 L9110的基本应用电路如下: STC15W408AS DIP16 的引脚图如下: 顺便说一下,我用直插元件和洞洞板搭了一个驱动电路,没有采用贴片元件和打板子。 因为重点还是单片机的电路设计和编程,而不是做一个比较完美的成品。 4g舵机驱动板程序部分截图:
### 回答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、付费专栏及课程。

余额充值