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

標題: 兩個限位開關如何通過51單片機控制一個直流電機正反轉 [打印本頁]

作者: 彬Lsl    時間: 2017-4-10 21:41
標題: 兩個限位開關如何通過51單片機控制一個直流電機正反轉
現有兩個限位開關,想通過51/52單片機控制一個直流電機的正反轉,請問各位高手有什么思路嗎

作者: 網上漁翁    時間: 2017-4-10 23:04
先說硬件電路,電機正反轉需要用晶體管搭一個H橋,并用單片機的四個輸出口驅動,剩下的選兩個口作為開關檢測端。程序應該不復雜,就兩個開關的判斷,然后根據需求驅動電機就行
作者: dzbj    時間: 2017-4-11 01:23
不知道你什么電機 小電機用9110片子直接就可以了 那個片子用兩個管腳 1高1低正轉 1低1高就是翻轉 其它的H橋也是類似道理 就是功率大些 實驗的話這種小驅動片子足夠了

然后你的單片機另外用兩個管腳感知兩個行程開關 在一邊的時候 開關A導通開板B斷開 端口就是10 這是驅動電機往一個方向移動 端口狀態就應該是00 到另一頭就是01

如果你只是表面提的這些需求 就是這樣了 很簡單 非常簡單
作者: dzbj    時間: 2017-4-11 02:13
本帖最后由 dzbj 于 2017-4-11 09:48 編輯

困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路大致寫的 大概是個意思 僅供參考

電路圖



程序

uchar m=0;
bit flag_moto=0;

void moto()
{
        if(m==0)                //停止
        {
                P1.1=1;
                P1.2=1;
        }
        if(m==1)                //正轉
        {
                P1.1=1;
                P1.2=0;
        }
        if(m==2)                //反轉
        {
                P1.1=0;
                P1.2=1;
        }
        if(m==3)                //剎車
        {
                P1.1=0;
                P1.2=0;
        }
}

void main()
{
        while(1)
        {
                moto();        //電機驅動 電機啟動后在兩點之間時設這個函數獨立控制電機繼續運動

                if(key3==1)                        //如果 啟動開關開啟
                {
                        if(flag_moto==0)        //如果 電機工作標記為0
                        {
                                if(key1==1)                        //如果 一端開關閉合
                                {
                                        m=3;                                //剎車 這個是為了自動回程后再反復
                                        moto();                                //調用 電機驅動函數
                                        Delay(xx);                        //延時50~100ms 這個函數太簡單了 沒寫出來
                                        m=1;                                //正轉
                                        moto();                                //調用 電機驅動函數
                                        flag_moto=1;                //電機工作標記置1
                                }
                        }
                        else                                //否則 即 電機工作標記為1
                        {
                                if(key2==1)                        //如果 另一端開關閉合
                                {
                                        m=3;                                //剎車
                                        moto();                                //調用 電機驅動函數
                                        Delay(xx);                        //延時50~100ms 這個函數太簡單了 沒寫出來
                                        m=2;                                //反轉
                                        moto();                                //調用 電機驅動函數
                                        flag_moto=0;                //電機工作標記清零
                                }
                        }
                        
                }
                else                                //否則 即 啟動開關關閉
                {
                        m=0;                                //停止
                        moto();                                //調用 電機驅動函數
                }
        }
}


作者: 158640752    時間: 2017-4-11 13:24
#include<reg52.h>



sbit K1=P3^6;   //正轉(逆時針)按鍵 對應實驗板上的K1

sbit K2=P3^7;//反轉(順時針)按鍵  對應實驗板上的K2

sbit K3=P3^2;//停止鍵    對應實驗板上的K3



sbit P10=P0^0;//控制端

sbit P11=P0^1;//控制端



sbit BEEP = P2^2; //蜂鳴器控制端口P22



void delay(unsigned int n)

{

unsigned char i;

while(n--)

  for(i=0;i<112;i++);

}



void beep()       //500HZ的聲音

{

unsigned char i;

for(i=0;i<100;i++){

  BEEP=~BEEP;

  delay(1);

}

BEEP=1;

}



void main()

{

P10=1;  // 關閉直流電機

P11=1;

while(1){

  if(K1==0){

   delay(15);  //消陡

   if(K1==0){

    beep();

    P10=0;

    P11=1;

    while(K1==0);  //等待按鍵釋放

   }

  }

  if(K2==0){

   delay(15);

   if(K2==0){

    beep();

    P10=1;

    P11=0;

    while(K2==0);

   }

  }

  if(K3==0){

   delay(15);

   if(K3==0){

    beep();

    P10=1;

    P11=1;

    while(K3==0);

   }

  }

}

}

作者: ahshmj    時間: 2017-4-11 14:18
你自己是什么思路?有什么樣的基礎?
作者: 彬Lsl    時間: 2017-4-11 18:26
網上漁翁 發表于 2017-4-10 23:04
先說硬件電路,電機正反轉需要用晶體管搭一個H橋,并用單片機的四個輸出口驅動,剩下的選兩個口作為開關檢 ...

搭建H橋后,程序該怎么寫呢
作者: 網上漁翁    時間: 2017-4-11 19:10
代碼這個真不是我的強項,且也有6、7年沒有搞了,最近忽然心血來潮想搞個數控的備用電源,所以我也還在學習中。
樓上已經有現成的代碼,二樓的用了專用驅動電路,硬件電路就更簡單了,思路都差不多。要是你用全分離件的驅動電路,樓上的代碼稍微修改一下也能用,只要是H橋的對角功率管導通就可以了。其他都一樣

作者: 彬Lsl    時間: 2017-4-11 19:35
dzbj 發表于 2017-4-11 02:13
困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路 ...

請問,m 代表的是什么,  剎車又是什么意思
作者: 彬Lsl    時間: 2017-4-11 19:36
使用的是L298N電機驅動模塊
作者: 彬Lsl    時間: 2017-4-11 19:38
158640752 發表于 2017-4-11 13:24
#include

按您的意思就是說沒有使用什么電機驅動模塊了?

作者: 彬Lsl    時間: 2017-4-11 19:43
ahshmj 發表于 2017-4-11 14:18
你自己是什么思路?有什么樣的基礎?

首先有限位開關2個,直流電機1個,L298N電機驅動模塊,假設:當擋板碰到限位開關1,電機停止,并當有正轉信號收入時,電機正轉,當碰到限位開關2時,電機停止,并且當有反轉信號收入時,電機反轉,往返期間可以通過按鍵使電機立即停止轉動

作者: 彬Lsl    時間: 2017-4-11 21:22
dzbj 發表于 2017-4-11 02:13
困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路 ...

圖二之后的四張看不清,不知key1,key2,key3代表的是什么
作者: 彬Lsl    時間: 2017-4-11 22:14
dzbj 發表于 2017-4-11 02:13
困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路 ...

再請教一個哈,就是你是只用了一個限位開關嗎

作者: 彬Lsl    時間: 2017-4-11 22:18
158640752 發表于 2017-4-11 13:24
#include

你好,控制端指的是限位開關的端口嗎?

作者: dzbj    時間: 2017-4-11 23:09
彬Lsl 發表于 2017-4-11 21:22
圖二之后的四張看不清,不知key1,key2,key3代表的是什么

k1和k2是你說的兩個開關 一個正程一個反程 k3是我加上去的 我想你總需要有個開關控制整體是否工作吧 總不會靠插拔電源決定是否工作 對么
作者: dzbj    時間: 2017-4-11 23:23
彬Lsl 發表于 2017-4-11 19:35
請問,m 代表的是什么,  剎車又是什么意思

m是個變量 通過它改變電機狀態

剎車是電機工作中的一種狀態 直流電機帶負載后斷電還會繼續轉一點角度 如果直接反轉容易燒片子 嚴重了可以燒電機

我出的圖和程序只是核心內容 缺周邊的東西 比如單片機的晶振沒畫 開關防抖也沒寫

大概思路是按你說的兩個限位開關K1 K2控制正反轉 K3控制系統是否工作

K3為1 系統開始工作

默認開始時電機位置在key1的地方 就是key1導通狀態 當然也可以寫成任意位置 這就是個思路不是成品 沒寫那么細

其它邏輯你讀程序 不復雜的
作者: 彬Lsl    時間: 2017-4-12 15:05
dzbj 發表于 2017-4-11 23:09
k1和k2是你說的兩個開關 一個正程一個反程 k3是我加上去的 我想你總需要有個開關控制整體是否工作吧 總不 ...

哦哦,對的
作者: 彬Lsl    時間: 2017-4-12 15:07
dzbj 發表于 2017-4-11 23:23
m是個變量 通過它改變電機狀態

剎車是電機工作中的一種狀態 直流電機帶負載后斷電還會繼續轉一點角度  ...

好的,我試試看看行不行
作者: 彬Lsl    時間: 2017-4-12 15:10
網上漁翁 發表于 2017-4-11 19:10
代碼這個真不是我的強項,且也有6、7年沒有搞了,最近忽然心血來潮想搞個數控的備用電源,所以我也還在學習 ...

好,謝謝啦
作者: 彬Lsl    時間: 2017-4-13 22:19
dzbj 發表于 2017-4-11 02:13
困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路 ...

大師啊還是不行啊,你是有用H橋驅動電機的嗎?我用的是L298N,你看看你還能寫下代碼參考參考嗎
作者: XIN_XIN    時間: 2017-4-14 14:53
在多機通信中,主機必須要能對各個從機進行識別,在51系列單片機中可以通過SCON寄存器的SM2位來實現。當串口以方式2或方式3發送數據時,每一幀信息都是11位,第9位是數據可編程位,通過給TB8置1或置0來區別地址幀和數據幀,當該位為1時,發送地址幀;該位為0時,發送數據幀。 在多機通信過程中,主機先發送某一從機的地址,等待從機的應答,所有的從機接收到地址幀后與本機地址進行比較,若相同,則將SM2置0準備接收數據;若不同,則丟棄當前數據,SM2位不變。
作者: 彬Lsl    時間: 2017-4-14 14:58
XIN_XIN 發表于 2017-4-14 14:53
在多機通信中,主機必須要能對各個從機進行識別,在51系列單片機中可以通過SCON寄存器的SM2位來實現。當串 ...

大神啊,我的基礎差,看不懂
作者: dzbj    時間: 2017-4-14 15:26
彬Lsl 發表于 2017-4-13 22:19
大師啊還是不行啊,你是有用H橋驅動電機的嗎?我用的是L298N,你看看你還能寫下代碼參考參考嗎[em3 ...

我現在在上班 沒法給你寫 看了一下L298N的手冊 和我用的9110基本上是一樣的控制方法 多兩個EN使能端 見下圖


你控制一個電機 那么L298N的2 3腳接你的電機 ENA接到單片機上 在我上面寫的程序里 電機驅動函數中 進入時加個ENA=1; 退出時加個ENA=0; 應該就可以了 其它的 你照這個線路圖接 省掉下面那路電機即可

作者: dzbj    時間: 2017-4-14 15:33
彬Lsl 發表于 2017-4-14 14:58
大神啊,我的基礎差,看不懂

補充

原來的IA到298的IN1 原來的IB到298的IN2

程序里 你另外定義一個端口是ENA

sbit ENA=PX^X;

void moto()
{
ENA=1;
...........//原來的程序
ENA=0;
}


作者: 彬Lsl    時間: 2017-4-14 19:44
dzbj 發表于 2017-4-14 15:26
我現在在上班 沒法給你寫 看了一下L298N的手冊 和我用的9110基本上是一樣的控制方法 多兩個EN使能端 見下 ...

我覺得接上限位開關后,還是不行,試過挺多方式還是不行

作者: dzbj    時間: 2017-4-14 19:55
彬Lsl 發表于 2017-4-14 19:44
我覺得接上限位開關后,還是不行,試過挺多方式還是不行

那就不是我這么臆測能解決了 需要你自己一步一步檢查 至少 你要描述出每一步的狀況才能幫你了 一切皆有可能 看不見摸不著的無從下手啊 一句不行解決不了任何問題 天天念叨不行它也不會行

給你簡單說一下步驟吧

1. 確保編譯沒問題 給你的程序不是成品 你需要把缺的補上 可以把你寫好的發上來看下
2. 確保下載正確 程序和硬件端口對應關系沒問題
3. 給系統上電但不帶電機 萬用表 按邏輯模擬狀態 測量你定義的每個管腳是否正常 不正常找片子 電路板 程序的原因 正常 則檢查電機情況 機械結構 電源帶載能力等

我自己做東西都要搭實驗臺 模擬使用環境的 也不是一次成功 上去不行太正常了 肯定哪有問題唄
作者: 彬Lsl    時間: 2017-4-15 09:04
dzbj 發表于 2017-4-14 19:55
那就不是我這么臆測能解決了 需要你自己一步一步檢查 至少 你要描述出每一步的狀況才能幫你了 一切皆有可 ...

代碼有點問題,現在有點像自己要的結果了
作者: 彬Lsl    時間: 2017-4-22 10:20
dzbj 發表于 2017-4-11 02:13
困了 隨便弄了一下 可能有很多錯誤 電路圖畫的不細 不能直接用 缺一些下拉電阻什么的 程序沒仔細想 按思路 ...

請問如果再加上點觸開關控制正反轉,碰到限位就停,思路又是怎樣的呢
作者: sxxy    時間: 2018-5-11 00:45
萌新一個,怎樣將限位開關接在51單片機控制的控制電路上。控制電路接驅動器控制步進電機正反轉的
作者: 喜士多    時間: 2018-8-13 17:30
sxxy 發表于 2018-5-11 00:45
萌新一個,怎樣將限位開關接在51單片機控制的控制電路上。控制電路接驅動器控制步進電機正反轉的

請問知道了嗎。我也是萌新
作者: 喜士多    時間: 2018-8-13 17:30
sxxy 發表于 2018-5-11 00:45
萌新一個,怎樣將限位開關接在51單片機控制的控制電路上。控制電路接驅動器控制步進電機正反轉的

我也是萌新請問你會了嗎
作者: 喜士多    時間: 2018-8-13 17:31
sxxy 發表于 2018-5-11 00:45
萌新一個,怎樣將限位開關接在51單片機控制的控制電路上。控制電路接驅動器控制步進電機正反轉的

我也是萌新請問你會了嗎
作者: diy123    時間: 2018-9-15 21:10

不知道你什么電機
作者: wrl123456    時間: 2020-5-29 05:44
158640752 發表于 2017-4-11 13:24
#include

這個程序是按下一次開關電機正轉馬上就停止,怎么改程序才能讓它一直轉,直到按下反向鍵呢?




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 麻豆精品国产 | 五月天久久久 | 亚洲欧美国产毛片在线 | 一区二区三区免费在线观看 | 中国av在线播放 | 日韩视频在线观看 | 成人三级视频 | 亚洲欧美日韩一区 | 久久久久久久久久国产 | 国产黄色大片 | 日本成人免费网站 | 国产一区二区三区在线 | 五月天激情综合 | av网在线 | 欧美黄色三级视频 | 五月婷婷丁香六月 | 国内精品一区二区三区 | 国产精品成人免费视频 | 日韩精品国产精品 | 麻豆成人91精品二区三区 | 综合在线视频 | 精品一区二区国产 | 青青青在线视频 | 一区二区三区免费在线观看 | 欧美揉bbbbb揉bbbbb | 国产精品视频免费在线观看 | 亚洲视频精品 | 日本中文字幕在线播放 | 在线看片你懂的 | 亚洲影视一区 | 成人精品三级av在线看 | 久久伊人网站 | 鲁鲁鲁鲁鲁鲁鲁777777 | 中文字幕欧美日韩 | 国产精品久久久久久久成人午夜 | 伊人网在线视频 | 三级黄网站 | 黄视频网站在线观看 | 中文在线视频 | www.日本高清 | 毛茸茸性猛交xxxx |