直流电机驱动PWM频率(转)

源:直流电机驱动PWM频率

1、没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系。一般的电机用14K就足够了。当然自需要简单的调速可以随便选。 如果电机转速比较高,感抗比较小,可以使用比较高的频率。一般最好不要超过20K  因为一般IGBT最高20K的开关频率。 而MOS 的开关频率比较高,, 但是过高的F 需要专用的驱动电路,不然MOS工作在放大区的时间比较长。 如果电机转速比较低,感抗比较大, 而且又是在做伺服, 那开关频率就需要低一点。

2、对于电机应用,功率越大,PWM频率越低,最低有500Hz或者1KHz的,在兆瓦级的应用中。普通中小功率的,5K到20K常见,功率越低,电压等级越低,你所能使用的PWM频率越高。因为低压的MOSFET开关频率可以做到很高,而高压的IGBT却很难快速开关。普通的马达,10K到20K,都没问题。我们做KW级主变频器,开关频率10K。

/* =======直流电机的PWM速度控制程序======== */  

/* 纬东工作室  robots51.51.net    2006年6月 */  

/* 晶振采用11.0592M,产生的PWM的频率约为91Hz */  

#include<reg51.h>   

#include<math.h>   

#define uchar unsigned char  

#define uint unsigned int  

sbit en1=P1^0;      /* L298的Enable A */  

sbit en2=P1^1;      /* L298的Enable B */  

sbit s1=P1^2;       /* L298的Input 1  */  

sbit s2=P1^3;       /* L298的Input 2  */  

sbit s3=P1^4;       /* L298的Input 3  */  

sbit s4=P1^5;       /* L298的Input 4  */  

uchar t=0;          /* 中断计数器     */  

uchar m1=0;         /* 电机1速度值    */  

uchar m2=0;         /* 电机2速度值    */  

uchar tmp1,tmp2;    /* 电机当前速度值 */  

/* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */  

<span style="color: rgb(255, 0, 0);">void motor(uchar index, char speed)</span>   

{   

if(speed>=-100 && speed=100)   

 {   

   if(index==1)       /* 电机1的处理    */  

     {   

      m1=abs(speed);  /* 取速度的绝对值 */  

      if(speed<0)     /* 速度值为负则反转 */  

         {   

          s1=0;   

          s2=1;   

         }   

        else          /* 不为负数则正转 */  

         {   

          s1=1;   

          s2=0;   

         }   

     }   

   if(index==2)       /* 电机2的处理    */  

     {   

      m2=abs(speed);  /* 电机2的速度控制 */  

      if(speed<0)     /* 电机2的方向控制 */  

         {   

          s3=0;   

          s4=1;   

         }   

        else  

         {   

          s3=1;   

          s4=0;   

         }   

     }   

 }   

}   

void delay(uint j)      /* 简易延时函数 */  

{   

for(j;j>0;j--);   

}   

void main()   

{   

uchar i;   

TMOD=0x02;         /* 设定T0的工作模式为2 */  

TH0=0x9B;      /* 装入定时器的初值    */  

TL0=0x9B;   

EA=1;              /* 开中断              */  

ET0=1;         /* 定时器0允许中断     */  

TR0=1;         /* 启动定时器0         */  

while(1)               /* 电机实际控制演示    */  

{   

 for(i=0;i=100;i++)   /* 正转加速 */  

   {   

    motor(1,i);   

    motor(2,i);   

    delay(5000);   

   }   

 for(i=100;i>0;i--)    /* 正转减速 */  

   {   

    motor(1,i);   

    motor(2,i);   

    delay(5000);   

   }   

 for(i=0;i=100;i++)   /* 反转加速 */  

   {   

    motor(1,-i);   

    motor(2,-i);   

    delay(5000);   

   }   

for(i=100;i>0;i--)    /* 反转减速 */  

   {   

    motor(1,-i);   

    motor(2,-i);   

    delay(5000);   

   }   

}   

}   

void timer0() interrupt 1          /* T0中断服务程序 */  

{   

if(t==0)           /*<span style="color: rgb(255, 0, 0);"> 1个PWM周期完成后(100次中断)才会接受新数值</span> */  

 {   

   tmp1=m1;   

   tmp2=m2;   

 }   

if(t<tmp1) en1=1; else en1=0;   /* <span style="color: rgb(255, 0, 0);">产生电机1的PWM信号,[0,tmp1=m1]均是高电平</span> */  

if(t<tmp2) en2=1; else en2=0;   /* 产生电机2的PWM信号 ,同理*/  

t++;   

if(t>=100) t=0;          /*<span style="color: rgb(255, 0, 0);"> 1个PWM信号由100次中断产生</span> */  

} 
时间: 2024-10-08 21:46:58

直流电机驱动PWM频率(转)的相关文章

STM32定时器输出PWM频率和步进电机控制速度计算

1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知: 当APB1和APB

无刷无感直流电机驱动硬件分析

电机驱动的一大关键是准确知道转子的位置,有感电机通过传感器获取转子位置,无感电机只能通过间接方式获取电机转子位置,常见的方法有反电动势法.电感法.磁链法.高频脉冲法及其它智能方法,应用最多的是反电动势法 反电动势法无刷无感电机驱动电路可主要分为三部分:功率驱动部分,控制部分,转子位置检测部分 一. 功率驱动部分 功率驱动部分有二种实现方式,一是使用集成电机驱动IC,二是使用分立元件搭建.使用集成IC更加简单,而且大多驱动IC都集成了多种保护功能,更加可靠,但成本较高. 使用分立元件搭建有二种:

STM32中的PWM的频率和占空比的设置

转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解: TIM3的ARR寄存器和PSC寄存器, 确定PWM频率.这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB

(原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)

1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比0~99%范围内,二者均可调.抄下指标以后,回到实验室,细细分析以后,决定用MCU来实现一下,毕竟只分析,无实际结果也不是一个好的交代. 2.Content   2.1 理论分析     归根结底来说,是一个时序逻辑,即PWM输出波形是随着时间的推移而变化.用时序图的方式解释更明晰些. FIG2.1

详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!(转)

一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!). 四.给出了PWM频率和占空比的计算公式. 步骤如下: 1.使能TIM3时钟 RCC->APB1ENR |= 1 << 1; 2.配置对应引脚(PA6)的复用输出功能 GPI

混杂设备驱动--输出两路PWM

尝试用2440的TOUT0和TOUT1输出PWM驱动两个电机,电机的硬件驱动电路是使用L298N. 先单独测试TOUT0的PWM输出: (1)驱动程序:使用misc混杂设备驱动模型,当然也可以使用基本的字符设备模型. 使用misc设备驱动模型步骤: ①初始化一个struct miscdevice结构体:主要是file_operation结构体成员和name ②使用misc_register和misc_deregister注册和注销这个结构体 代码示例: #include <linux/modul

[ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别控制红.绿.蓝三种颜色的灯输出亮度,再结合混色原理表现出丰富多彩的炫光效果~ 写在前面:前十几篇介绍了CC2530的一些外设的基本用法,接下来几篇拿几个例子回顾并加深一下之前的知识点,上面引言是普及.下面高能预警! 第一个例子:用定时器1产生PWM来控制LED亮度 我们在<[ZigBee] 5.Zi

原装希格玛SGL8022W/K/S/WS SGL8023W单通道/双通道直流LED 灯光控制调节触摸

产品型号:SGL8022K产品品牌:SGL/希格玛封装形式:DIP8 SOP8产品年份:新年份希格玛大陆总代理,原装现货具有优势!工程服务,技术支持,让您的生产高枕无忧.两通道触摸按键控制芯片概述SGL8022K是一款两触摸通道带两个逻辑控制输出的电容式触摸芯片.具有如下功能特点和优势:可通过触摸实现各种逻辑功能控制.操作简单.方便实用.可在有介质(如玻璃.亚克力.塑料.陶瓷等)隔离保护的情况下实现触摸功能,安全性高.应用电压范围宽,可在2.4~4.5V之间任意选择.应用电路简单,外围器件少,加

stm32寄存器版学习笔记05 PWM

STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟,配置PA8为复用输出 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设复位寄存器 (RCC_APB1RSTR) 置1开启.清0关闭. Eg:RCC->APB2ENR|=1<<11; //使能TIM1时钟 配置I/O口: 参见stm32寄存器版学习笔记01 GPIO口的配置