资料编号:117 下面是相关功能视频演示:
117-基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)
仿真图proteus 7.8(理论上高于7.8均可以打开)
程序编译器:keil 5
编程语言:C语言
有仿真图,源码
采用51单片机,用PWM控制电机脉冲频率应控制在25HZ~35HZ之间
定时1ms,1个周期30ms,脉冲频率为33HZ 来控制马达调速以及正反转
下面是程序部分展示:
void timer0() interrupt 1 using 1
{
TH0=0xfc; /*定时器初值重装载*/
TL0=0x18;
time++;
P3_4=~P3_4;
if(dir==1)
{
if(time==high) /*高电平持续时间结束,变低*/
P2_0=th0; /*经过反相器反相*/
else if(time==period) /*周期时间到,变高*/
{ time=0;
P2_0=tl0; /*经过反相器反相*/
}
}
else if(time==high) /*高电平持续时间结束,变低*/
P2_1=th0; /*经过反相器反相*/
else if(time==period) /*周期时间到,变高*/
{ time=0;
P2_1=tl0; /*经过反相器反相*/
}
}
void main()
{
P0=0x00;
P2=0x00;
TMOD=0x01; /*定时器0方式1*/
TH0=0xfc; /*定时器装载初值,设置脉冲信号的占空比为1/5*/
TL0=0x18;
ET0=1; /*开定时器0中断*/
TR0=1; /*启动定时器0*/
while(1)
{
if(P0_0==1)
EA=1; /*开CPU中断*/
if(P0_1==1)
EA=0; /*关CPU中断*/
if(P0_2==1)
{
dir=~dir; /*转向控制*/
while(P0_2!=0)
{};
}
if(P0_3==1)
{
high++;
if(high==30)
high=0;
while(P0_3!=0)
{};
}
下面是该资料的分享下载链接: