娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月01日(星期日)

2019年06月01日 | STM32 正交編碼器代碼

發布者:乘風翻浪 來源: eefocus關鍵字:STM32  正交編碼器  代碼 手機看文章 掃描二維碼
隨時隨地手機看文章

/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************

* File Name          : stm32f10x_encoder.c 

* Author             : IMS Systems Lab  

* Date First Issued  : 21/11/07

* Description        : This file contains the software implementation for the

*                      encoder unit

********************************************************************************

* History:

* 21/11/07 v1.0

********************************************************************************

* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

*******************************************************************************/

/* Includes ------------------------------------------------------------------*/

#include "sys.h"

#include "uart.h"

#include "systim3.h"

 

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

#define ENCODER_TIMER                TIM3  // Encoder unit connected to TIM3

#define ENCODER_PPR           (u16)(900)   // number of pulses per revolution

#define SPEED_BUFFER_SIZE               8

 

#define COUNTER_RESET   (u16)0

#define ICx_FILTER      (u8) 6 // 6<-> 670nsec

 

#define TIMx_PRE_EMPTION_PRIORITY 1

#define TIMx_SUB_PRIORITY 0

 

#define SPEED_SAMPLING_FREQ (u16)(1000/(SPEED_SAMPLING_TIME+1))

 

/* Private functions ---------------------------------------------------------*/

s16 ENC_Calc_Rot_Speed(void);

 

/* Private variables ---------------------------------------------------------*/

static s16 hPrevious_angle, hSpeed_Buffer[SPEED_BUFFER_SIZE], hRot_Speed;

static u8 bSpeed_Buffer_Index = 0;

static volatile u16 hEncoder_Timer_Overflow; 

static bool bIs_First_Measurement = TRUE;

 

/*******************************************************************************

* Function Name  : ENC_Init

* Description    : General Purpose Timer x set-up for encoder speed/position 

*                  sensors

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void ENC_Init(void)

{

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  TIM_ICInitTypeDef TIM_ICInitStructure;

  

/* Encoder unit connected to TIM3, 4X mode */    

  GPIO_InitTypeDef GPIO_InitStructure;

  NVIC_InitTypeDef NVIC_InitStructure;

  

  /* TIM3 clock source enable */

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* Enable GPIOA, clock */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  

  GPIO_StructInit(&GPIO_InitStructure);

  /* Configure PA.06,07 as encoder input */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  

  /* Enable the TIM3 Update Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

 

  /* Timer configuration in Encoder mode */

  TIM_DeInit(ENCODER_TIMER);

  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

  

  TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling 

  TIM_TimeBaseStructure.TIM_Period = (4*ENCODER_PPR)-1;  

  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   

  TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);

 

  TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI12,//TIM_EncoderMode_TI12, 

                             TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

  TIM_ICStructInit(&TIM_ICInitStructure);

  TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER;

  TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);

  

 // Clear all pending interrupts

  TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);

  TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);

  //Reset counter

  ENCODER_TIMER->CNT = COUNTER_RESET;

  

  ENC_Clear_Speed_Buffer();

  

  TIM_Cmd(ENCODER_TIMER, ENABLE);  

}

 

/*******************************************************************************

* Function Name  : ENC_Get_Electrical_Angle

* Description    : Returns the absolute electrical Rotor angle 

* Input          : None

* Output         : None

* Return         : Rotor electrical angle: 0 -> 0 degrees, 

*                                          S16_MAX-> 180 degrees, 

*                                          S16_MIN-> -180 degrees                  

*******************************************************************************/

s16 ENC_Get_Electrical_Angle(void)

{

  s32 temp;

  

  temp = (s32)(TIM_GetCounter(ENCODER_TIMER)) * (s32)(U32_MAX / (4*ENCODER_PPR)); 

  return((s16)(temp/65536)); // s16 result

}

 

/*******************************************************************************

* Function Name  : ENC_Clear_Speed_Buffer

* Description    : Clear speed buffer used for average speed calculation  

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void ENC_Clear_Speed_Buffer(void)

{   

  u32 i;

 

  for (i=0;i  {

    hSpeed_Buffer[i] = 0;

  }

  bIs_First_Measurement = TRUE;

}

 

/*******************************************************************************

* Function Name  : ENC_Calc_Rot_Speed

* Description    : Compute return latest speed measurement 

* Input          : None

* Output         : s16

* Return         : Return the speed in 0.1 Hz resolution.                    

*******************************************************************************/

s16 ENC_Calc_Rot_Speed(void)

{   

  s32 wDelta_angle;

  u16 hEnc_Timer_Overflow_sample_one, hEnc_Timer_Overflow_sample_two;

  u16 hCurrent_angle_sample_one, hCurrent_angle_sample_two;

  signed long long temp;

  s16 haux;

  

  if (!bIs_First_Measurement)

  {

    // 1st reading of overflow counter    

    hEnc_Timer_Overflow_sample_one = hEncoder_Timer_Overflow; 

    // 1st reading of encoder timer counter

    hCurrent_angle_sample_one = ENCODER_TIMER->CNT;

    // 2nd reading of overflow counter

    hEnc_Timer_Overflow_sample_two = hEncoder_Timer_Overflow;  

    // 2nd reading of encoder timer counter

    hCurrent_angle_sample_two = ENCODER_TIMER->CNT;      

 

    // Reset hEncoder_Timer_Overflow and read the counter value for the next

    // measurement

    hEncoder_Timer_Overflow = 0;

    haux = ENCODER_TIMER->CNT;   

    

    if (hEncoder_Timer_Overflow != 0) 

    {

      haux = ENCODER_TIMER->CNT; 

      hEncoder_Timer_Overflow = 0;            

    }

     

    if (hEnc_Timer_Overflow_sample_one != hEnc_Timer_Overflow_sample_two)

    { //Compare sample 1 & 2 and check if an overflow has been generated right 

      //after the reading of encoder timer. If yes, copy sample 2 result in 

      //sample 1 for next process 

      hCurrent_angle_sample_one = hCurrent_angle_sample_two;

      hEnc_Timer_Overflow_sample_one = hEnc_Timer_Overflow_sample_two;

    }

    

    if ( (ENCODER_TIMER->CR1 & TIM_CounterMode_Down) == TIM_CounterMode_Down)  

    {// encoder timer down-counting

      wDelta_angle = (s32)(hCurrent_angle_sample_one - hPrevious_angle - 

                    (hEnc_Timer_Overflow_sample_one) * (4*ENCODER_PPR));

    }

    else  

    {//encoder timer up-counting

      wDelta_angle = (s32)(hCurrent_angle_sample_one - hPrevious_angle + 

[1] [2]
關鍵字:STM32  正交編碼器  代碼 引用地址:STM32 正交編碼器代碼

上一篇:示波器調試RS485通信波形圖
下一篇:stemwin 使用GUI_EndDialog切換頁面死機的解決

推薦閱讀

018年5月31日,美國,圣何塞 —— Synaptics(NASDAQ:SYNA)今日宣布其新一代性能增強版FS9500 Clear ID?光學屏幕指紋傳感器系列產品已被小米用于其全新旗艦小米8透明探索版智能手機。基于Synaptics成熟的光學屏幕指紋傳感性能和技術、先進的光學優化算法以及在用戶體驗設計方面的專業能力,全球最大的智能手機制造商之一小米選擇了Synaptics。 ...
當今游戲產業發展迅速,電競項目喜獲亞運會資格,世界范圍內舉辦的大大小小比賽無數,而專門為游戲設置的學科也以納入某些專科學校,VR/AR的加入更使游戲行業邁入新的天地,催生出更多新的崗位,為此孕育而生的人才比比皆是。 而游戲從制作到發行背后環環相扣,在5G,VR/AR日益滲透進生活的今天,如何推動行業發展,幫助游戲制造企業更好的維護,改進,提...
路透社報道,英國首相鮑里斯·約翰遜(Boris Johnson)的發言人周五表示,英國在1月份開始尋求進入5G電信市場的企業,政府正在與美國等盟友討論此事。這位發言人表示:“我們在1月份就開始尋找新的參與者,以實現市場多元化,這也是我們一直在與包括美國在內的盟友討論的事情。” 另外,英國也在考慮美國對華為的新制裁可能產生的影響。據英國泰晤士報報道,...
據外媒報道,日產表示,受芯片短缺的影響,該公司將調整其生產計劃。6月份該公司位于墨西哥的三座工廠將停工數天,具體停產日期不詳。 (圖片來源:日產) 6月內,日產位于阿瓜斯卡連特斯(Aguascalientas)的1號工廠將停產7天,2號工廠則將關閉一天。該公司并未具體說明將在那幾天暫停生產。阿瓜斯卡連特斯1號工廠負責裝配日產的Versa、Kicks和March車型...

史海拾趣

問答坊 | AI 解惑

AVR比51好在哪里

我原來都用51,聽說AVR速度又快又抗干擾,是這樣嗎?AVR比51究竟好在哪里?…

查看全部問答∨

請教:如何解決繼電器干擾4013

我設計制作了一控制電路,用4013制作了個單穩態和雙穩態,控制信號觸發單穩態,單穩態觸發雙穩態,雙穩態通過9014控制繼電器。開始調試還可以,后來繼電器就嚴重干擾了雙穩態指使雙穩態電路自動多次轉換狀態。可以判定繼電器的干擾沒有干擾單穩態及 ...…

查看全部問答∨

怎么用FPGA實現多路信號綜合成一路信號?

將多路的數字信號綜合成一路信號 再將此信號送入DAC轉化成模擬信號應用…

查看全部問答∨

單片機能實現FTP或者TFTP嗎?

本人使用LCP2368的ARM7內核8位單片機,不知道能否實現FTP或者TFTP的功能。他只有512K的Flash,有不能做外擴。請大大指教!…

查看全部問答∨

急啊,快瘋了.關于vxworks for powerpc的cache問題

使用的是powerpc的mpc860. 操作系統是vxworks. 我想禁止cache功能. 是不是在confih.h里直接undef user_i_cache_enable,undef user_d_cache_enable就可以了? 我的問題就出在這里. 我是這么做的,但是在調試的時候,還能看到對cache的初始化,包括 ...…

查看全部問答∨

關于vxworks接收廣播數據的問題!

我用的IP是10.125.131.198。對方廣播時,我用EtherPeek軟件能監視到廣播數據是發送到10.125.131.255的,可我的vxworks軟件就是收不到。但我把IP改到192.168.0.198之后,對方的廣播發送到192.168.0.255我就能收到了;或者對方把廣播IP改為10.255.255 ...…

查看全部問答∨

申請試用TI MSP-EXP430G2

申請試用TI MSP-EXP430G2觸摸式智能家居控制、安防控制和傳感器方面 10.15-10.31 板子開發環境和片上外設熟悉、測試11.1-11.10 產品功能設計、PCB繪制11.11-11.20 程序編寫、調試11.21-11.30 產品測試、發布心得體會和過程分 觸摸式控制居室燈光 ...…

查看全部問答∨

STM32F103增強型產品的基本信息

這是Datasheet的第一頁,連夜翻譯出來,供各位先睹為快。其他部分,我會很快譯出供大家參考。…

查看全部問答∨

LM3S9B92只用于USB HOST模式下USB0_VBUS和USB0_ID設置

LM3S9B92用于USB HOST模式下USB0_VBUS和USB0_ID是否必須要連接到VCC和GND嗎? 我看了文檔說在HOST模式下可以做普通GPIO口使用,但是不知道怎么使用 希望有TI專家幫忙解答一下!謝謝!…

查看全部問答∨

富士通FRAM心得提交

總體感覺使用方法跟傳統的相同接口的EEPROM方式一樣,程序兼容,另外發現無壞塊,EEPROM通常會有一些壞塊,我以前遇到過幾次,程序中要添加測試壞塊的代碼,另外還要使用程序進行屏蔽,FRAM卻可以保證每個存儲bit都是良好的,這在存儲效率上大大提 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 华坪县| 恩施市| 绥江县| 长沙市| 博湖县| 商丘市| 烟台市| 邻水| 达拉特旗| 本溪| 岳西县| 吉林省| 平谷区| 黑山县| 阿鲁科尔沁旗| 石泉县| 斗六市| 剑阁县| 江门市| 西峡县| 上饶市| 个旧市| 台南市| 乐亭县| 平定县| 济源市| 南汇区| 越西县| 龙门县| 方城县| 西充县| 文安县| 古浪县| 通河县| 青阳县| 五常市| 德令哈市| 南通市| 蒙阴县| 高阳县| 砚山县|