搜索
bottom↓
回复: 15

疑惑关于stm32的霍尔接口“异或”问题

[复制链接]

出0入0汤圆

发表于 2010-2-8 14:13:39 | 显示全部楼层 |阅读模式
/* TIM3 clock source enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    /* Enable GPIOA, clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    /* Enable GPIOB, clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    GPIO_StructInit(&GPIO_InitStructure);
    /* Configure PA.06,07  PB.00 as Hall sensors input */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
   // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

  #define HALL_TIMER TIM3     
    // Timer configuration in Clear on capture mode
    TIM_DeInit(HALL_TIMER);
   
    TIM_TimeBaseStructInit(&TIM_HALLTimeBaseInitStructure);
    // Set full 16-bit working range
    TIM_HALLTimeBaseInitStructure.TIM_Period = U16_MAX;
    TIM_HALLTimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInit(HALL_TIMER,&TIM_HALLTimeBaseInitStructure);
                                                                        
    TIM_ICStructInit(&TIM_HALLICInitStructure);
    TIM_HALLICInitStructure.TIM_Channel = TIM_Channel_1;
    TIM_HALLICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
        #define ICx_FILTER (u8) 0x0B // 11 <-> 1333 nsec
        #define HALL_MAX_RATIO                ((u16)800u)

    TIM_HALLICInitStructure.TIM_ICFilter = ICx_FILTER;
   
    TIM_ICInit(HALL_TIMER,&TIM_HALLICInitStructure);
   
    // Force the HALL_TIMER prescaler with immediate access (no need of an update event)
    TIM_PrescalerConfig(HALL_TIMER, (u16) HALL_MAX_RATIO,
                       TIM_PSCReloadMode_Immediate);
    TIM_InternalClockConfig(HALL_TIMER);
//--------------------------------------------
    //Enables the XOR of channel 1, channel2 and channel3
    TIM_SelectHallSensor(HALL_TIMER, ENABLE);

//--------------------------------------------
TIM_SelectInputTrigger(HALL_TIMER, TIM_TS_TI1FP1);
    TIM_SelectSlaveMode(HALL_TIMER,TIM_SlaveMode_Reset);
   
    // Source of Update event is only counter overflow/underflow
    TIM_UpdateRequestConfig(HALL_TIMER, TIM_UpdateSource_Regular);
   
    /* Enable the HALL_TIMER IRQChannel*/

    NVIC_InitHALLStructure.NVIC_IRQChannel = TIM3_IRQChannel;
怎么在中断时接口读入得编码总是5,6,3这3个只值其他的1,2,4就是进不去,不知道怎么回事请高手赐教,谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-2-8 22:49:22 | 显示全部楼层
这个换不简单吗?因为你定义的是端口下降沿捕捉啊?所以就是每个奇数状态是下降沿,如果定义的是上升沿,那就是偶数状态触发了!呵呵!

出0入0汤圆

发表于 2010-2-9 08:49:51 | 显示全部楼层
回复【1楼】shnd  
这个换不简单吗?因为你定义的是端口下降沿捕捉啊?所以就是每个奇数状态是下降沿,如果定义的是上升沿,那就是偶数状态触发了!呵呵!
-----------------------------------------------------------------------

STM32做成XOR的话不是这样的

出0入0汤圆

 楼主| 发表于 2010-2-9 09:35:34 | 显示全部楼层
谢谢,没有办法只有在触发后极性反转,有时间了再看看有其他方法没有。

出0入0汤圆

发表于 2010-2-10 10:52:33 | 显示全部楼层
同疑惑中...

出0入0汤圆

发表于 2010-2-10 11:26:02 | 显示全部楼层
回复【3楼】wp007  
谢谢,没有办法只有在触发后极性反转,有时间了再看看有其他方法没有。
-----------------------------------------------------------------------

没仔细看你的配置程序。

你看一下库里是怎么弄的。参照一下库。

这个配置好了之后不用“在触发后极性反转”,这个XOR的效果是只要三个输入端有一个电平有变化,就会产生一个中断。我实际用起来就是这样的。

STM8的就要按照你说的“没有办法只有在触发后极性反转”。

出0入0汤圆

 楼主| 发表于 2010-4-16 09:26:57 | 显示全部楼层
是的在触发后极性反转,我没有使用预装载,我是检测出位置后再更新的pwm极性,自动触发是要预装载的。

出0入0汤圆

发表于 2010-4-16 14:38:50 | 显示全部楼层
回复【5楼】lollipop 天堂里没有猪头猪脑
回复【3楼】wp007   
谢谢,没有办法只有在触发后极性反转,有时间了再看看有其他方法没有。
-----------------------------------------------------------------------
没仔细看你的配置程序。
你看一下库里是怎么弄的。参照一下库。
这个配置好了之后不用“在触发后极性反转”,这个XOR的效果是只要三个输入端有一个电平有变化,就会产生一个中断。我实际用起来就是这样的。
STM8的就要按照你说的“没有办法只有在触发后极性反转”。
-----------------------------------------------------------------------

STM8用了hall XOR检测,还能互补输出么?STM8好像只有TIM1的CH123有XOR输入,hall检测和互补输出是冲突的。

出0入0汤圆

发表于 2010-10-6 20:25:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-28 13:32:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-19 14:10:41 | 显示全部楼层
楼主的问题解决了吗,我遇到同样的问题啊!

出0入0汤圆

发表于 2013-3-28 10:41:31 | 显示全部楼层
请问一下,楼主给的程序中TIM_TimeBaseInit这一段是干嘛用的,TIM_TimeBaseInit是用来设置TIM5的时间基数单位的,但是我不是很明白,谁能解释一下吗?

出0入0汤圆

发表于 2013-10-17 19:44:21 | 显示全部楼层
学习下,谢谢

出0入0汤圆

发表于 2013-12-16 20:50:33 | 显示全部楼层
本帖最后由 虫虫好 于 2013-12-16 21:29 编辑
lollipop 发表于 2010-2-10 11:26
回复【3楼】wp007  
谢谢,没有办法只有在触发后极性反转,有时间了再看看有其他方法没有。
-------------- ...


兄台说的这个 只要有一个通道电平变化  就能检测到  这点我看中文手册  好像是这么回事, 但是看库  hall.c 代码  开了单沿 捕获 好像就是3个霍尔状态值   今天测试了下 也没得出什么结论   因为 电机霍尔 毛刺较多  

出0入0汤圆

发表于 2015-2-5 00:37:31 | 显示全部楼层
虫虫好 发表于 2013-12-16 20:50
兄台说的这个 只要有一个通道电平变化  就能检测到  这点我看中文手册  好像是这么回事, 但是看库  hall ...

确实,中断触发源设置了双边沿触发和单边沿触发都不顶用,同样是每个电角度周期3次。

出0入0汤圆

发表于 2015-2-5 01:00:35 | 显示全部楼层
lollipop 发表于 2010-2-10 11:26
回复【3楼】wp007  
谢谢,没有办法只有在触发后极性反转,有时间了再看看有其他方法没有。
-------------- ...

库里面只有上边沿和下边沿触发,分别是3,5,6   2,4,1
请问您在哪里找到双边沿触发的设置?库函数有个双边沿选项,貌似不是对这个应用。所以我猜测还是得“极性旋转”
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 03:41

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

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