久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1045|回復: 12
收起左側

51單片機驅動編碼器

[復制鏈接]
ID:350682 發表于 2024-11-13 21:53 | 顯示全部樓層 |閱讀模式
請教一下,51單片機驅動編碼器實現計數功能,如果慢速轉動,就正常計數,如果快速轉動,直到停下來才計數一次,這個快速轉動計數怎樣才能實現呢?我的想法是通過定時器計時,測兩次轉動之間的時間,高于一個時間就認為是慢速轉送,低于一個時間就認為是快速轉動,但是這個時間設定為多少合適呢?
回復

使用道具 舉報

ID:161164 發表于 2024-11-14 13:25 | 顯示全部樓層
用一個定時器+一個外部中斷來記錄脈沖信號
外部中斷每收到一個脈沖就對變量加1
定時器定時統計變量的值
回復

使用道具 舉報

ID:350682 發表于 2024-11-14 16:12 | 顯示全部樓層
lkc8210 發表于 2024-11-14 13:25
用一個定時器+一個外部中斷來記錄脈沖信號
外部中斷每收到一個脈沖就對變量加1
定時器定時統計變量的值

有例程嗎?我現在不是使用的中斷來判斷,是直接判斷AB的電平區分正轉還是反轉
回復

使用道具 舉報

ID:161164 發表于 2024-11-14 17:13 | 顯示全部樓層
piscest_x 發表于 2024-11-14 16:12
有例程嗎?我現在不是使用的中斷來判斷,是直接判斷AB的電平區分正轉還是反轉

可以參考我的貼子
http://www.zg4o1577.cn/bbs/dpj-209594-1.html
回復

使用道具 舉報

ID:350682 發表于 2024-11-14 22:42 | 顯示全部樓層
lkc8210 發表于 2024-11-14 17:13
可以參考我的貼子
http://www.zg4o1577.cn/bbs/dpj-209594-1.html

試用了你的程序,不太行,不是每次都能識別到
回復

使用道具 舉報

ID:1109793 發表于 2024-11-15 07:13 | 顯示全部樓層
自然是要有個反應速度問題,你要做到多快?用更快的芯片比如STM32的,甚至DSP會更快的。
回復

使用道具 舉報

ID:350682 發表于 2024-11-15 09:08 | 顯示全部樓層
xiaobendan001 發表于 2024-11-15 07:13
自然是要有個反應速度問題,你要做到多快?用更快的芯片比如STM32的,甚至DSP會更快的。

不需要很快,就手動旋轉編碼器計數,慢旋加1,快旋多次才加1,現在的問題就是怎么判斷是慢旋還是快旋
回復

使用道具 舉報

ID:1109793 發表于 2024-11-15 16:03 | 顯示全部樓層
piscest_x 發表于 2024-11-15 09:08
不需要很快,就手動旋轉編碼器計數,慢旋加1,快旋多次才加1,現在的問題就是怎么判斷是慢旋還是快旋

手動旋轉還有個分辨率問題,并且手動的速度范圍很大。
實際上比如我那個歐萬的示波器的那些旋鈕,都不是很好用。也可能很久都不用的問題吧。對于類似EC11那種,如果不是刻意快速旋轉的話,51是夠用了,不行可以把主頻搞到22.1184M,應該也可以了。
回復

使用道具 舉報

ID:1133081 發表于 2024-11-16 16:59 | 顯示全部樓層
piscest_x 發表于 2024-11-15 09:08
不需要很快,就手動旋轉編碼器計數,慢旋加1,快旋多次才加1,現在的問題就是怎么判斷是慢旋還是快旋

//T0中斷服務函數 周期10ms
void Timer0Interrupt() interrupt 1
{
        static unsigned int i;
    TH0 = 0xD8;
    TL0 = 0xF0;
        i++;
        if(i>=10)                                //100ms 調整到所需值以分辨快慢旋
        {
                i = 0;
                EX0 = 1;                        //開INT0中斷
                TR0 = 0;                        //關定時器0
        }
}

//INT0中斷服務函數
void INT0_Isr() interrupt 0 //EC11_A接外部中斷,EC11_B接任意IO口
{
        if(EC11_B)direction=1;         //正轉
        else direction=2;                //反轉               
        EX0 = 0;                                //關INT0中斷
        TR0 = 1;                                //開定時器0
        if(direction==1)num++;
        if(direction==2)num--;
}
回復

使用道具 舉報

ID:1136609 發表于 2024-11-16 17:48 | 顯示全部樓層
lkc8210 發表于 2024-11-14 13:25 | 只看該作者 用一個定時器+一個外部中斷來記錄脈沖信號 外部中斷每收到一個脈沖就對變量加1 定時器定時統計變量的值
回復

使用道具 舉報

ID:350682 發表于 2024-11-16 23:09 | 顯示全部樓層
WL0123 發表于 2024-11-16 16:59
//T0中斷服務函數 周期10ms
void Timer0Interrupt() interrupt 1
{

void INT0_ISR (void) interrupt 0
{
        if(last_A == 1&& BM_KEY_A == 0)
        {
                if(BM_KEY_B == 1)
                {
//                        encoder_show();
                        num++;
                }       
                else
                {
//                        encoder_show();
                        num++;
                }
        }
        last_A = BM_KEY_A;
        last_B = BM_KEY_B;
}
我這樣寫,有一個問題,就是旋轉編碼器,沒完全旋轉一格,就會被識別到,然后num++;
回復

使用道具 舉報

ID:1109793 發表于 2024-11-17 07:15 | 顯示全部樓層
論壇里面搜搜,有很多編碼器的內容
回復

使用道具 舉報

ID:1133081 發表于 2024-11-17 07:26 | 顯示全部樓層
piscest_x 發表于 2024-11-16 23:09
void INT0_ISR (void) interrupt 0
{
        if(last_A == 1&& BM_KEY_A == 0)

同樣的代碼在不同的硬件條件和不同的使用場景下不一定能正常工作,需要做相應的修改和仔細的調試。給你一個船用中速柴油機轉速傳感器的程序參考。兩個并列霍爾的輸出的信號與普通旋轉編碼器輸出的信號極為相似。 轉速傳感器.rar (1.89 KB, 下載次數: 0)

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91亚洲国产| 中文在线一区二区 | 色吧色综合| 精品国产久 | 色一情一乱一伦一区二区三区 | 99国内精品久久久久久久 | 欧美一二三 | 一区二区三区播放 | 一道本不卡 | 91精品国产91久久综合桃花 | 久久精品国产久精国产 | 羞羞视频网站 | 国产高清精品在线 | 亚洲成av人影片在线观看 | 久久久性色精品国产免费观看 | 成人性生交大片免费看r链接 | 日韩精品无码一区二区三区 | 成人免费精品视频 | 国产日韩久久 | 伊人看片| 日日夜夜天天 | 亚洲精品在线播放 | 亚洲精品专区 | 999久久久久久久 | 天天看天天操 | 国产一区二区在线免费 | 激情一区二区三区 | 日韩影院一区 | 国产精品视频不卡 | 午夜一级做a爰片久久毛片 精品综合 | 性色视频在线观看 | 欧美 日韩 国产 成人 在线 91 | 国产精品一区视频 | 久久久亚洲综合 | 91丨九色丨国产在线 | 国产玖玖 | 99久久99久久精品国产片果冰 | 黄 色 毛片免费 | 久久久www成人免费精品 | 污视频免费在线观看 | 天天色综网 |