欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3754|回復(fù): 8
收起左側(cè)

3秒內(nèi)檢測不到觸發(fā)電平就證明電機(jī)卡主了

[復(fù)制鏈接]
ID:475031 發(fā)表于 2021-7-9 10:04 | 顯示全部樓層 |閱讀模式
51hei圖片_20210709095306.jpg

上圖我做的,平均1秒轉(zhuǎn)一圈,每轉(zhuǎn)一圈磁鐵觸發(fā)傳感器輸出一個(gè)低電平,

3秒內(nèi)檢測不到觸發(fā)電平就證明電機(jī)卡主了。輸出信號(hào)控制電機(jī)停止,朋友們,怎么寫個(gè)程序呢?求的思路,謝謝!


sbit KEY1=P2^0;//檢測端口接霍爾傳感器輸出端,低電平有效
sbit KEY2=P2^1;//輸出高電平,啟動(dòng)繼電器,斷開電源,或者接步進(jìn)電機(jī)控制器的  停止端
void main()
{        KEY1=1;//通電默認(rèn)高電平        
  KEY2=0;//通電默認(rèn)低電平   
while(1)
        {
                if(KEY1==0)          //讀P2.0引腳
                {

                        delay_ms(5); //延時(shí)10ms消抖
                        if(KEY1==0)         //再次判斷,防止干擾,增強(qiáng)穩(wěn)定
                        {





回復(fù)

使用道具 舉報(bào)

ID:539024 發(fā)表于 2021-7-9 12:42 | 顯示全部樓層
你把霍爾傳感器的引腳接到外部中斷上,用中斷檢測下降沿
回復(fù)

使用道具 舉報(bào)

ID:475031 發(fā)表于 2021-7-9 12:47 | 顯示全部樓層
1543330241 發(fā)表于 2021-7-9 12:42
你把霍爾傳感器的引腳接到外部中斷上,用中斷檢測下降沿

百度搜破了也沒有找到相關(guān)例子,
大師,來個(gè)例子。這樣我也學(xué)會(huì)了。全網(wǎng)的人也學(xué)會(huì)了。不勝感激
回復(fù)

使用道具 舉報(bào)

ID:81196 發(fā)表于 2021-7-9 16:22 | 顯示全部樓層
使用外部中斷,設(shè)置為上升沿和下降沿觸發(fā),那么就可以完整地提取出脈沖的寬度
回復(fù)

使用道具 舉報(bào)

ID:475031 發(fā)表于 2021-7-9 16:41 | 顯示全部樓層
shumivan 發(fā)表于 2021-7-9 16:22
使用外部中斷,設(shè)置為上升沿和下降沿觸發(fā),那么就可以完整地提取出脈沖的寬度

來一段代碼。我參考參考。謝謝
回復(fù)

使用道具 舉報(bào)

ID:176854 發(fā)表于 2021-7-9 20:01 | 顯示全部樓層
#include "STC12C52xx.H"  //根據(jù)實(shí)際芯片修改頭文件

#define Delay_Time 200   //(需要檢測時(shí)間(單位:秒) - 1) * 100
sbit Key = P2^0;         //修改需要檢測引腳

unsigned int Counter = 0;
unsigned char Key_Loop = 0;


//-----------------------------------------------

void Timer0_Init() //12MHz  10ms
{
    AUXR &= 0x7F;                    
    TMOD |= 0x01;                  
                TL0 = 0xF0;               
    TH0 = 0xD8;               
    TR0 = 1;                        
    ET0 = 1;                        
}

void Read_Key()
{
    switch(Key_Loop)
                {
                  case 0:
                        {
                          if(!Key)
                                {
                                  Counter = 0;
                                }
                                else if(Counter >= Delay_Time)
                                {
                                  Key_Loop = 1;
                                }
                                break;
                        }
                        case 1:
                        {
                          //加入電機(jī)堵轉(zhuǎn)后的處理程序
                                break;
                        }
                        default:
                        {
                          Key_Loop = 0;
                                break;
                        }
                }
}

void main(void)
{
                P2M1 |= (1<<0);   //將檢測引腳設(shè)置為高阻輸入
                P2M0 &= ~(1<<0);  //將檢測引腳設(shè)置為高阻輸入
                Timer0_Init();

                EA = 1;                        
                while (1)
                {
                        Read_Key();
                }
}

void tm0_isr() interrupt 1 //定時(shí)器每10ms中斷一次
{
          TL0 = 0xF0;               
    TH0 = 0xD8;               
    Counter++;
}
回復(fù)

使用道具 舉報(bào)

ID:57657 發(fā)表于 2021-7-10 08:35 | 顯示全部樓層
  1. #include "reg51.h"
  2. sbit KEY1 = P2 ^ 0;//檢測端口接霍爾傳感器輸出端,低電平有效
  3. sbit KEY2 = P2 ^ 1;//輸出高電平,啟動(dòng)繼電器,斷開電源,或者接步進(jìn)電機(jī)控制器的  停止端

  4. void InitTimer0(){      //晶振頻率:12Mhz
  5.     TMOD = 0x01;
  6.     TH0 = 0xB1;
  7.     TL0 = 0xE0;
  8.     EA = 1;
  9.     ET0 = 1;
  10.     TR0 = 1;
  11. }
  12. unsigned char time = 0;      //霍爾傳感器 高電平每20毫秒加1 (加滿則停止計(jì)數(shù),防止溢出) 低電平清0
  13. void Timer0Interrupt() interrupt 1{     //20ms 定時(shí)器0中斷
  14.     TH0 = 0xB1;
  15.     TL0 = 0xE0;
  16.     if (KEY1) {
  17.         if (time != 0xFF) time++;
  18.         KEY2 = !(time >= 150);      //150個(gè)20毫秒
  19.     } else {
  20.         time = 0;
  21.         KEY2 = 1;
  22.     }
  23. }


  24. void main(){
  25. KEY1 = 1;//通電默認(rèn)高電平        
  26. KEY2 = 0;//通電默認(rèn)低電平   
  27. InitTimer0();
  28. while(1);
  29. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-7-11 14:46 | 顯示全部樓層
  1. void main()
  2. {
  3.     Motor_Run = 1;//運(yùn)行標(biāo)志
  4.     if(Scan_Count++ > 1000)
  5.     {
  6.         Scan_Count=0;
  7.         Rotate_Count++;
  8.         if(Hall_Pin_Old && !Hall_Pin)//下降沿檢測
  9.         {
  10.             Rotate_Stop_Count=0;
  11.         }
  12.         Hall_Pin_Old = Hall_Pin;
  13.         if(Rotate_Stop_Count++ > 200)//停轉(zhuǎn)超時(shí)
  14.         {
  15.             Motor_Run = 0;
  16.         }
  17.     }
  18. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:808939 發(fā)表于 2021-7-11 17:22 | 顯示全部樓層
你把霍爾傳感器的引腳接到外部中斷上,用中斷檢測下降沿
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表