亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 關于51單片機生成spwm波驅動舵機轉動 求幫助 [打印本頁]

作者: icecryonarita    時間: 2018-9-22 00:31
標題: 關于51單片機生成spwm波驅動舵機轉動 求幫助
想請教關于51單片機如何生成spwm并且通過這個波驅動舵機的問題。希望能夠得到源代碼,多謝了。

作者: devcang    時間: 2018-9-22 08:19

pwm可以 本站中找到。 而單片機不可以直接驅動電機,所以,還要硬件的驅動部分的。本站的資料很多,搜索看看吧。
作者: angmall    時間: 2018-9-22 11:03
我給你來個試試


  1. //軟件模擬pwm

  2. #include"reg52.h"

  3. unsigned int num=0;
  4. //舵機
  5. sbit DJ1=P3^6;
  6. sbit DJ2=P3^7;          /*引腳定義*/
  7. int DJ(int a);         //函數聲明

  8. timerinit()            //定時器中斷初始化
  9. {
  10.         TMOD=0x01;                               //設置定時器0為工作方式1
  11.         EA=1;                                    //開總中斷
  12.         ET0=1;                                   //定時器0中斷允許
  13.         TH0 = (65536-500)/256;                  //初值使得定時器0.5毫秒溢出
  14.         TL0 = (65536-500)%256;
  15.         TR0=0;         
  16. }

  17. main()
  18. {
  19.         timerinit();
  20.         while(1)
  21.         {
  22.         }
  23. }

  24. timer()  interrupt 0       //0.5ms發生一次中斷,20ms后定時器置0重新計數
  25. {
  26.         num++;
  27.         DJ1=DJ(3);
  28.         DJ2=DJ(3);
  29.         if(num>=40)     
  30.         {
  31.                 num=0;
  32.                 TH0 = (65536-500)/256;                  //初值使得定時器0.5毫秒溢出
  33.                 TL0 = (65536-500)%256;
  34.                 return;
  35.         }
  36. }

  37. int DJ(char a)           //當a=3舵機所在的位置是0度a=2 a=1分別對應的位置是-45 -90度a=4 a=5對應位置為45 90度
  38. {
  39.         if(num>=a||num>=5)
  40.            return 0;
  41.         if(num>=1)
  42.            return 1;
  43. }

復制代碼

作者: angmall    時間: 2018-9-22 11:10
我給你來多一個程序試試

  1. // 舵機 左右90度轉動 親測可用


  2. #include<reg52.h>
  3. typedef unsigned int uint;
  4. typedef unsigned char uchar;
  5. sbit pwm=P0^3;//輸出PWM信號
  6. uint pwm_value=1500;//初值為1.5ms
  7. uint value[]={1500,650,1500,2500,1500};//舵機的轉角度

  8. void delay_ms(uint x)
  9. {
  10.         uint i;
  11.         while(x--)for(i=0;i<125;i++);
  12. }
  13. void InitTimer(void)
  14. {
  15.         TMOD=0x11;//開定時器0,1
  16.         TH0=-20000/256;//定時20MS,20MS為一個周期
  17.         TL0=-20000%256;
  18.         TH1=-1500/256;//定時1.5MS,這時舵機處于0度
  19.         TL1=-1500%256;
  20.         EA=1;//開總斷
  21.         TR0=1;//開定時器0
  22.         ET0=1;
  23.         TR1=1;//開定時器1
  24.         ET1=1;
  25. }
  26. void timer0(void) interrupt 1//定時器0中斷函數
  27. {
  28.         pwm=1;
  29.         TH0=-20000/256;
  30.         TL0=-20000%256;
  31.         TR1=1;
  32. }
  33. void timer1(void) interrupt 3//定時器1中斷函數
  34. {
  35.         pwm=0;
  36.         TH1=-pwm_value/256;
  37.         TL1=-pwm_value%256;
  38.         TR1=0;
  39. }
  40. void main(void)//主函數
  41. {
  42.         uchar i;
  43.         InitTimer();
  44.         pwm_value=1500;
  45.         while(1)
  46.         {
  47.                 for(i=0;i<5;i++)
  48.                 {
  49.                         pwm_value=value[i];//通過數組就可以改變舵機的轉角度
  50.                         delay_ms(1000);
  51.                 }
  52.         }
  53. }

復制代碼

作者: smofx    時間: 2018-9-22 17:21
牛人,具有參考價值
作者: cjm82    時間: 2018-9-24 21:25
SPWM波是等腰三角形波,多用于變頻器.一般的舵機應該用的是PWM.
作者: xiou    時間: 2018-10-19 09:41
舵機轉動 通過單片機輸出pwm控制 ,可以先去看看舵機原理
作者: 我對你情有獨鐘    時間: 2019-4-5 16:40
單片機是控制,不是驅動,驅動需要芯片




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1