MCXN947开发板具有AI识别的潜能,为此给摄像头配置一个步进电机的云台,以调整摄像头的观察角度是件有意义的事。
这里选用的是4线式步进电机,其外观如图1所示。为了驱动该步进电机,该需为其配置一个由ULN2003芯片构成的驱动器。
图1 步进电机及驱动器
为驱动该步进电机,所配置的正转一周的函数为:
void Forward(uint32_t n)
{
unsigned char X,Y;
for(X=0;X<64;X++)
{
for(Y=0;Y<8;Y++)
{
MDL;
MAH; //A
delay_ms(n);
MBH; //AB
delay_ms(n);
MAL; //B
delay_ms(n);
MCH; //BC
delay_ms(n);
MBL; //C
delay_ms(n);
MDH; //CD
delay_ms(n);
MCL; //D
delay_ms(n);
MAH; //DA
delay_ms(n);
}
}
}
步进电机正反转测试主程序:
int main(void)
{
uint8_t i,n,f,m;
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};
gpio_pin_config_t key_config = {
kGPIO_DigitalInput,
0,
};
CLOCK_SetClkDiv(kCLOCK_DivFlexcom4Clk, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
CLOCK_EnableClock(kCLOCK_Gpio0);
CLOCK_EnableClock(kCLOCK_Gpio1);
BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
GPIO_PinInit(GPIO0, 25U, &led_config);
GPIO_PinInit(GPIO0, 26U, &led_config);
GPIO_PinInit(GPIO0, 24U, &led_config);
GPIO_PinInit(GPIO0, 27U, &led_config);
GPIO_PinInit(GPIO0, 6U, &key_config);
delay();
MAL;
MBL;
MCL;
MDL;
delay();
f=0;
m=5;
for(i=0;i<m;i++)
{
if((GPIO_PinRead(GPIO0, 6U))==0)
{
Forward(1);
}
else
{
reverse(1);
}
delay();
}
while (1);
}
经程序的编译和下载,其运行效果如图2所示,说明驱动成功。
图2 运行中
|