- int sp1=10;//定義舵機接口數字接口7
- int pulsewidth;//定義脈寬變量
- int val;
- int val1;
- int myangle1;
- //下面是servopulse函數部分(此函數意思:也就是說每次都是0.5ms高電平 1.98ms低電平 然後再0.52ms低電平 17ms延時也是低電平)
-
- void servopulse(int sp1,int val1)//定義一個脈沖函數
- {
- myangle1=map(val1,0,180,500,2480);
- digitalWrite(sp1,HIGH);//將舵機接口電平至高
- delayMicroseconds(myangle1);//延時脈寬值的微秒數
- digitalWrite(sp1,LOW);//將舵機接口電平至低
- delay(20-val1/1000);
- }
- //servopulse函數部分到此結束
- void setup()
- {
- pinMode(sp1,OUTPUT);//設定舵機接口為輸出接口
- //設置兩組串口波特率
- Serial.begin(9600);
- delay(500);
- Serial.println("servu=o_seral_simple ready" ) ;
- }
-
- void loop()//將0到9的數轉化為0到180角度,并讓LED閃爍相應數的次數
- {
- val=Serial.read();//讀取串行端口的值
-
- if(val>'0'&&val<='9')
- {
- val1=val-'0';//將特征量轉化為數值變量
- val1=map(val1,0,9,0,180);//將角度轉化為500-2480的脈寬值
- Serial.print("moving servo to ");
- Serial.print(val1,DEC);
- Serial.println();
- for(int i=0;i<=50;i++)//給予舵機足夠的時間讓它轉到指定角度
- {
- servopulse(sp1,val1);//引用脈沖函數
- }
- }
-
- }
復制代碼 Togke兄加油,我覺得你非常非常厲害的啊。
這個就是一個簡單的arduino不調用庫函數驅動舵機的程序,輸入0-9不同數字,舵機轉動到相應的角度并返回pwm值。
Ansifa寫的PWM介紹的帖子非常不錯哦。
現在開始接觸新的控制方法了,希望一切順利能在兩個月內做出個簡易的版本再慢慢升級更新吧 。用arm做了個舵機控制器后覺得其實PWM控制真的不是很喜歡,雖然用arm寫確實比較麻煩。。熬了一周才寫出來,完善通信又是一周時間。這次的485通信,基于cortex-m3和stm8的舵機控制器相對PWM的小土坡來說估計算是堵墻了,翻過去有一片不同的天了。希望能學到更多東西。大家一起加油吧。
等著這個月收雕刻機了 嘻嘻 |