MSP432P401步进电机使用
其实是电赛练手题里有一个1分钟转一圈的要求,就算我把占空比改到最小,也无法办到,证明普通电机无法办到这一点,只好用到步进电机。同时我们还要一个步进电机驱动,就是之后图片的大黑盒子DM542,大概100大洋左右。
代码部分
设置TIMER_A输出pwm
Timer_A_PWMConfig TIM0_PwmConfig2 =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_16,
7000,
TIMER_A_CAPTURECOMPARE_REGISTER_2,
TIMER_A_OUTPUTMODE_RESET_SET,
3750,
};
分析:细分数可以细分1/2/4/8/16/32,即每给一个脉冲转过角度(1.8/细分数)
如果要转360°,就要360/(1.8/细分数),假设细分数为32,就要给6400个脉冲转一圈,而一圈对应60s
时钟频12000000(在源程序中时钟源设置为12000000)/16(TIMER_A_CLOCKSOURCE_DIVIDER_16)/7500(之后会改)=100HZ
即0.01s内给一次脉冲,(6000个0.01s为1分钟)但实际上在这一分钟内给的是6400/6000=1.067个脉冲,修正后psc给7000比较合适,相当于缩短了周期6400/7000=0.91个脉冲
电机初始化
void TimerA0_Init()
{
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN4,GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN5,GPIO_PRIMARY_MODULE_FUNCTION);
Timer_A_generatePWM(TIMER_A0_BASE, &TIM0_PwmConfig1);
Timer_A_generatePWM(TIMER_A0_BASE, &TIM0_PwmConfig2);
}
直接角度输入
void set_Angle(float angle)`//这里我转化成角度来测试
{
delay_us(angle*4000);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN5);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN5);
}
主程序
void main(void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; // stop watchdog timer
TimerA0_Init();
// set_Angle(90);
while(1)
{
}
}
垃圾接线大家勉强看一下
EN+和-以及PUL-DIR-全部接地(共阴接法)
PUL+接pwm DIR+默认3.3V
A+A-接步进电机最左最右,B+B-接中间两个
VCC(接电源9-42V),咨询学长后知道,如果要转高速的话电压和电流也要增大,GND接电源GND
SW设置