pwm波如何控制电机代码_PWM波控制720电机

本文详细介绍了如何使用STM32通过PWM波控制720电机,包括电机硬件分析、软件分析和编程步骤。通过调节PWM波的占空比来控制电机转速,利用MOS管作为开关控制电流,最终实现电机速度的精确控制。文中还涉及到STM32F411单片机产生PWM波的工作原理和配置方法。
摘要由CSDN通过智能技术生成

详细方案四:pwm与720电机控制

电机硬件分析

什么是电机?

电机(俗称"马达")是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。其中本四轴采用的电机是直流电机。直流电动机是将直流电能转换为机械能的电动机。因其良好的调速性能而在电力拖动中得到广泛应用。

d8c0c98fdef81a9de25f2e0911ba9733.gif
图1 直流电机图

那么是不是直接在电机两端加上电压就可以了?

直接在直流电机加上电压,确实能够使得电机转动而且转速完全能够满足四轴飞行的动力,但是这样的四轴没法控制电机的转速,加电后四轴只会朝天上飞而且没法控制。最后有可能炸机。

那怎么控制电机的转速?

直流电动机是将直流电能转换为机械能的电动机,也就是说只要控制住电流的话,就可以控制电机的转速了。那问题就变成了如何控制电流了。

电流怎样控制电机的转速?

我们想想,有电流电机就转,没电流电机就不转。那如果、10ms内,如果6ms电机有电流,4ms没电流。电机是前6ms转,后4ms不转?实际上是10ms电机都在转。前6ms电机有电流电机转,后4ms虽然没有电流但是由于惯性的作用电机依旧在转,只不过转速在不断的减少。如果将将10ms的周期不断的循环,不断认为地控制电流的导通的时间是不是就可以控制电机的转速了。其中这周期不能太大一般为ms或者ns级别的。

914eccdda48327bf6da24607c0fa38c7.gif
图2 电流控制电机

那么问题又来到了怎么控制电流上了

根据欧姆定律,在电阻不变的情况下,电压与电流成正比。高电平就是有电流流经电机,低电平就是电路断开没有电流流经电机。这个让电流能否流进电机就好像一个门阀且该门阀的开关的速度要达到ms和ns级别,那这门阀无疑MOS管是最佳人选。外加电压在MOS管在栅源极上如果大于MOS的开启电压MOS管内部就会导通,如果外加栅源极小于MOS的开启电压MOS管处于截止区,也就是该电路断开

最后的难题是电压

有什么电压能够在周期内输入稳定的高低电平到MOS管的栅源极?那就属PWM波最好了。

1109560ef99fa3e57960749477aa336a.png

图3 pwm波定义图

PWM波即是通过单片机在一个周期内,让单片机的IO口输出一段时间的高电平,一段时间的低电平。如上图所示为为一个方波的周期,其占空比为t/T。其调节高低电平过程如下图

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于FPGA的直流电机PWM控制系统的代码示例。首先,我们需要定义一些常量和寄存器来控制电机的运行和PWM的频率和占空比: ```verilog module motor_control( input clk, // 时钟信号 input [7:0] speed, // 速度控制信号 output reg motor, // 电机运行信号 output reg pwm // PWM信号 ); // 定义常量 parameter PERIOD = 100; // PWM周期 parameter DUTY_CYCLE = 50; // PWM占空比 // 定义寄存器 reg [7:0] counter = 0; // 计数器 reg [7:0] duty_cycle_counter = 0; // 占空比计数器 // 时钟分频器 reg [7:0] divider = 0; always @(posedge clk) begin if (divider < speed) begin divider <= divider + 1; end else begin divider <= 0; counter <= counter + 1; duty_cycle_counter <= duty_cycle_counter + 1; end end // PWM控制 always @(posedge clk) begin if (counter == PERIOD) begin counter <= 0; motor <= 1; end else begin motor <= 0; end if (duty_cycle_counter == DUTY_CYCLE) begin duty_cycle_counter <= 0; pwm <= 0; end else if (duty_cycle_counter == PERIOD) begin duty_cycle_counter <= 0; pwm <= 1; end end endmodule ``` 在上述代码中,我们使用了一个时钟分频器来控制PWM的频率,同时使用一个计数器来控制PWM的占空比。在时钟上升沿时,时钟分频器会将速度控制信号分频,以便更准确地控制PWM的频率。当计数器达到PWM周期时,我们会将电机运行信号设置为高电平,同时将PWM信号设置为低电平。当占空比计数器达到占空比时,我们会将PWM信号设置为高电平。这样,在PWM周期内,PWM信号的高电平时间占整个周期的比例就是占空比。 注意,以上代码仅供参考,具体实现还需要根据实际需求进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值