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

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

QQ登錄

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

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

單片機(jī)接收PWM顯示轉(zhuǎn)速問(wèn)題

[復(fù)制鏈接]
ID:1084208 發(fā)表于 2023-7-30 15:12 | 顯示全部樓層 |閱讀模式
下面有兩塊板,綠色的數(shù)碼管是顯示轉(zhuǎn)速的,紅色的數(shù)碼管是顯示clock信號(hào)的,也就是顯示頻率的,比如當(dāng)紅色的數(shù)碼管手動(dòng)調(diào)到200Hz時(shí),綠色數(shù)碼管就要顯示800轉(zhuǎn)速,這是個(gè)假設(shè),不一定只顯示800轉(zhuǎn),看電機(jī)是幾對(duì)極來(lái)計(jì)算,現(xiàn)在綠色數(shù)碼管的板子上引了一根通訊線與紅色數(shù)碼管的PWM線相連,打算用這根線來(lái)接收紅色數(shù)碼管通訊線的脈沖,然后將他轉(zhuǎn)換得到轉(zhuǎn)速顯示在綠色數(shù)碼管上,目前我需要知道一個(gè)思路,因?yàn)槲覍?xiě)出來(lái)的沒(méi)有實(shí)現(xiàn)出來(lái),請(qǐng)大伙給個(gè)思路或函數(shù)框架。
51hei圖片_20230730151138.jpg
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-7-30 21:56 | 顯示全部樓層
適用于1000轉(zhuǎn)/分鐘以內(nèi)
  1. #include <reg51.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define ulong unsigned long
  6. #define DASE 60000

  7. //全局變量聲明
  8. //                     數(shù)據(jù)頭 方向位  高位  低位  驗(yàn)證  數(shù)據(jù)尾
  9. uchar data dis_buf[6]={ 0xaa,  0x00,  0x00, 0x00, 0xff,  0x55 };
  10. uint  D_num;            //定時(shí)器中斷計(jì)數(shù)變量
  11. uint  speed=0;          //轉(zhuǎn)速
  12. uint  temp=0;           //T0中斷計(jì)數(shù)臨時(shí)變量                                       
  13. uint  count=0;                        //主循環(huán)計(jì)數(shù)變量
  14. uchar flag_Z=0;         //外部中斷標(biāo)志
  15. bit   flag_D=0;         //T0中斷標(biāo)志
  16. //---本地函數(shù)聲明---//
  17. void Timer0Init();      //定時(shí)器T0初始化
  18. void UartInit();        //定時(shí)器T1初始化波特率
  19. void Delay_ms(uint t);  //延時(shí)函數(shù)

  20. //主函數(shù)
  21. void main()
  22. {
  23.         uchar k;
  24.         Timer0Init();                        //初始化定時(shí)器0
  25.         UartInit();                                //初始化定時(shí)器1波特率發(fā)生器
  26.         Delay_ms(100);                        //長(zhǎng)延時(shí)100ms
  27.         IE0 = 0;                                //INT0中斷請(qǐng)求標(biāo)志清0
  28.         IT0 = 1;                                //設(shè)置外部下降沿中斷
  29.         EX0 = 1;                                //開(kāi)INT0中斷
  30.         ET0 = 1;                                //開(kāi)T0中斷
  31.         EA  = 1;                                //開(kāi)總中斷
  32.         Delay_ms(100);                        //長(zhǎng)延時(shí)100ms
  33.         flag_Z=0;                                //外部中斷標(biāo)志初始0,消除加電時(shí)外部中斷的一次觸發(fā)
  34.         while(1)
  35.         {
  36.                 if(flag_D==1)                                        //定時(shí)器中斷250ms
  37.                 {
  38.                         flag_D=0;                                        //定時(shí)器中斷標(biāo)志清0
  39.                         count++;                                        //250ms計(jì)數(shù)++
  40.                         if(flag_Z==3)                                //外部中斷標(biāo)志
  41.                         {
  42.                                 flag_Z=2;                                //外部中斷標(biāo)志復(fù)位
  43.                                 speed=DASE/D_num;                //計(jì)算轉(zhuǎn)速 r/min
  44.                                 dis_buf[2]=speed>>8;        //轉(zhuǎn)速高8位
  45.                                 dis_buf[3]=speed;                //轉(zhuǎn)速低8位
  46.                                 count=0;                                //250ms計(jì)數(shù)清0
  47.                         }
  48.                         else if(count>24)                        //否則 如果持續(xù)6秒收不到外部中斷信號(hào)清一次所有信息
  49.                         {
  50.                                 count=0;
  51.                                 speed=0;                                //轉(zhuǎn)速清0
  52.                                 dis_buf[2]=0x00;                //轉(zhuǎn)速高位緩存清0
  53.                                 dis_buf[3]=0x00;                //轉(zhuǎn)速低位緩存清0
  54.                                 D_num=0;                                //定時(shí)器中斷緩存清0
  55.                                 temp=0;                                        //定時(shí)器中斷變量清0
  56.                                 flag_Z=0;                        //外部中斷標(biāo)志清0
  57.                         }
  58.                         dis_buf[4]=dis_buf[0]+dis_buf[1]+dis_buf[2]+dis_buf[3]+dis_buf[5];//計(jì)算驗(yàn)證碼
  59.                         for(k=0;k<6;k++)
  60.                         {
  61.                                 SBUF = dis_buf[k];                //串口發(fā)送數(shù)據(jù)串
  62.                                 while(!TI);                                //等待串口發(fā)送中斷請(qǐng)求標(biāo)志位為1
  63.                                 TI=0;                                        //串口發(fā)送中斷請(qǐng)求標(biāo)志清0
  64.                         }
  65.                 }
  66.         }
  67. }   
  68. //T0中斷服務(wù)函數(shù) 周期1ms
  69. void Timer0Interrupt() interrupt 1
  70. {
  71.         static uint i;
  72.         temp++;
  73.         i++;
  74.         if(i>=250)                                //250ms
  75.         {
  76.                 i=0;
  77.                 flag_D=1;                        //T0中斷標(biāo)志
  78.         }
  79. }
  80. //INT0中斷服務(wù)函數(shù)
  81. void INT0_Isr() interrupt 0
  82. {
  83.         TR0=0;                                        //關(guān)定時(shí)器0
  84.         D_num=temp;                                //讀取定時(shí)器1ms中斷計(jì)數(shù)值
  85.         temp=0;                                        //定時(shí)器1ms中斷計(jì)數(shù)值清0
  86.         TL0 = 0x66;                                //設(shè)置定時(shí)初始值
  87.         TH0 = 0xfc;                                //設(shè)置定時(shí)初始值
  88.         TR0=1;                                        //開(kāi)定時(shí)器0
  89.         if(++flag_Z>=3)                        //判斷外部(霍爾)中斷,用于起步消除錯(cuò)誤計(jì)數(shù)               
  90.                 flag_Z=3;
  91. }
  92. //延時(shí)函數(shù)
  93. void Delay_ms(uint t)                //@11.0592MHz
  94. {
  95.         uint i,j;
  96.         for(i=t;i>0;i--)
  97.                 for(j=110;j>0;j--);
  98. }
  99. //初始化定時(shí)器T0
  100. void Timer0Init()                        //1毫秒@11.0592MHz
  101. {
  102.         TMOD|= 0x01;                        //設(shè)置定時(shí)器16位自動(dòng)重載模式
  103.         TL0 = 0x66;                                //設(shè)置定時(shí)初始值
  104.         TH0 = 0xfc;                                //設(shè)置定時(shí)初始值
  105.         TF0 = 0;                                //清除TF0標(biāo)志
  106.         TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
  107. }
  108. //初始化串口T1
  109. void UartInit()                                //9600bps@11.0592MHz
  110. {
  111.         SCON = 0x50;                        //8位數(shù)據(jù),可變波特率
  112.         TMOD|= 0x20;                        //設(shè)置定時(shí)器模式
  113.         TL1 = 0xfd;                                //設(shè)置定時(shí)初始值
  114.         TH1 = 0xfd;                                //設(shè)置定時(shí)初始值
  115.         ET1 = 0;                                //禁止定時(shí)器中斷
  116.         TR1 = 1;                                //定時(shí)器1開(kāi)始計(jì)時(shí)
  117. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:320306 發(fā)表于 2023-7-31 09:20 | 顯示全部樓層
你需要把控制電機(jī)的PWM信號(hào)變成頻率信號(hào)調(diào)節(jié)電機(jī)的速度 頻率是不變的,所以你目前應(yīng)該不行,要么用程序,采集占空比輸出頻率也可以!要么就直接用單片機(jī)驅(qū)動(dòng)兩個(gè)數(shù)碼管顯示,然后單片機(jī)輸出PWM控制最簡(jiǎn)單。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2023-7-31 16:20 | 顯示全部樓層
這是硬件問(wèn)題。需要一個(gè)PWM電壓與轉(zhuǎn)速的對(duì)應(yīng)關(guān)系。這個(gè)關(guān)系與硬件相關(guān),你能找出這個(gè)關(guān)系嗎。
認(rèn)真讀相關(guān)硬件的手冊(cè)吧。尤其是電機(jī)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一区二区视频在线观看 | 国产精品一区在线观看你懂的 | 亚洲看片网站 | 超碰成人在线观看 | 欧美一级电影免费观看 | 黄色免费在线观看 | av在线免费网站 | wwwxxx日本在线观看 | 电影在线 | 999免费视频| 欧美日韩国产高清 | 亚洲欧美中文日韩在线v日本 | 天天操天天天干 | 日韩欧美久久精品 | 国产精品一区二 | 91一区二区三区 | 国产一级免费视频 | 91视视频在线观看入口直接观看 | 一区二区小视频 | 国产精品不卡一区二区三区 | 毛片免费观看 | 精品欧美在线观看 | 国产成人高清 | 亚洲国产欧美在线 | 在线日韩av电影 | 久草电影网 | 99亚洲精品视频 | 亚洲 欧美 在线 一区 | 日本精品一区二区三区视频 | 欧美1区| 久热久热 | 在线视频一区二区 | 噜噜噜噜狠狠狠7777视频 | 国产小视频在线观看 | 成人中文网| 中国91av| 欧美日韩在线高清 | 精品国产一区二区三区av片 | 美国a级毛片免费视频 | 中文在线一区二区 | 国产视频精品在线观看 |