您的位置 首页 培训

51单片机PWM操控电机

小时候玩的四驱车,给直流马达接通电源就嗤嗤的跑出去了。电机种类众多,就属控制直流电机最简单,只要对调正负极就能改变电机的转向。…

小时候玩的四驱车,给直流马达接通电源就嗤嗤的跑出去了。电机品种很多,就属操控直流电机最简略,只需对调正负极就能改动电机的转向。别的,直流电机负载能力强,适合做越野车的驱动电机。为了做可调速的越野车,就有了这篇文章。

电源电压输出是固定的,电机的转速也因此是固定的,为了调理电机的转速,就得改动电源电压的输出(为嘛要改动电机转速?举个简略的列子,双电机驱动小车-一边一个电机-怎么完结转向?让屈指可数轮胎上的速度不同即可)。how?用PWM调制的办法,把安稳的直流电源电压调制成频率必定宽度可变的脉冲电压序列,然后能够改动均匀输出电压的巨细,以调理电机的转速。电源电压在此处便是51MCU的引脚输出,4.5-5V,只需在引脚上发生频率可调的波形即可。假定在一个周期内,就10ms吧,前5ms引脚输出高电平,后5ms引脚输出低电平,循环往复,引脚上输出50%占空比的安稳方波;再改改,前2ms输出高电平,后8ms输出低电平,引脚上输出20%占空比的安稳方波。

MCU发生周期性事情很简略,用守时器守时发生中止即可。一般差不多一下方式:

void Isr01() interrupt 1{static unsigned int cnt;cnt++;if(cnt==40){cnt=0;}}

假定每250us发生一次中止,以上中止函数计算40次中止,即10ms。
为了完结”可改动占空比的方波”这个夹藏,来试试给这个函数添加一些计算事情,在一个计算事情中做一些事,另一个计算事情中做其他的事。

unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一个周期if(cnt==40){cnt=0;}//事情1if(cnt

condition便是新添加的计算事情,前半个周期为一个事情,后半个周期为另一个事情。这儿,当cnt小于5ms,输出高电平,当cnt大于输出低电平,合在一起生成一个50%占空比的方波。

unsigned int condition=20;void Isr01() interrupt 1{static unsigned int cnt;cnt++;//一个周期if(cnt==40){cnt=0;}if(cnt

为了改动占空比,只需在ISR外修正condition即可,贴出终究的代码:

#include    #include   sbit P2_0 = P2^0;  sbit P2_1 = P2^1;#define MakeByte(target, Hi,Lo) \  do{ \  target |= (((Hi)<<4)|(Lo)); \   }while(0); \  #define SetTH(n,val) \  do{ \  TH##n = val; \  }while(0); \  #define SetTL(n,val)  \  do{ \  TL##n = val; \  }while(0); \  #define EnableET(n) \  do{ \  ET##n = 0x01; \  IE |= 0x80; \  }while(0); \ enum KEYSTAT{KEYDOWN=0,KEYUP,};unsigned char iterator = 0x00;void DelayMs(unsigned int ms){int i=0,j=0;for(;i

在主函数中,经过判别按下键来改动condition。

结束部分,贴上仿真图和仿真成果:

1)占空比100%:

2)差不多55%占空比:

3)0%的占空比,电机歇息了:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/265348.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部