搜索
bottom↓
回复: 22

智能小车,上电自动转动,发热冒烟

[复制链接]

出0入0汤圆

发表于 2014-5-6 17:39:27 | 显示全部楼层 |阅读模式
本帖最后由 fangxiaoyan 于 2014-5-6 17:45 编辑

目的是做一个智能吸尘器,现在的方案是买的吸尘器产品,保留了传感器、电源板,传感器板上的单片机用stm32 取代(单独做了一个stm32主控板),传感器上的信号只测了大概连接特性。
测试方案:剪短单片机电源引脚,使用stm32 供电、发出控制信号
测试现象:传感器板发热,冒烟,上电时不按启动键,它自动转动;去掉stm32,接好单片机的电源脚,上电处于正常的不动状态,按键时转动,但是转向不灵敏,容易停下,电机的h桥发热。。

电源板正常,没有电源短路:传感器板上的stm32引脚也没有短路;那问题应该在哪?如果是底板的电路没测明白那该怎么办?有木有人提供下解决方案?

出10入18汤圆

发表于 2014-5-6 18:57:39 | 显示全部楼层
会不会是H桥死区没控制好

出0入0汤圆

 楼主| 发表于 2014-5-6 19:47:12 | 显示全部楼层
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_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_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);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2014-5-6 20:40:26 | 显示全部楼层
这个桥  2个输入端  一个是正传的  一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧。

出0入0汤圆

 楼主| 发表于 2014-5-6 21:15:41 | 显示全部楼层
kebaojun305 发表于 2014-5-6 20:40
这个桥  2个输入端  一个是正传的  一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧 ...

它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。

出0入8汤圆

发表于 2014-5-6 21:21:07 | 显示全部楼层
fangxiaoyan 发表于 2014-5-6 21:15
它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。 ...

不冒烟才 怪呢。  本身  PWM输入就是一个方向    H输入是一个方向   你2个都输入  肯定H桥直接导通了。

出0入0汤圆

 楼主| 发表于 2014-5-6 21:24:26 | 显示全部楼层
kebaojun305 发表于 2014-5-6 20:40
这个桥  2个输入端  一个是正传的  一个是反转的。 一次只能有一个信号有效。 你不会是2个同事输入信号了吧 ...

同时为高所以短路。明白了。。那楼主这个需要考虑死区时间么?三极管手册上没有这个参数啊

出0入8汤圆

发表于 2014-5-6 21:25:19 | 显示全部楼层
fangxiaoyan 发表于 2014-5-6 21:24
同时为高所以短路。明白了。。那楼主这个需要考虑死区时间么?三极管手册上没有这个参数啊 ...

硬件 定死了  屁死区时间。

出0入0汤圆

 楼主| 发表于 2014-5-6 21:33:26 | 显示全部楼层
kebaojun305 发表于 2014-5-6 21:25
硬件 定死了  屁死区时间。

什么意思?避免不了上下管同时导通么?

出0入0汤圆

 楼主| 发表于 2014-5-6 22:10:01 | 显示全部楼层
fangxiaoyan 发表于 2014-5-6 21:33
什么意思?避免不了上下管同时导通么?

楼主,刚测了完整的电路,如图,两信号同时为高不会短路。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入18汤圆

发表于 2014-5-6 22:49:09 | 显示全部楼层
fangxiaoyan 发表于 2014-5-6 21:15
它的原理应该是pwm为高时Q36,Q33导通,H为高时,Q32,Q37导通。。我想固定电机转向,所以加了H恒高。。 ...

既然恒定转向了,还搞啥H桥啊,直接一个三极管(或MOS)管搞定

出0入0汤圆

 楼主| 发表于 2014-5-7 13:07:12 | 显示全部楼层
wpy 发表于 2014-5-6 22:49
既然恒定转向了,还搞啥H桥啊,直接一个三极管(或MOS)管搞定

有道理。。现在的想法是先定向转,再反向转。。

出0入0汤圆

 楼主| 发表于 2014-5-7 13:08:06 | 显示全部楼层
wpy 发表于 2014-5-6 18:57
会不会是H桥死区没控制好

死区时间怎么加进去?用软件延时么?

出0入0汤圆

 楼主| 发表于 2014-5-7 20:01:57 | 显示全部楼层
wpy 发表于 2014-5-6 18:57
会不会是H桥死区没控制好

楼主,这个死区时间怎么控制?

出0入0汤圆

 楼主| 发表于 2014-5-7 20:27:10 | 显示全部楼层
本帖最后由 fangxiaoyan 于 2014-5-7 20:33 编辑
kebaojun305 发表于 2014-5-6 21:25
硬件 定死了  屁死区时间。


楼主,这是我修改的电路图,H与0PWM没有互补关系,所以不存在死区时间。。
初始化都为高时,电机不转。我在在KEIL下写函数,H,PWM置高前处于低,如果时间太长,电机全通道,这个时间怎么跳过去?软件仿真的信号如图2所示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

发表于 2014-5-8 10:16:07 | 显示全部楼层
本帖最后由 kebaojun305 于 2014-5-8 10:21 编辑
fangxiaoyan 发表于 2014-5-7 20:27
楼主,这是我修改的电路图,H与0PWM没有互补关系,所以不存在死区时间。。
初始化都为高时,电机不转。我 ...


你首先理解下 什么叫死区时间    在你的图中  死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时间  你的电路中   软件根本就没有办法控制。  如果你说的是正反转的时间  那是另一码事

出0入0汤圆

 楼主| 发表于 2014-5-8 14:17:35 | 显示全部楼层
我的理解是上三极管由开到关,下三极管由关到开的过程中同时导通的时间。。

出0入0汤圆

 楼主| 发表于 2014-5-8 14:18:27 | 显示全部楼层
kebaojun305 发表于 2014-5-8 10:16
你首先理解下 什么叫死区时间    在你的图中  死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时 ...


楼主,我的理解是上三极管由开到关,下三极管由关到开的过程中同时导通的时间。。

出0入0汤圆

 楼主| 发表于 2014-5-8 14:26:25 | 显示全部楼层
kebaojun305 发表于 2014-5-8 10:16
你首先理解下 什么叫死区时间    在你的图中  死区时间说的是 Q32 和Q36 (另一组是 Q37和Q33)切换的时 ...


http://blog.sina.com.cn/s/blog_9ed154af01016c4d.html,这是我参考的文章。。图3的原理图与我的类似。。

出0入8汤圆

发表于 2014-5-8 20:37:18 | 显示全部楼层
本帖最后由 kebaojun305 于 2014-5-8 20:39 编辑

你这个电路中  我不知道你老是在整这个死区时间干吗  难道你的电机要以几十K的频率正反转(虽然说的有点夸张)。  你自己的电路 你还是根本就没有看懂。

出0入0汤圆

 楼主| 发表于 2014-5-8 22:04:32 | 显示全部楼层
似懂非懂,别人的电路。。一上电电机就转动,三极管发热。别人用单片机做的,我把控制器换成了stm32,附加了一些功能。

出0入0汤圆

 楼主| 发表于 2014-5-8 22:06:04 | 显示全部楼层
kebaojun305 发表于 2014-5-8 20:37
你这个电路中  我不知道你老是在整这个死区时间干吗  难道你的电机要以几十K的频率正反转(虽然说的有点夸 ...

楼主莫生气,刚学硬件,还在摸索中

出0入0汤圆

 楼主| 发表于 2014-5-9 14:54:37 | 显示全部楼层
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.若有反向转则将两个信号换一下。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 18:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表