360度 EC11 旋转编码器模块 数字脉冲电位器
生活随笔
收集整理的這篇文章主要介紹了
360度 EC11 旋转编码器模块 数字脉冲电位器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、產品簡介
- 二、原理分析
- 三、程序設計
- 四、程序源碼
一、產品簡介
EC11旋轉編碼器廣泛用于車載DVD,車載導航,汽車影音上常被人稱為車載編碼器。編碼器主要用于頻率調節,高度調節,溫度調節及音量調節的參數控制。注意編碼器避免儲藏于高溫潮濕及腐蝕的場所,拆包裝后未使用完的剩余產品請在防潮防毒的環境下保存。
產品特點:
- 額定電壓:DC 5V
- 各相導線AB相:0.5mA(Max 5mA,Min 0.5mA)
- 公共導線C: 1 mA(Max 10mA,Min 0.5mA)
- 使用溫度范圍: -30℃~+80°c
輸出信號:
電氣性能:
接口說明:
二、原理分析
旋轉編碼器是一種機電裝置,可將軸的角運動,轉換為A/B兩相相位偏差90°的脈沖信號,其中C是A/B信號的參考地
-
根據A/B信號的相位關系可以獲取正反轉方向。
-
通過脈沖的計數可以獲取旋轉的步進數量。
-
根據脈沖在單位時間內的計數可以獲取角速度。
工作原理: 旋轉軸帶動兩組同軸柵格轉盤,柵格轉盤間存在一定的角度偏差,旋轉的柵格會對發光二極管發出的光信號進行間斷遮擋,從而使光敏二極管產生高低電平變化。因為兩組柵格轉盤存在一定的角度偏差,所以會產生兩組相位90°偏差的A/B相信號。
A、B兩相都輸出方波時:
- 順時針方向旋轉,A相超前B 相90度;
- 逆時針方向旋轉,B相超前A 相90度;
三、程序設計
本篇設計為向右旋轉編碼器每產生一個脈沖,計數器+1,向左旋轉每產生一個脈沖,計數器-1,并通過oled將計數值顯示在屏幕上。
1. 引腳初始化
VCC和GND不必多說,首先對A,B相進行引腳初始化,這里我將A、B相分別接上PB0和PB1
2. 開啟外部中斷
將PB0和PB1設計為中斷源,且為下降沿觸發
3. 中斷配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&NVIC_InitStructure);4. 中斷函數
int16_t Encoder_Get(void) {int16_t Temp;Temp = Encoder_Count;Encoder_Count = 0;return Temp; }void EXTI0_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_Line0) == SET){/*如果出現數據亂跳的現象,可解除以下注釋,再次判斷引腳電平,以避免抖動*/ // if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0) // {if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){Encoder_Count --;} // }EXTI_ClearITPendingBit(EXTI_Line0);} }void EXTI1_IRQHandler(void) {if (EXTI_GetITStatus(EXTI_Line1) == SET){/*如果出現數據亂跳的現象,可解除以下注釋,再次判斷引腳電平,以避免抖動*/ // if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) // {if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0){Encoder_Count ++;} // }EXTI_ClearITPendingBit(EXTI_Line1);} }5. main函數
int16_t Num;int main(void) {OLED_Init();Encoder_Init();OLED_ShowString(1, 1, "Num:");while (1){Num += Encoder_Get();OLED_ShowSignedNum(1, 5, Num, 5);} }四、程序源碼
有需要者 請留言評論區或私信
總結
以上是生活随笔為你收集整理的360度 EC11 旋转编码器模块 数字脉冲电位器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android应用开发-MP3音乐播放器
- 下一篇: nsis出错_nsis error解决方