完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我最近用直流电机做小车遇到了一个问题,不知道怎么回事,请大家帮我看看
问题: 为什么给L298N使能端有pwm控制后,不能控制电机正反转? 描述: 目标:实现单个直流电机PWM控速+正反转 硬件:STM32f407+l298n IO连接:ENA-PE5 (tiM9_CH1,用于输出pwm波) IN1-PE1 IN2-PE2 执行现象:电机更改占空比可调速,不论怎么更改IN1,IN2极性,都无法控制正反转 程序: void MOTOR_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOC clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); /* 配置电机驱动 IO 口为推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); } void TIM9_PWM_Init(u32 arr,u32 psc) { //此部分需手动修改IO口设置 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE); //TIM9时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //使能PORT时钟 GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9); //GPIO复用为定时器9 GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9); //GPIO复用为定时器9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6; //GPIO5,6 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOE,&GPIO_InitStructure); //初始化PE5 TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);//初始化定时器9 //初始化TIM14 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性低 TIM_OC1Init(TIM9, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM9 OC1 TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Enable); //使能TIM9在CCR1上的预装载寄存器 //初始化TIM14 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性低 TIM_OC2Init(TIM9, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM9 OC1 TIM_OC2PreloadConfig(TIM9, TIM_OCPreload_Enable); //使能TIM9在CCR1上的预装载寄存 TIM_ARRPreloadConfig(TIM9,ENABLE);//ARPE使能 TIM_Cmd(TIM9, ENABLE); //使能TIM } int main(void) { //u16 led0pwmval=0; //u8 dir=1; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //初始化延时函数 uart_init(115200);//初始化串口波特率为115200 LED_Init(); TIM9_PWM_Init(2000-1,21-1); IN1=0; IN2=1; TIM_SetCompare1(TIM9,1600); //修改比较值,修改占空比 //TIM_SetCompare2(TIM9,1800); //修改比较值,修改占空比 while(1) { LED0=0; //LED0亮 LED1=1; //LED1灭 delay_ms(500); LED0=1; //LED0灭 LED1=0; //LED1亮 delay_ms(500); } }根据这个来弄 |
|
相关推荐
3个回答
|
|
一个个信号测量。
首先L298N电源是否足够?不给PWM的时候,是否可以正反转? 然后,检查IN1~IN4的信号是否正常?电压值 然后,检查EN脚的PWM是否正常?电压值,波形什么的。 然后就应该能找到问题了 |
|
|
|
我用示波器检测了引脚。
那个控制IN1和IN2的芯片引脚中,IN1的那个一直高电平,IN2的那个一直低。 不论怎么控制引脚极性,都是IN1那个高, 然后,我把PWM波去掉,ENA端用跳帽。 IN1,IN2单独控制电机,可以正反转, 然后,去掉跳帽,加上PWM波,又如我所问的那样了 真的很费解,我到底哪里不对; 然后,我又用时钟两个通道控制IN1,IN2。跳帽ENA,既可以控速,又可以正反。 原子哥,我都要疯了,求救 |
|
|
|
说明你的IN1脚控制有问题!检查代码或者硬件即可
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4439 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
310浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
294浏览 2评论
310浏览 2评论
310浏览 2评论
352浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 00:23 , Processed in 0.865969 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号