標(biāo)題:
關(guān)于51單片機(jī)生成spwm波驅(qū)動(dòng)舵機(jī)轉(zhuǎn)動(dòng) 求幫助
[打印本頁(yè)]
作者:
icecryonarita
時(shí)間:
2018-9-22 00:31
標(biāo)題:
關(guān)于51單片機(jī)生成spwm波驅(qū)動(dòng)舵機(jī)轉(zhuǎn)動(dòng) 求幫助
想請(qǐng)教關(guān)于51單片機(jī)如何生成spwm并且通過(guò)這個(gè)波驅(qū)動(dòng)舵機(jī)的問(wèn)題。希望能夠得到源代碼,多謝了。
作者:
devcang
時(shí)間:
2018-9-22 08:19
pwm可以 本站中找到。 而單片機(jī)不可以直接驅(qū)動(dòng)電機(jī),所以,還要硬件的驅(qū)動(dòng)部分的。本站的資料很多,搜索看看吧。
作者:
angmall
時(shí)間:
2018-9-22 11:03
我給你來(lái)個(gè)試試
//軟件模擬pwm
#include"reg52.h"
unsigned int num=0;
//舵機(jī)
sbit DJ1=P3^6;
sbit DJ2=P3^7; /*引腳定義*/
int DJ(int a); //函數(shù)聲明
timerinit() //定時(shí)器中斷初始化
{
TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1
EA=1; //開總中斷
ET0=1; //定時(shí)器0中斷允許
TH0 = (65536-500)/256; //初值使得定時(shí)器0.5毫秒溢出
TL0 = (65536-500)%256;
TR0=0;
}
main()
{
timerinit();
while(1)
{
}
}
timer() interrupt 0 //0.5ms發(fā)生一次中斷,20ms后定時(shí)器置0重新計(jì)數(shù)
{
num++;
DJ1=DJ(3);
DJ2=DJ(3);
if(num>=40)
{
num=0;
TH0 = (65536-500)/256; //初值使得定時(shí)器0.5毫秒溢出
TL0 = (65536-500)%256;
return;
}
}
int DJ(char a) //當(dāng)a=3舵機(jī)所在的位置是0度a=2 a=1分別對(duì)應(yīng)的位置是-45 -90度a=4 a=5對(duì)應(yīng)位置為45 90度
{
if(num>=a||num>=5)
return 0;
if(num>=1)
return 1;
}
復(fù)制代碼
作者:
angmall
時(shí)間:
2018-9-22 11:10
我給你來(lái)多一個(gè)程序試試
// 舵機(jī) 左右90度轉(zhuǎn)動(dòng) 親測(cè)可用
#include<reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit pwm=P0^3;//輸出PWM信號(hào)
uint pwm_value=1500;//初值為1.5ms
uint value[]={1500,650,1500,2500,1500};//舵機(jī)的轉(zhuǎn)角度
void delay_ms(uint x)
{
uint i;
while(x--)for(i=0;i<125;i++);
}
void InitTimer(void)
{
TMOD=0x11;//開定時(shí)器0,1
TH0=-20000/256;//定時(shí)20MS,20MS為一個(gè)周期
TL0=-20000%256;
TH1=-1500/256;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
TL1=-1500%256;
EA=1;//開總斷
TR0=1;//開定時(shí)器0
ET0=1;
TR1=1;//開定時(shí)器1
ET1=1;
}
void timer0(void) interrupt 1//定時(shí)器0中斷函數(shù)
{
pwm=1;
TH0=-20000/256;
TL0=-20000%256;
TR1=1;
}
void timer1(void) interrupt 3//定時(shí)器1中斷函數(shù)
{
pwm=0;
TH1=-pwm_value/256;
TL1=-pwm_value%256;
TR1=0;
}
void main(void)//主函數(shù)
{
uchar i;
InitTimer();
pwm_value=1500;
while(1)
{
for(i=0;i<5;i++)
{
pwm_value=value[i];//通過(guò)數(shù)組就可以改變舵機(jī)的轉(zhuǎn)角度
delay_ms(1000);
}
}
}
復(fù)制代碼
作者:
smofx
時(shí)間:
2018-9-22 17:21
牛人,具有參考價(jià)值
作者:
cjm82
時(shí)間:
2018-9-24 21:25
SPWM波是等腰三角形波,多用于變頻器.一般的舵機(jī)應(yīng)該用的是PWM.
作者:
xiou
時(shí)間:
2018-10-19 09:41
舵機(jī)轉(zhuǎn)動(dòng) 通過(guò)單片機(jī)輸出pwm控制 ,可以先去看看舵機(jī)原理
作者:
我對(duì)你情有獨(dú)鐘
時(shí)間:
2019-4-5 16:40
單片機(jī)是控制,不是驅(qū)動(dòng),驅(qū)動(dòng)需要芯片
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1