完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题由来
在综合实例 利用ZigBee模块实现智能家居的远程语音控制 中,用到了步进电机,有的网友问我,应该买一个什么样的步进电机呢? 其实底板上的L298N电路是一个步进电机驱动的通用电路,不一定要买跟我一模一样的步进电机。 我们随便选择一个步进电机都是可以的,为了控制方便,我们这里选择一个常见的5V的步进电机:28BYJ-48。 正是因为内部有这么多齿轮,所以此步进电机为一个减速电机。 解决问题 28BYJ-48步进电机与L298N驱动芯片的接法 改进综合实例中步进电机的驱动方式 程序源码及结果展示 步进电机的驱动方法,详见如下视频教程: 本文测试工程源码的获取方式在上面展示视频中获取。 欢迎关注小哈哥的视频号,更多精彩敬请期待。 开发环境与工具 Keil 5 主芯片为STM32F103RET6 电路使用的是202008综合实例的底板 下载工具为JLINK PC为Win10 步进电机的型号为:28BYJ-48 主要技术参数 步进电机28BYJ-48为5线4相八拍电机,额定电压有5V,还有6V、12V、24V的。 其中: 28:步进电机的直径为28mm 48:表示四相八拍 电机的减速比:1/64 步距角:5.625°/64=0.08789度(因为减速比是1/64) 所以对于此步进电机,4096个脉冲转一圈(64×64)。 驱动方法 此步进电机一共有5根线,红色是公共端,接5V电源,4橙(A),3黄(B),2粉(C),1蓝(D)。 步进电机要想转动,必须加驱动,步进电机的驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止。 加上适当的脉冲信号,步进电机就会以一定的角度转动,转动的速度和脉冲的频率成正比。 八拍步进电机控制时序为:A-AB-B-BC-C-CD-D-DA-A … ,一拍转一个步距角,如此反复。 对应各个线的高低电平如下所示: [tr]橙黄粉蓝十六进制[/tr]10000x08 11000x0C 01000x04 01100x06 00100x02 00110x03 00010x01 10010x09 由上我们可以定义旋转相序: uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时针旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时针旋转相序表 原理图 橙、黄、粉、蓝四根线分别与 StepMotor_OUT1、 StepMotor_OUT2、 StepMotor_OUT3、 StepMotor_OUT4 相连,通过改变StepMotor_IN1~StepMotor_IN4 引脚的高低电平,StepMotor_OUT1~StepMotor_OUT4 对应输出同向高低电平。 因为步进电机上为XH2.54-5P的胶壳插头,而底板是XH2.54-6P的胶壳直针座,所以我们要对其进行一下改造。 因为步进电机的红线需要连接5V,即VCC连接5V,L298N的VS也需要连接5V,所以我们要将板子上的JP8三个引脚短接到一起。 改造后的结果展示如下: 代码实现 定时器初始化 随便选择STM32的一个定时器即可,我们这里以定时器3为例: //定时器3初始化 //arr:定时重装值 //psc:分频值 void TIM3_Init(uint16_t arr, uint16_t psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开启TIM3时钟 //定时器3配置,重载值、分频值、分频系数、计数模式 TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler = psc; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //允许定时更新中断 //中断配置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE); //使能定时器3 } main函数中,调用上面的函数对定时器进行初始化: TIM3_Init(19,7199); //2ms中断 TIM3_Set(0); //定时器初始状态为关闭状态 定时器中断处理函数 定时器3每2ms执行一次中断服务函数,在中断服务函数中,改变L298N四个输入引脚的状态,完成步进电机的一拍,如果想要让28BYJ-48型步进电机旋转一圈,需要执行下面中断服务函数64*64次,即步进电机运转64*64拍。 //定时器3中断服务程序 void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//是更新中断 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIM3更新中断标志 nCurrentMotorStepCount++; if(nCurrentMotorStepCount 《= MOTOR_STEP_COUNT) { SetMotor(PhaseCW[nCurrentMotorStepCount%8]); //SetMotor(PhaseCCW[nCurrentMotorStepCount%8]); } if(nCurrentMotorStepCount 》= MOTOR_STEP_COUNT) { TIM_Cmd(TIM3, DISABLE); //关闭TIM3 L298N_12ENA = 0; //只有转的时候使能,否则持续供电,芯片和电机过热。 L298N_34ENA = 0; nCurrentMotorStepCount = 0; } } } 当步进电机行进了预定拍数之后,关闭定时器,并将L298N芯片的两个使能引脚置为低电平,步进电机将停止运动。 步进电机行进一拍 每一拍中我们都需要改变一次L298N四个输出引脚的状态,即需要改变L298N的四个输入引脚状态,下面封装了一拍状态下,对与L298N芯片相连的STM32的四个引脚进行赋值的函数: void SetMotor(unsigned char InputData) { if(InputData&0x01) { GPIO_SetBits(GPIOC,GPIO_Pin_13); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_13); } if(InputData&0x02) { GPIO_SetBits(GPIOC,GPIO_Pin_1); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_1); } if(InputData&0x04) { GPIO_SetBits(GPIOC,GPIO_Pin_2); } else { GPIO_ResetBits(GPIOC,GPIO_Pin_2); } if(InputData&0x08) { GPIO_SetBits(GPIOA,GPIO_Pin_0); } else { GPIO_ResetBits(GPIOA,GPIO_Pin_0); } } 使能步进电机启动 要想步进电机启动,我们只需要开启定时器,并将L298N芯片的两个使能引脚置为高电平,步进电机将开始运动。 TIM3_Set(1); nCurrentMotorStepCount = 0; L298N_12ENA = 1; L298N_34ENA = 1; |
|
|
|
只有小组成员才能发言,加入小组>>
4345个成员聚集在这个小组
加入小组3287 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4232 浏览 1 评论
4238 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:57 , Processed in 0.691853 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号