智能小车,上电自动转动,发热冒烟
本帖最后由 fangxiaoyan 于 2014-5-6 17:45 编辑目的是做一个智能吸尘器,现在的方案是买的吸尘器产品,保留了传感器、电源板,传感器板上的单片机用stm32 取代(单独做了一个stm32主控板),传感器上的信号只测了大概连接特性。
测试方案:剪短单片机电源引脚,使用stm32 供电、发出控制信号
测试现象:传感器板发热,冒烟,上电时不按启动键,它自动转动;去掉stm32,接好单片机的电源脚,上电处于正常的不动状态,按键时转动,但是转向不灵敏,容易停下,电机的h桥发热。。
电源板正常,没有电源短路:传感器板上的stm32引脚也没有短路;那问题应该在哪?如果是底板的电路没测明白那该怎么办?有木有人提供下解决方案? 会不会是H桥死区没控制好 wpy 发表于 2014-5-6 18:57
会不会是H桥死区没控制好
测得电路如图,没看懂怎么导通的。H为固定的电平,pwm变化,初始化时两者都为高,转动时pwm为脉冲。软件中没有增加死去延时。。
软件的配置如下,没有加入多的延时
TIM3_PWM_off(void)//电机停止 H-H
{GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_6 | GPIO_Pin_7);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_6);//H1
GPIO_SetBits(GPIOA,GPIO_Pin_7);//H2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//PB0复用为TIM3的通道3
TIM_Cmd(TIM3,DISABLE);
GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_0 |GPIO_Pin_1);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0);//pwm1
GPIO_SetBits(GPIOB,GPIO_Pin_1);//pwm2
}
导通的函数
void TIM3_PWM_Init(void)//前进 H-PWM ,吸尘电机
{
CCR3_Val = 1530;
CCR4_Val = 1530;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_6 | GPIO_Pin_7);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //PA6,PA7为高
//PB0,PB1为定时器的输出
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射TIM3_CH2->PB5
/*GPIOB Configuration: TIM3 channel 1 and 2 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;
/* PWM信号电平跳变值 */
// u16 CCR3_Val = 800;
// u16 CCR4_Val = 800;
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 2350-1; //当定时器从0计数到999,即为1000次,为一个定时周期 ,900us
TIM_TimeBaseStructure.TIM_Prescaler = 72-1; //设置预分频:不预分频,即为1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分频系数:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val; //设置通道3的电平跳变值,输出另外一个占空比的PWM
TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low;//当定时器计数值小于CCR1_Val时为H高电平
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //使能通道3
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
/* PWM1 Mode configuration: Channel4 */
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val; //设置通道4的电平跳变值,输出另外一个占空比的PWM
TIM_OC4Init(TIM3, &TIM_OCInitStructure); //使能通道4
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE); // 使能TIM3重载寄存器ARR
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE);
}
这个桥2个输入端一个是正传的一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧。 kebaojun305 发表于 2014-5-6 20:40
这个桥2个输入端一个是正传的一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧 ...
它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。 fangxiaoyan 发表于 2014-5-6 21:15
它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。 ...
不冒烟才 怪呢。本身PWM输入就是一个方向 H输入是一个方向 你2个都输入肯定H桥直接导通了。 kebaojun305 发表于 2014-5-6 20:40
这个桥2个输入端一个是正传的一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧 ...
同时为高所以短路。明白了。。那楼主这个需要考虑死区时间么?三极管手册上没有这个参数啊 fangxiaoyan 发表于 2014-5-6 21:24
同时为高所以短路。明白了。。那楼主这个需要考虑死区时间么?三极管手册上没有这个参数啊 ...
硬件 定死了屁死区时间。 kebaojun305 发表于 2014-5-6 21:25
硬件 定死了屁死区时间。
什么意思?避免不了上下管同时导通么? fangxiaoyan 发表于 2014-5-6 21:33
什么意思?避免不了上下管同时导通么?
楼主,刚测了完整的电路,如图,两信号同时为高不会短路。。 fangxiaoyan 发表于 2014-5-6 21:15
它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。 ...
既然恒定转向了,还搞啥H桥啊,直接一个三极管(或MOS)管搞定{:titter:} wpy 发表于 2014-5-6 22:49
既然恒定转向了,还搞啥H桥啊,直接一个三极管(或MOS)管搞定
有道理。。现在的想法是先定向转,再反向转。。 wpy 发表于 2014-5-6 18:57
会不会是H桥死区没控制好
死区时间怎么加进去?用软件延时么? wpy 发表于 2014-5-6 18:57
会不会是H桥死区没控制好
楼主,这个死区时间怎么控制? 本帖最后由 fangxiaoyan 于 2014-5-7 20:33 编辑
kebaojun305 发表于 2014-5-6 21:25
硬件 定死了屁死区时间。
楼主,这是我修改的电路图,H与0PWM没有互补关系,所以不存在死区时间。。
初始化都为高时,电机不转。我在在KEIL下写函数,H,PWM置高前处于低,如果时间太长,电机全通道,这个时间怎么跳过去?软件仿真的信号如图2所示 本帖最后由 kebaojun305 于 2014-5-8 10:21 编辑
fangxiaoyan 发表于 2014-5-7 20:27
楼主,这是我修改的电路图,H与0PWM没有互补关系,所以不存在死区时间。。
初始化都为高时,电机不转。我 ...
你首先理解下 什么叫死区时间 在你的图中死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时间你的电路中 软件根本就没有办法控制。如果你说的是正反转的时间那是另一码事 我的理解是上三极管由开到关,下三极管由关到开的过程中同时导通的时间。。 kebaojun305 发表于 2014-5-8 10:16
你首先理解下 什么叫死区时间 在你的图中死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时 ...
楼主,我的理解是上三极管由开到关,下三极管由关到开的过程中同时导通的时间。。 kebaojun305 发表于 2014-5-8 10:16
你首先理解下 什么叫死区时间 在你的图中死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时 ...
http://blog.sina.com.cn/s/blog_9ed154af01016c4d.html,这是我参考的文章。。图3的原理图与我的类似。。 本帖最后由 kebaojun305 于 2014-5-8 20:39 编辑
你这个电路中我不知道你老是在整这个死区时间干吗难道你的电机要以几十K的频率正反转(虽然说的有点夸张)。你自己的电路 你还是根本就没有看懂。 似懂非懂,别人的电路。。一上电电机就转动,三极管发热。别人用单片机做的,我把控制器换成了stm32,附加了一些功能。 kebaojun305 发表于 2014-5-8 20:37
你这个电路中我不知道你老是在整这个死区时间干吗难道你的电机要以几十K的频率正反转(虽然说的有点夸 ...
楼主莫生气,刚学硬件,还在摸索中 kebaojun305 发表于 2014-5-8 20:37
你这个电路中我不知道你老是在整这个死区时间干吗难道你的电机要以几十K的频率正反转(虽然说的有点夸 ...
我的理解是21为高时,Q29截止,Q23跟着截止,桥上的Q4,Q8同时断开;21为0时,Q29导通,Q23跟着导通,桥上的Q4,Q8同时导通。22的作用一样。但Q31是做什么的了?Q29与Q23导通时出于放大还是饱和?(不懂的地方)
如果要驱动电机,可以固定21为高,22为PWM.若有反向转则将两个信号换一下。。
页:
[1]