在线时间14 小时
UID2087072
注册时间2016-8-15
NXP金币0
该用户从未签到
注册会员

- 积分
- 118
- 最后登录
- 2018-3-22
|
本是工业上步进电机的控制,电机为ss2302A42A.驱动器为MD2545.
驱动器和单片机采用差分的方式接法。
由于驱动器是最小为5v的供电驱动。因此根据官方开发板,自己做了一个最小系统板(上面就一个指示灯,2个按键,一个USB转串口)
硬件差不多就这样了。
软件来说:
主要是一个按键控制步进电机的正转60度,回原点
另外一个按键控制步进电机的反转60度,回原点。
程序是根据官方的pwm边沿的列子写的
void moto()
//SIM_RemapFTM2CH1Pin();
// SIM_RemapFTM2CH0Pin(); //使用的是默认的引脚PC1
/* FTM2 is set as edge aligned pwm mode, high true pulse */
FTM_PWMInit(FTM2, FTM_PWMMODE_EDGEALLIGNED, FTM_PWM_HIGHTRUEPULSE);
/* FTMEN enable */
FTM_SetFTMEnhanced(FTM2);
/* update MOD value */
FTM_SetModValue(FTM2, 9999); //2k的pWm
/* set clock source, start counter */
FTM_ClockSet(FTM2, FTM_CLOCK_SYSTEMCLOCK, FTM_CLOCK_PS_DIV1); //20M的系统时钟
/* enable FTM2 interrupt in NVIC */
NVIC_EnableIRQ(FTM2_IRQn);
/* setup call back function for interrupt */
FTM_SetCallback(FTM2, FTM2_Task);
/* enable FTM2 overflow interrupt */
FTM_EnableOverflowInt(FTM2);
}
中断服务函数
void FTM2_Task(void)
{
static uint16_t u16count;
if(u16count==jiaodu)
{
FTM_DisableOverflowInt(FTM2); //关中断,停止计数
FTM2->OUTMASK|=(1<<FTM_CHANNEL_CHANNEL1);//关pwm引脚输出
u16count=0;
}
FTM_SetModValue(FTM2, su[u16count]); //改变频率
FTM_ClrOverFlowFlag(FTM2); //2k的pWm
}
重要就是这两个函数吧,只是给了一个思路。
其中计数就是pwm的个数,也就是电机的角度。步进电机是一个脉冲一个角度,具体百度很多。从而可以转动60角度
至于按键控制,想必熟悉51的差不多都知道怎么写了。
重要的是步进电机如果需要高速度
频率是需要从一个低到高的上升。
FTM_SetModValue(FTM2, su[u16count]); //改变频率
就需要这个了,su[]这个数组里面放着根据实际情况的频率值。
基本核心的就这样。
后期会再会有更新的。
|
|