OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22455|回复: 23

刹车输入功能问题

[复制链接]

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
发表于 2013-7-14 11:13:52 | 显示全部楼层 |阅读模式

我用的是MiniSTM32的开发板
问题:1.通过TIM1_BKIN(PB12脚引脚输入高电平,但是MOE还是没反应,即不能刹车
         2.不管怎么改变OIS1,OIS1N的值,用软件产生刹车后,OC1和OC1N一直输出低电平

主模块:

#include "sys.h"
#include "usart.h"
#include "sa.h"

int main(void)
{
    Stm32_Clock_Init(9);
    uart_init(72,9600);
     TIM1_PWM_Sa_Init(0XFFFF,0,0XFF);     //预分频9,PWM频率=72000000/9/400=20khz
     while(1)
  {
       
   }

    
}

刹车函数:


#include "sa.h"

void TIM1_PWM_Sa_Init(u16 arr,u16 psc,u16 ccr1)   
{
    RCC->APB2ENR|=1<<11;      //TIM1时钟使能   
    RCC->APB2ENR|=1<<2;       //GPIOA时钟使能
    RCC->APB2ENR|=1<<3;       //GPIOB时钟使能
   
    GPIOA->CRH&=0XFFFFFFF0;   // 清除原来配置
    GPIOA->CRH|=0X0000000B;   //PA.8复用功能输出 推挽式   
    GPIOA->ODR|=1<<8;         //PA.8上拉
 
    GPIOB->CRH&=0XFFF0FFFF;   // 清除原来配置
    GPIOB->CRH|=8<<16;       //PB.12配置为上拉/下拉输入模式
    GPIOB->ODR&=~(1<<12);   //PB.12下拉

    GPIOB->CRH&=0XFF0FFFFF;   //清除原来配置
    GPIOB->CRH|=0X00B00000;   //PB.13复用功能输出 推挽式   
    GPIOB->ODR|=1<<13;        //PB.13上拉
 
    TIM1->CCMR1|=7<<4;     //CH1 PWM1模式
    TIM1->CR1|=1<<5;   //CMS[1:0]=01
    TIM1->CCR1=ccr1;
    TIM1->ARR=arr;         //设定计数器自动重装值fPWM=fCK_CNT/(ARR[15:0]+1)
    TIM1->SC=psc;         //预分频器设置 fCK_CNT=fck_PSC/(PSC[15:0]+1)
    TIM1->BDTR|=0xCD;      //72Mhz算,死区时间=13.89nsX(32+DTG)X8=5us 
   
 
   
    TIM1->BDTR|=1<<13;   //BKR=1,即刹车输入有效电平为高电平
    TIM1->BDTR|=1<<12;  //BKE=1,即开启刹车输入
    TIM1->BDTR|=1<<15;    //MOE=1,主输出使能
    TIM1->CR2&=~(1<<8);  //OIS1=0
    TIM1->CR2|=1<<9;//OIS1N=1
 

    TIM1->CCER|=0x01;      //CH1 OC1信号输出使能
    TIM1->CCER|=1<<2;      //CH1互补输出使能
    TIM1->DIER|=1<<7;  //BIE=1,即使能刹车中断 
    TIM1->CR1|=0x01;        //使能定时器1
    MY_NVIC_Init(2,0,TIM1_BRK_IRQChannel,2);
}         
 
刹车中断:

void TIM1_BRK_IRQHandler(void)
{
  printf("发生刹车\n");
  TIM1->SR&=~(1<<7);   //清除刹车中断标志
 
}



刹车.H文件

#ifndef  __SA_H
  #define __SA_H
  #include "sys.h"
  #include "usart.h"
  void TIM1_PWM_Sa_Init(u16 arr,u16 psc,u16 ccr1);
#endif


 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-14 15:01:18 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 11:04:04 | 显示全部楼层
BDTR寄存器的配置,需要有一个小延时
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-16 11:33:26 | 显示全部楼层
回复【3楼】lsj9383:
---------------------------------
有这事?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 11:47:20 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
TIM1->BDTR|=1<<13;   //BKR=1,即刹车输入有效电平为高电平
    TIM1->BDTR|=1<<12;  //BKE=1,即开启刹车输入
嗯,这样写好像不行,操作BKP和BKE,要延时一个周期才行,手册上说的。


只有
TIM1->BDTR|=1<<13; 
delay();//小延时
TIM1->BDTR|=1<<12;
dealy();//小延时
可以

或者
TIM1->BDTR|=1<<13|1<<12;

不然stm32的硬件会出问题。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 11:49:28 | 显示全部楼层

意思好像就是说,需要小延时一手。
实验来好像确实也是如此。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 11:55:52 | 显示全部楼层
而且这个刹车后,好像PWM口不能同时输出高电平。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-16 12:08:48 | 显示全部楼层
回复【5楼】lsj9383:
---------------------------------
谢谢指教
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 17:03:53 | 显示全部楼层
回复【7楼】lsj9383:
---------------------------------
对你说吧,你说的方法早用了,没用,还将输入TIM1_BK1N为浮空输入(手册上写的)。。。不都不行额
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 17:07:22 | 显示全部楼层
回复【9楼】ximilenfu:
---------------------------------
那为啥我刹车可以...
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 17:08:09 | 显示全部楼层
那你的代码肯定还有其他问题
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 17:08:26 | 显示全部楼层
回复【10楼】lsj9383:
---------------------------------
纳尼。。。求代码!!!唉唉唉。。。人品有问题哈。。。
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 17:12:44 | 显示全部楼层
回复【11楼】lsj9383:
---------------------------------
求代码。。。研究一下。。。这块俺的心病哈。。。
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 17:18:27 | 显示全部楼层
回复【11楼】lsj9383:
---------------------------------
诚恳求代码。。。。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 17:52:25 | 显示全部楼层
/*************************************************
function: 设置PWM刹车
param : no
return : no
**************************************************/
void WM_ProtectSet(void)
{
u8 t=10;

RCC->APB2ENR |= 1 << 3;
GPIOB->CRH &= 0xFFF0FFFF;
GPIOB->CRH |= 0x00080000;

if (SHUTDOWN_LEVEL == 1) //
TIM1->CR2 |= 1<<8 | 1<<10 | 1<<12;

switch (BK_LEVEL)
{
case 0: //低电平刹车有效
GPIOB->ODR |= 1<<12; //上拉PB12,高电平
TIM1->BDTR |= 1<<12 | 1<<10; //开启刹车功能,设置刹车极性为低电平.并开启默认电平
break;
case 1: //高电平刹车有效
GPIOB->ODR &= ~(1<<12); //
TIM1->BDTR |= 1<<13 | 1<<12 | 1<<10; //开启刹车功能,设置刹车极性为高电平.并开启默认电平
break;
default: break;
}
while(t--); //配置完刹车功能后,需要一个小延时,以完全写入寄存器
// TIM1->DIER |= 1<<7;   //BIE=1,即使能刹车中断
// MY_NVIC_Init(2,0,TIM1_BRK_IRQChannel,2);
}
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 19:30:58 | 显示全部楼层
回复【15楼】lsj9383:
---------------------------------
配置基本差不多。。。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 19:34:44 | 显示全部楼层
回复【16楼】ximilenfu:
---------------------------------
那你看看其他地方有没有配置错。
我配置的是3相6路的PWM波
回复 支持 反对

使用道具 举报

34

主题

119

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-6-15
在线时间
0 小时
 楼主| 发表于 2013-8-16 21:50:05 | 显示全部楼层
回复【17楼】lsj9383:
---------------------------------
唉唉。。。算了。还是研究我的“嵌入式Linux”,电机控制觉得还是DSP更好些,不过现在还没学
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-8-16 22:10:42 | 显示全部楼层
回复【18楼】ximilenfu:
---------------------------------
它的刹车确实设计的不好。
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-3-14
在线时间
0 小时
发表于 2014-3-17 15:28:42 | 显示全部楼层
我最近也在使用TIM1,就想用软件刹车,不使用硬件刹车。软件刹车是不是就是将BDTR的MOE位清0啊?求解!
回复 支持 反对

使用道具 举报

7

主题

123

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2014-3-5
在线时间
3 小时
发表于 2014-3-17 19:42:47 | 显示全部楼层
请问一下这个程序就是用于制动电机的吗?
回复 支持 反对

使用道具 举报

12

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-12-8
在线时间
15 小时
发表于 2018-2-24 09:30:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

12

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-12-8
在线时间
15 小时
发表于 2018-2-24 09:31:10 | 显示全部楼层
请问各位大神STM32F030用作控制电机    是否有缺陷
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2017-5-17
在线时间
46 小时
发表于 2019-10-29 14:27:06 | 显示全部楼层
这里说的刹车是什么意思
一灯大师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 19:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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