哪位给个参考下吧,控制两个电机步数,就是写不出来
目的:对变压器线圈进行绕制
要求:一个主电机(绕线机),一个辅电机(排线机),主电机控制比较单一,就是通过PWM让它一直按照一定的速度转动。(tim2的1通道)
辅电机,通过每次改变PWM的
从而改变速度,同时当接受一定的PWM波之后,电机自动进行正反转。(辅电机用的tim2的2通道)
其实简单的说,就是控制两个步进电机,根据第一个的速度,根据一定的公式转换,每次改变辅电机接收的PWM从而改变辅电机速度,同时控制正反转次数。就是对一个线包,一层层的绕。
之前第一次发帖子描述清楚些,但是居然发失败了,这次自己都不知道描述清楚没,但愿有哪位大哥做过,能给点参考程序。
其中一个驱动电机图。
绕线机子程序:
void tim2_config(void)
{
tim_timebaseinittypedef tim2_timebasestructure;
tim_ocinittypedef tim2_ocinitstrure;
gpio_inittypedef gpio_initstructure;
RCC_apb2periphclockcmd(rcc_apb2periph_gpio|rcc_apb2periph_afio,enable);
rcc_apb1periphclockcmd(rcc_apb1periph_tim2,enable);
gpio_initstructure.gpio_pin=gpio_pin_0;
gpio_initstructure.gpio_mode=gpio_mode_af_pp;
gpio_initstructure.gpio_speed=gpio_speed_50Mhz;
gpio_init(gpioa,&gpio_initstructure);
tim2_timebasetructure.tim_period=1000-1;
tim2_timebasetructure.tim_prescaler=72-1;
tim2_timebasetructure.tim_countermode=tim_countermode_up;
tim_timebaseinit(tim2,&tim2_timebasestructure);
tim2_ocinittructure.tim_ocmode_pwm1;
tim2_ocinittructure.tim_ocpolarity=tim_ocpolarity_high;
tim2_ocinittructure.tim_outputstate=tim_outputstate_enable;
tim2_ocinittructure.tim_pulse=200;
tim_oc1init(tim2,&tim2_ocinitstructure);
tim_oc1preloadconfig(tim2,tim_ocpreload_enable);
tim_arrpreloadconfig(tim2,enable);
Tim_clearitpendingbit(tim2,tim_it_cc1);
Tim_itconfig(tim2,tim_it_cc1,enable);
tim_cmd(tim2,disable);
}
viod nvic_config();
{
nvic_inittypedef nvic_initstructure;
nvic_prioritygroupconfig(nvic_prioritygroup_2);
nvic_initstructure.nvic_irqchannel=tim2_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority=1;
nvic_initstructure.nvic_irqchannelsubpriority=0;
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_init(&nvic_initstructure);
}
viod tim2_irqhandler(void)
{
if(tim_getitstatus(tim2,tim_it_cc1)!=reset)
{
tim_clearitpendingbit(tim2,tim_it_cc1);
step1++;
if(step1==800)
{
stepa1++;
}
if(stepa1==n1)
{
stepa0++;
stepa1=0;
}
if(stepa0==n0)
{
tim_cmd(tim2,disable);
}
}
}
其中自己用到的自己定义的变量
|