单片机控制电机的原理 关于单片机电机驱动模块( 三 )


{
switch(key_val)
{
case 0xfe: //电机加速
if((0==stop_flag)&&(0==suspend_flag))
{
val_PWM += INCREMENT_PWM; //增加占空比
if(val_PWM>PWM) //PWM表示占空比的上限值
val_PWM = PWM;
}
break;
case 0xfd: //电机减速
if((0==stop_flag)&&(0==suspend_flag)) //他是如何加速的事通过什么来实现的呢
{
if(val_PWM>=INCREMENT_PWM)
val_PWM -= INCREMENT_PWM; //增加占空比
}
break;
case 0xfb: //电机正或反转选择
if((0==stop_flag)&&(0==suspend_flag))
forward_flag = ~forward_flag; //切换电机旋转模式
break;
case 0xf7: //电机暂停/继续
if(stop_flag==0)
{
suspend_flag = ~suspend_flag;
if(suspend_flag)
{
TR0 = 0; //暂停
DC_Moto_A = 0;
DC_Moto_B = 0;
}
else
TR0 = 1; //继续
}
break;
case 0xef: //电机停止/运行
stop_flag =~ stop_flag;
if(stop_flag)
{ //停止
TR0 = 0; //停止PWM输出
val_PWM = INIT_VAL_PWM; //初始化变量和标志
LED = 1; //关闭指示灯
forward_flag = 1;
suspend_flag = 0; //停止运行的时候初始化一下
DC_Moto_A = 0;
DC_Moto_B = 0;
}
else
{
LED = 0; //点亮指示灯
TR0 = 1; //允许输出PWM波形
}
break;
default:break;
}
}
函数名称:interrupt_init,功能:中断寄存器初始化
void interrupt_init() //初始化
{
TMOD = 0x01; //选择定时器/计数器工作方式1
TH0 = (65536-T0_COUNT)/256;
TL0 = (65536-T0_COUNT)%256;
ET0 = 1; //开定时器/计数器中断
TR0 = 1;
EA = 1; //开总中断
}
函数名称:variable_init,功能:变量、标志初始化
void variable_init() //变量初始化
{
val_PWM = INIT_VAL_PWM;
forward_flag = 1; //电机正反转标志
suspend_flag = 0; //电机暂停/继续标志
stop_flag = 1; //电机停止/运行标志
LED = 1; //关闭指示灯
DC_Moto_A = 0; //P2^0口输入
DC_Moto_B = 0; //P2^1口输入
}
void main() /*————-主函数———-*/
{
uchar key_val;
variable_init(); //变量初始化
interrupt_init(); //中断函数初始化
while(1)
{
do
key_val = key_scan();
while(0==key_val);
key_behav(key_val);
}
}
函数名称:moto_run,功 能:中断函数;产生控制电机的PWM波形(定时器1中断)
void moto_run() interrupt 1 //选择正转还是反转跳入中断
{
TH0 = (65536-T0_COUNT)/256; //核心是在中断里面
TL0 = (65536-T0_COUNT)%256;
count_PWM++; //PWM计数值
if(forward_flag)
{ //电机正转
DC_Moto_B = 0;
if(count_PWM<val_PWM) //产生PWM
DC_Moto_A = 1;
else
DC_Moto_A = 0;
}
else
{ //电机反转
DC_Moto_A = 0;
if(count_PWM<val_PWM) //产生PWM
DC_Moto_B = 1;
else
DC_Moto_B = 0;
}
if(count_PWM>=PWM)
count_PWM = 0;
}

单片机控制电机的原理 关于单片机电机驱动模块

文章插图
用单片机仿真板发出PWM波形去控制H桥来驱动直流小电机
以上程序我们是用PWM实现对电机的调速的,因为PWM信号只有两种状态,高电平和低电平,对于一个给定的周期来说,高电平所占的时间和周期之比我们称之为占空比,我们只要改变控制信号的占空比就可以改变电机的转速 。
从以上两个实例可以看出,不同的电机,所用的控制方式是不一样的 。希望通过这两个实例的推送对刚学单片机的朋友有所帮助,有问题欢迎留言讨论,共同进步 。