📄 motor.c
字号:
#include <LPC213X.h>
#include "MOTOR.h"
#include "..\KEY\KEY.h"
void CAPTURE_INIT()
{
PINSEL1 |=1<<13;
PINSEL1 |=1<<27;
T0PR = 10; // 分频系数
T0CTCR = (0x02 << 0) | // 计数器,在CAP的下降沿递增
(0x03 << 2); // 选择CAPn.2
T0TC = 0;
T0TCR = 0x01; // 启动定时器
}
void PWM_INIT(void)
{
PINSEL1 |=1<<10;
PINSEL0 |=1<<15;
/* PWM初始化 */
PWMPR = 0x00; // 不分频,计数频率为Fpclk
PWMMCR = 0x02; // 设置PWMMR0匹配时复位PWMTC
PWMPCR = 0x2400; // 允许PWM1,PWM3输出,单边PWM
PWMMR0 = 12000000 / 20000;
PWMMR2 = PWMMR0/3; // 50%占空比
PWMMR5 = PWMMR0/3; // 50%占空比
PWMLER = 0x25; // PWM0和PWM1,PWM3匹配锁存
PWMTCR = 0x02; // 复位PWMTC
PWMTCR = 0x09; // 启动PWM输出
}
void MOTOR_INIT(void)
{
IO0DIR |=BR;
IO1DIR |=JDQ;
IO1DIR |=EN;
//IO0DIR |=FR1;
//IO0DIR |=FR2;
IO0CLR |=BR;
IO1CLR |=JDQ;
IO1CLR |=EN;
// IO0SET |=FR1;
// IO0CLR |=FR2;
PWM_INIT();
}
void MOTOR_FORWARD(void)
{
IO0SET |=BR;
IO1SET |=JDQ;
IO1SET |=EN;
// IO0SET |=FR1;
// IO0CLR |=FR2;
}
void MOTOR_BACK(void)
{
IO0SET |=BR;
IO1SET |=JDQ;
IO1SET |=EN;
// IO0CLR |=FR1;
// IO0SET |=FR2;
}
void KEY_DELAY()
{
int i=0;
for(i=1000000;i>0;i--) {}
}
void MOTOR_RUN(void)
{
MOTOR_FORWARD();
switch(KEY_READ())
{
case S2: {
PWMMR2=PWMMR2+10;
PWMMR5=PWMMR2;
if(PWMMR2>=PWMMR0) {PWMMR2=PWMMR0;PWMMR5=PWMMR2;}
break;
}
case S5: {
PWMMR2=PWMMR2-10;
PWMMR5=PWMMR2;
if(PWMMR2<=PWMMR0/4) {PWMMR2=PWMMR0/4;PWMMR5=PWMMR0/4;}
break;
}
default : {
break;
}
}
PWMLER = 0x25;
KEY_DELAY();
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -