📄 main.c
字号:
#include"uhal.h"
#include "44b.h"
#include"myuart.h"
#include"motorctrl.h"
#include"exio.h"
#include "option.h"
#include <math.h>
#define MOTOR_SEVER_FRE 1000 //20kHz
#define MOTOR_CONT (MCLK/2/2/MOTOR_SEVER_FRE)
#define MOTOR_MID (MOTOR_CONT/2)
#define ADCCON_FLAG 0x40
#define ADCCON_SLEEP 0x20
#define ADCCON_ADIN0 (0x0<<2)
#define ADCCON_ADIN1 (0x1<<2)
#define ADCCON_ADIN2 (0x2<<2)
#define ADCCON_ADIN3 (0x3<<2)
#define ADCCON_ADIN4 (0x4<<2)
#define ADCCON_ADIN5 (0x5<<2)
#define ADCCON_ADIN6 (0x6<<2)
#define ADCCON_ADIN7 (0x7<<2)
#define ADCCON_READ_START 0x2
#define ADCCON_ENABLE_START 0x1
void init_ADdevice()
{//初始化
rADCPSR=20;
rADCCON=ADCCON_SLEEP;
}
int GetADresult(int channel)
{
rADCCON=(channel<<2)|ADCCON_ENABLE_START;
Delay(10);
while(!(rADCCON&ADCCON_FLAG));//转换结束
return rADCDAT;//返回采样值
}
int Main(int argc, char **argv)
{
int i,j,ADData,lastADData,count=0;
char Revdata[10];
//////////////A, AB, B, BC, C CD, D, DA
int stepdata[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
ARMTargetInit(); //开发版初始化
init_MotorPort();
init_ADdevice();
for(;;)
{
begin:
Uart_Printf("\nBegin control DC motor.\t\tPress any key to control step motor.\n");
for(;;)
{
ADData=GetADresult(0);
Delay(10);
SetPWM((ADData-512)*MOTOR_CONT/1024);
Delay(10);
if((rUTRSTAT0 & 0x1)) //有输入,则跳出
{
*Revdata=RdURXH0();
goto next;
}
}
next:
SetPWM(0);
Uart_Printf("\nBegin control step motor.\tPress any key to control DC motor.\n");
lastADData=GetADresult(0);
Delay(10);
for(;;)
{
loop: if((rUTRSTAT0 & 0x1)) //有输入,则返回
{
*Revdata=RdURXH0();
goto begin;
}
ADData=GetADresult(0);
if(abs(lastADData-ADData)<20)
{
goto loop;
}
Delay(10);
count=-(ADData-lastADData)*12;
//(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/256为步距角,
//由于接了1/64减速器,两者之商再乘以64为步进电机相应转过的角度
if(count>=0)
{//转角大于零
for(j=0;j<count/8;j++)
{
for(i=0;i<=7;i++)
{
SETEXIOBITMASK(stepdata[i], 0xf0);
Delay(20);
}
}
}
else
{//转角小于零
count=-count;
for(j=0;j<count/8;j++)
{
for(i=7;i>=0;i--)
{
SETEXIOBITMASK(stepdata[i], 0xf0);
Delay(20);
}
}
}
lastADData=ADData;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -