📄 motor.h~
字号:
#ifndef __MOTOR_H__
#define __MOTOR_H__
#include "MEGA16.h"
#define DIN_L PORTA=PORTA&0xfe
#define DIN_H PORTA=PORTA|0x01
#define SCLK_L PORTA=PORTA&0xfd
#define SCLK_H PORTA=PORTA|0x02
#define CLR_L PORTA=PORTA&0xfb
#define CLR_H PORTA=PORTA|0x04
#define CS_L PORTA=PORTA&0xf7
#define CS_H PORTA=PORTA|0x08
#define LDAC_L PORTA=PORTA&0xef
#define LDAC_H PORTA=PORTA|0x10
#define stop_TC_L PORTA=PORTA&0xbf
#define stop_TC_H PORTA=PORTA|0x40
uint over_loading_dlay=0;
void outmotor(unsigned int data)
{ unsigned int i,j,m;
float k=0;
if(data==0)
LED_L;
else
LED_H;
if(mode==1)
{
k=data*101.1358; //(5/600)/(5.4/65536)
rpm_max_reg=640;//648; //5.4V/(5V/600RPM)
}
if(mode==2)
{
k=data*20.22716; //(5/3000)/(5.4/65536)
rpm_max_reg=3200;//3240; //5.4V/(5V/3000RPM)
}
if(mode==4)
{
k=data*40.4543; //(5/1500)/(5.4/65536)
rpm_max_reg=1600;//1620; //5.4V/(5V/1500RPM)
}
m=(int)k;
if(m>=65535)
m=65530;
//************************************
SCLK_L;
CS_H;
SCLK_H;
CS_L;
for(i=0;i<16;i++)
{ if(((m<<i)&0x8000)==0x8000)
DIN_H;
else
DIN_L;
for(j=0;j<50;j++);
SCLK_L;
for(j=0;j<50;j++);
SCLK_H;
}
for(j=0;j<50;j++);
CS_H;
LDAC_L;
for(j=0;j<50;j++);
LDAC_H;
}
//转速值处理
void fun_rpm(void)
{ float i;
if(b_time2==0&&b_rpm==1)
{
if(b_com==1)
return;
if(rpm_data_reg>80)
i=60/(time2_add_reg*0.00001382);// 0.000009901
if(rpm_data_reg<80)
i=60/(time2_add_reg*0.0000140);// 0.000009901
if(time2_add_reg==0)
rpm_data=0;
else
rpm_data=(int)i;
if((rpm_data<=0)||(rpm_data>65000))
rpm_data=900;
time2_add_reg=0;
b_rpm=0;
if(b_com==1)
return;
if((rpm_data!=rpm_data_reg)&&(b_rpm_100ms==1)&&(b_run1==1||b_run2==1||b_run3==1))
{
if(rpm_data<rpm_data_reg)
{ if(rpm_add_reg<rpm_max_reg)
rpm_add_reg+=1;
outmotor(rpm_add_reg);
}
if(b_com==1)
return;
if(rpm_data>rpm_data_reg)
{
if(rpm_add_reg>0)
rpm_add_reg-=1;
outmotor(rpm_add_reg);
}
stop_TC_H;
b_rpm_100ms=0;
}
if(b_com==1)
return;
shu_rpm_data[rpm_add]=rpm_data;
rpm_add+=1;
if(rpm_add>2)
{
rpm_add=0;
if(shu_rpm_data[0]>shu_rpm_data[1]&&shu_rpm_data[0]>shu_rpm_data[2])
rpm_data_c=shu_rpm_data[0];
if(b_com==1)
return;
if(shu_rpm_data[1]>shu_rpm_data[0]&&shu_rpm_data[1]>shu_rpm_data[2])
rpm_data_c=shu_rpm_data[1];
if(b_com==1)
return;
if(shu_rpm_data[2]>shu_rpm_data[0]&&shu_rpm_data[0]>shu_rpm_data[1])
rpm_data_c=shu_rpm_data[2];
if((rpm_data_c<=0)||(rpm_data_c>60000))
rpm_data_c=0;
}
}
//过载
if((b_run1==1)||(b_run2==1)||(b_run3==1))
{
if(rpm_data_c<(rpm_data_reg/2)) //5s后通电半S判断有没有过载
{ if(over_loading_add>3000)
{
outmotor(0x0000);
}
else
outmotor(rpm_add_reg);
}
over_loading_dlay+=1;
}
if(over_loading_dlay>30000)
over_loading_dlay=0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -