关于maxon motor 471486电机的探索记录
最近工作遇到了这款maxon motor 471486的电机,记录一下折腾他的成果
电机结构
maxon motor 471486这款电机分为三个部分,分别是齿轮箱,电机与编码器。
要写控制代码主要看种传感器【MR 编码器, M 型, 32 线, 2 通道】
驱动方式与参数
找到该编码器的文档(只有一个目录页……不知道本体在哪……)查看接线引脚
由上图所示,VCC与接地是编码器的电源,VCC范围在2.7~5.5V。电机+与电机(下文称为电机-)引脚为电机的控制引脚,电压只要看电机的文档,这里我给的是5V左右。电机的方向靠电机+与电机-来决定,两边相同电压时就停止,当电压差为正时则正传,负电压是为反转。
正转 | 反转 | 停止 | 停止 | |
电机+ | 1 | 0 | 1 | 1 |
电机- | 0 | 1 | 1 | 1 |
通道A、通道B则为反馈引脚,当电机转动的时候通道AB会产生高低电平变化
所以,使用外部中断即可判断电机转了多少度。当电机停止后,通道A和通道B会保持一种状态,这个需要自己上示波器测量看是低电平还是高电平。
以下附上以上点击的相关代码,希望能帮助到大家
sbit motor_1=P2^6;//电机控制脚1
sbit motor_2=P2^7;//电机控制脚2
sbit motor_feedback=P3^2;//电机脉冲反馈【外部中断,获取】
sbit motor_direction=P3^3;//电机前进后退反馈【1为前进,0为后退】
uint motor_pulse_count=0;//脉冲计数变量
uchar motor_direction_sign=0;//前进后退标志位
/*****************************************************************
函数名 :Motor_Action
函数输入:
返回 :无
函数作用:
电机设置函数,控制电机前进、后退与速度
*******************************************************************/
void Motor_Action(){
switch(motor_direction_sign){
case 1:{//动作-前进
P_SW2 = 0x80;//设置初值
PWM6T1= 0;//在计数值为XX地方输出高电平
PWM6CR= 0x80;//使能PWM0输出
PWM7T1= motor_speed*100+700;//在计数值为XX地方输出高电平
PWM7CR= 0x80;//使能PWM0输出
P_SW2 = 0;
}break;
case 2:{//动作-后退
P_SW2 = 0x80;//设置初值
PWM6T1= motor_speed*100+700;//在计数值为XX地方输出高电平
PWM6CR= 0x80;//使能PWM0输出
PWM7T1= 0;//在计数值为XX地方输出高电平
PWM7CR= 0x80;//使能PWM0输出
P_SW2 = 0;
}break;
default :{//动作停止
P_SW2 = 0x80;//设置初值
PWM6T1= 200;//在计数值为XX地方输出高电平
PWM6CR= 0x80;//使能PWM0输出
PWM7T1= 200;//在计数值为XX地方输出高电平
PWM7CR= 0x80;//使能PWM0输出
P_SW2 = 0;
}
}
}
/*****************************************************************
函数名 :Motor_One_Action
函数输入:无
返回 :无
函数作用:
电机推针一次【定时器中运行】
*******************************************************************/
void Motor_One_Action(){
unsigned int jjj;//缓存步进数
if(execute_one_motor_operation==1){
motor_direction_sign=1;//开启电机前进
if(motor_pulse_count>5000){//当标志位值1后
motor_direction_sign=0;//停止电机前进
dms++;if(dms>2000){ttt=1;dms=0;}//计时语句
if(ttt==1){//当ttt暂停标志为置一后,结束一推流程
jjj=motor_pulse_count;//将该次的步进数存入jjj
motor_pulse_count=0;//脉冲计数清零,准备下一次计数
Used_pricknum++;Used_pricknum_sign=1;//更新已打次数
execute_one_motor_operation=0;//结束标志
ttt=0;
}
}
}
if(motor_direction==1){
//前进了几步
motor_scope=motor_scope+jjj;
}else{
//后退了几步
motor_scope=motor_scope-jjj;
}
}
以上即是基于STC8A4K16S2A12主控对maxon motor 471486电机的控制代码。
如有错误的地方,烦请纠正,谢谢!