1、开发环境
LPC-2478STK+Keil+JINK
2、引脚配置和功能
其中相关的是
- AOUT1/AOUT2/BOUT1/BOUT2->A/B相输出
- DIR->方向输入,逻辑电平设置步进的方向;内部下拉电阻
- ENABLE->逻辑低电平将禁用器件输出;逻辑高电平则会启用
- M0/M1->电机细分
- DECAY0/1->衰减模式
- STEP->步进输入,上升沿使分度器前进一步
- nFAULT->故障指示
- nSLEEP->休眠模式输入
2.1、细分
2.2、衰减模式
2.3、功能模式
3、典型应用
4、功能实现
4.1、功能介绍
通过定时器2控制电机运动,以100khz的频率前进,定时器匹配后翻转电平,两个周期实现电机走一步,因为电机上升沿前进
4.2、引脚连接
- nSLEEP->3.3V
- ENABLE->3.3V
- OUT1/2/3/4->电机A/B相
- nFAULT->接地
- DECAY0/1->接地
- M0->3.3V M1->高阻态 256细分
- DIR->LPC2478的P0[6]
- STEP->LPC2478的P0[9]
4.3、代码
#include <LPC24xx.H>
#define drv8424_step_pin 9 // P0[9]
#define drv8424_dir_pin 7 // P0[7]
void IRQ_Timer2(void)
{
T2IR = 0xFF; /* 清除中断标志 */
VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
}
void timer_mat_init(void)
{
PINSEL0 &= ~(0x03 << (drv8424_step_pin*2));
PINSEL0 |= (0x03 << (drv8424_step_pin*2));
PCONP |= 1 << 22;
T2PR = 0; /* 分频 */
T2MCR = 0x03 << 9; /* 并且匹配时产生中断 */
T2EMR = 0x03 << 10; /* T2MR3匹配后MAT2.3输出翻转 */
T2MR3 = 12000000/100000; /* 100khz输出 */
T2TCR = 0x03;
VICIntSelect = 0x00; /* 所有的中断连接IRQ中断 */
VICVectPriority26 = 0x00; /* 设置中断优先级最高 */
VICVectAddr26 = (unsigned int)IRQ_Timer2; /* 设置中断服务程序地址 */
VICIntEnable = 1 << 26; /* 使能定时器 */
T2TCR = 0x01;
}
int main()
{
SCS |= 0x01;
PINSEL0 &= ~(0x03 << (drv8424_dir_pin*2));
FIO0DIR |= 0x01 << drv8424_dir_pin;
FIO0CLR |= 0x01 << drv8424_dir_pin;
timer_mat_init();
for(;;)
{
}
}