在動力模型中,有兩樣東西是最基本、最必要的,即舵機和無刷電機。舵機提供轉動特定角度的功能,而無刷電機需要由電調--電子調速器驅動。
- 舵機
//2015年新版本,改爲11.0592的晶振
//GYZ
#include <reg52.h>
unsigned int percent = 0;//控制50HZ的關鍵變量
unsigned int pwm_value_1;
unsigned int pwm_value_2;
unsigned int pwm_value_3;
unsigned int pwm_value_4;
//引腳位定義
sbit pwm1 = P2^0;
sbit pwm2 = P2^1;
sbit pwm3 = P2^2;
sbit pwm4 = P2^3;
void initialTimer0()
{
TH0 = (65536-66)/256;
TL0 = (65536-66)%256;
}//定時器裝初值
void initial()
{
EA=1;//打開總中斷
ET0 =1;//開中斷1
TMOD = 0x01; //T0工作,採用方式1,16位定時器
initialTimer0();
TR0 = 1;//開啓T0定時器
P2=0x00;//P2置低電平
//4路PWM初始值設定,3號爲油門通道其它爲舵機通道
percent = 0;
pwm_value_1 = 14;
pwm_value_2 = 14;
pwm_value_3 = 9;
pwm_value_4 = 14;
}//啓動初始化函數
void Timer0() interrupt 1 using 0
{
percent +=1;
//每次中斷加1
if(percent == 198)//到此數值是20ms,50hz的週期
{
pwm1 = 1;//PWM引腳統一置高電平
pwm2 = 1;
pwm3 = 1;
pwm4 = 1;
percent = 0;
}
//以下4路是PWM的正頻寬到期時置低電平
if(percent == pwm_value_1)
{
pwm1 = 0;
}
if(percent == pwm_value_2)
{
pwm2 = 0;
}
if(percent == pwm_value_3)
{
pwm3 = 0;
}
if(percent == pwm_value_4)
{
pwm4 = 0;
}
initialTimer0();//重新裝初值
}
void delay(unsigned int x)
{
unsigned i,j;
for (i = x; i >= 0; --i) {
for (j = 120; j >= 0; --j) {
;
}
}
}
void main()
{
initial();
while(1)
{//insert you code here...
;
}
}