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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)的計(jì)數(shù)器問(wèn)題,電機(jī)圈數(shù)怎么達(dá)不到停止條件?

[復(fù)制鏈接]
ID:1005338 發(fā)表于 2022-5-23 18:51 | 顯示全部樓層 |閱讀模式
通過(guò)T0計(jì)數(shù)器對(duì)減速直流電機(jī)軸的轉(zhuǎn)動(dòng)圈數(shù)進(jìn)行累計(jì)(直流電機(jī)帶有編碼器),轉(zhuǎn)到一定圈數(shù)后讓電機(jī)停止,但不知道為什么,程序運(yùn)行后,電機(jī)一直轉(zhuǎn),不會(huì)停,不知道為什么?求大俠們幫忙指點(diǎn)指點(diǎn):

單片機(jī)源程序如下:
#include "reg52.h"

typedef unsigned int u16;        //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;

sbit MOTOR1_A=P0^0;          //直流電機(jī)的正極
sbit MOTOR1_B=P0^1;          //直流電機(jī)的負(fù)極

u16 s1=10;                //設(shè)定電機(jī)旋轉(zhuǎn)圈數(shù)
u16 count=0;               //電機(jī)圈數(shù)

/*******************************************************************************
* 函 數(shù) 名       : delay_ms
* 函數(shù)功能                 : ms延時(shí)函數(shù),ms=1時(shí),大約延時(shí)1ms
* 輸    入       : ten_us
* 輸    出             : 無(wú)
*******************************************************************************/
void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--)
                for(j=110;j>0;j--);
}

/*******************************************************************************
* 函 數(shù) 名       : time0_init
* 函數(shù)功能       : 定時(shí)器0中斷配置函數(shù),通過(guò)設(shè)置TH和TL即可確定計(jì)數(shù)值
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/

void counter0_init(void)
{
        TMOD|=0X05;                //選擇為計(jì)數(shù)器0模式,工作方式1
        TH0=0xFC;                  //電機(jī)編碼器867個(gè)脈沖,減速器軸轉(zhuǎn)一圈,初值設(shè)置為FC9D
        TL0=0x9D;      
        TF0=0;
        TR0=1;        //打開(kāi)計(jì)數(shù)器
        ET0=1;        //打開(kāi)計(jì)數(shù)器0中斷允許
        EA=1;        //打開(kāi)總中斷
}

/*******************************************************************************
* 函 數(shù) 名       : contor0
* 函數(shù)功能       : 定時(shí)器0中斷函數(shù),通過(guò)設(shè)置TH和TL即可確定計(jì)數(shù)值,并對(duì)減速器軸圈數(shù)進(jìn)行累加
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/

void conter0() interrupt 1 //定時(shí)器0中斷函數(shù)
{
        TH0=0xfC;        //給計(jì)數(shù)器賦初值
        TL0=0x9D;
        count++;                 //對(duì)電機(jī)轉(zhuǎn)動(dòng)圈數(shù)進(jìn)行累加
}


/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能       : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/
void main()
{      
        u16 k;                                //緩沖變量
        k=count;      

        counter0_init();        //計(jì)數(shù)器0中斷配置

        MOTOR1_A=1;                   //直流電機(jī)開(kāi)始正轉(zhuǎn)
        MOTOR1_B=0;
        do
        {
                ;
        }
        while(k<s1);                  //檢測(cè)編碼器計(jì)數(shù)是否達(dá)到設(shè)定值s1
        TR0=0;                                //計(jì)數(shù)器停止計(jì)數(shù)
        MOTOR1_A=1;                            //電機(jī)停止
        MOTOR1_B=1;
        delay_ms(5000);         
}
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2022-5-24 09:13 | 顯示全部樓層
1、把while(k<s1);    改成while(count<s1); 2、把 delay_ms(5000);  改成while(1);3、  另外電機(jī)停止應(yīng)該都置低位吧。
回復(fù)

使用道具 舉報(bào)

ID:979299 發(fā)表于 2022-5-24 10:51 | 顯示全部樓層
信號(hào)線接好,這樣改一下,如果還不行就用最下面的方法先試一下
    MOTOR1_A=1;                   //直流電機(jī)開(kāi)始正轉(zhuǎn)
    MOTOR1_B=0;
        while(1)
        {
                if(k>s1)  
                {                //檢測(cè)編碼器計(jì)數(shù)是否達(dá)到設(shè)定值s1
                        TR0=0;                                //計(jì)數(shù)器停止計(jì)數(shù)
                        MOTOR1_A=0;                            //電機(jī)停止
                        MOTOR1_B=0;
                        delay_ms(5000);
                }
        }

另一種試驗(yàn)
#include "reg52.h"

typedef unsigned int u16;        //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;

sbit MOTOR1_A=P0^0;          //直流電機(jī)的正極
sbit MOTOR1_B=P0^1;          //直流電機(jī)的負(fù)極

u16 s1=10;                //設(shè)定電機(jī)旋轉(zhuǎn)圈數(shù)
//u16 count=0;               //電機(jī)圈數(shù)



void counter0_init(void)
{
    TMOD|=0X05;                //選擇為計(jì)數(shù)器0模式,工作方式1
    TH0=0xFF;                  //電機(jī)編碼器867個(gè)脈沖,減速器軸轉(zhuǎn)一圈,初值設(shè)置為FC9D
    TL0=0xF5;      
    TF0=0;
    TR0=1;        //打開(kāi)計(jì)數(shù)器
    ET0=1;        //打開(kāi)計(jì)數(shù)器0中斷允許
    EA=1;        //打開(kāi)總中斷
}
main()
{
        counter0_init();
    MOTOR1_A=1;                   //直流電機(jī)開(kāi)始正轉(zhuǎn)
    MOTOR1_B=0;
        while(1);
}


void conter0() interrupt 1 //定時(shí)器0中斷函數(shù)
{
    TH0=0xFF;        //給計(jì)數(shù)器賦初值
    TL0=0xF5;
    MOTOR1_A=0;                            //電機(jī)停止
        MOTOR1_B=0;               //對(duì)電機(jī)轉(zhuǎn)動(dòng)圈數(shù)進(jìn)行累加
}
回復(fù)

使用道具 舉報(bào)

ID:979299 發(fā)表于 2022-5-24 11:21 | 顯示全部樓層
下面的方法  
TH0=0xFC;        //計(jì)數(shù)器賦初值,和初值設(shè)置,用這個(gè)初值只能轉(zhuǎn)一轉(zhuǎn)
TL0=0x9D;
TH0=0xDE;        //計(jì)數(shù)器賦初值,和初值設(shè)置,用這個(gè)初值轉(zhuǎn)十轉(zhuǎn)
TL0=0x22;
回復(fù)

使用道具 舉報(bào)

ID:735831 發(fā)表于 2022-5-24 11:39 | 顯示全部樓層
我覺(jué)得樓主的主要問(wèn)題在于k=count沒(méi)有附上導(dǎo)致do while沒(méi)有辦法跳出,count已為全局變量,所以無(wú)需緩沖也可以用于判斷,另外主函數(shù)不帶while的話應(yīng)該不會(huì)重復(fù)跑把,可以的話還是加一個(gè)大循環(huán),通過(guò)大循環(huán)來(lái)保持mcu的持續(xù)運(yùn)行
回復(fù)

使用道具 舉報(bào)

ID:1005338 發(fā)表于 2022-5-24 11:52 | 顯示全部樓層

1,改成cuont<s1解決問(wèn)題,k只在開(kāi)始時(shí)等于了count,后面就失去作用了
2,改成while(1)可以一直停止下去,用delay_ms(5000)停止5秒又繼續(xù)轉(zhuǎn)了,在此我不明白,main主程序執(zhí)行完了還會(huì)從頭開(kāi)始再來(lái)嗎?
3,主要我用了個(gè)直流電機(jī)驅(qū)動(dòng)模塊,真值表上說(shuō)都置高位是剎車,也可以停止
回復(fù)

使用道具 舉報(bào)

ID:1005338 發(fā)表于 2022-5-24 11:54 | 顯示全部樓層
興安xa 發(fā)表于 2022-5-24 11:21
下面的方法  
TH0=0xFC;        //計(jì)數(shù)器賦初值,和初值設(shè)置,用這個(gè)初值只能轉(zhuǎn)一轉(zhuǎn)
TL0=0x9D;

一轉(zhuǎn)的控制精度高些,10轉(zhuǎn)走的太遠(yuǎn)了
回復(fù)

使用道具 舉報(bào)

ID:844772 發(fā)表于 2022-5-24 14:51 | 顯示全部樓層

嵌入系統(tǒng)主程序是不能返回的,結(jié)果不可測(cè),我覺(jué)得沒(méi)必要研究究竟會(huì)跑飛還是軟啟動(dòng),因?yàn)檫@要看編譯器和芯片設(shè)計(jì)情況。
兩個(gè)高位沒(méi)有剎車作用,短路兩極才剎車。我不大習(xí)慣程序結(jié)束了還置高位。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲日韩中文字幕一区 | 欧美日韩激情 | 午夜一区二区三区在线观看 | 日韩一二三区 | 人人鲁人人莫人人爱精品 | 亚洲精品一区二区在线观看 | 日本免费一区二区三区四区 | 激情国产在线 | 成年免费大片黄在线观看一级 | 天天插天天操 | 中文字幕在线观看日韩 | 久久一二三区 | 国产精品视频 | 亚州精品天堂中文字幕 | 欧美日韩精品一区二区天天拍 | 欧美一区二区精品 | 国精产品一品二品国精在线观看 | 九九热精品在线视频 | 日本午夜一区二区三区 | 精品国产一区二区三区在线观看 | 区一区二区三在线观看 | 亚洲日本一区二区三区四区 | 欧美在线观看一区 | 91久操网| 男女免费在线观看视频 | 亚洲精品视频一区二区三区 | 福利视频一二区 | 黄色国产视频 | 亚洲va国产日韩欧美精品色婷婷 | 久久精品欧美一区二区三区不卡 | 亚洲国产69 | 亚洲一区二区三区在线观看免费 | 免费a网站 | 欧美lesbianxxxxhd视频社区 | 特一级毛片 | 99精品福利视频 | 国产精品精品久久久 | 国产乱码精品一区二区三区中文 | 偷拍亚洲色图 | 日日草夜夜草 | 91大神在线资源观看无广告 |