㈠ Arino可以讀取PWM信號嗎
void
loop()
{
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
以上這段程序輸出的就是1Hz的波形,把兩個500都改成50,這樣輸出的就是10Hz的。
解釋:數字表示多少毫秒,要什麼樣頻率就自己算一下周期改進去就好了。
㈡ 用Arino採集5路pwm信號,然後在輸出,該怎麼做求大俠指點!!
//定義通道
#defineCH10
#defineCH21
#defineCH32
#defineCH44
#defineCH56
unsignedlongP[6];//定義PWM值存儲數組
unsignedlongT[6];//定義臨時時間存儲數組
boolL[6];//定義狀態存儲數組
voidsetup()
{
inti;
Serial.begin(9600);//初始化串口
pinMode(CH1,INPUT);//設置管腳輸入狀態
pinMode(CH2,INPUT);
pinMode(CH3,INPUT);
pinMode(CH4,INPUT);
pinMode(CH5,INPUT);
for(i=1;i<=5;i++)
{
P[i]=0;//初始化PWM值為0
T[i]=0;//初始化臨時時間值為0
L[i]=false;//初始化狀態為假
}
}
voidloop()
{
inti;
CHK_PWM_TIME(CH1,1);//判斷並採集各個通道
CHK_PWM_TIME(CH2,2);
CHK_PWM_TIME(CH3,3);
CHK_PWM_TIME(CH4,4);
CHK_PWM_TIME(CH5,5);
for(i=1;i<=5;i++)//輸出採集結果
{
Serial.print(P[i]);
Serial.print(",");
}
Serial.println("CH1,...,CH5");
}
voidCHK_PWM_TIME(intPin,intCH)//通道脈寬採集函數
{
intpuls;//電平高低狀態
puls=digitalRead(Pin);//讀Pin電平高低狀態
if(puls==HIGH&&L[CH]==false)//如果高電平,但狀態為假則
{
T[CH]=micros();//記錄臨時時間
L[CH]=true;//標記狀態為真
}
elseif(puls==LOW&&L[CH]==true)//如果電平為低,但狀態為真則
{
P[CH]=micros()-T[CH];//脈沖捕捉結束,脈寬值為當前時間-記錄時間
L[CH]=false;//標記記錄狀態為假
}
}
以上在Arino IDE環境中調試無錯,具體的運行效果,要根據您的具體的硬體連接來調試。
建議不要使用數字管腳的0和1,有一些Arino的板子,數字管腳的0和1可能與串口是復用的,在輸入數據,同時還要進行串口通信的時候,有可能會干擾您的採集准確或導致無法串口通信。
㈢ 怎麼用arino的程序控制進步電機實現轉動
arino程序驅動步進電機須循環使用脈沖,要了解電機的相數,步矩角度等。
舉例:使用A3967類型驅動板
digitalWrite(dir,方向);// 0 or 1
for(int i=0;i<周期;i++){
digitalWrite(pin, HIGH);
delayMicroseconds(延時);
digitalWrite(pin, LOW);
delayMicroseconds(延時);
}
㈣ 關於arino設置電調的問題,具體程序是什麼
以下是我的源程序,新西達25A電調,1000kv電機調試用的。帶有5110液晶的庫。
#define PWM_PIN 9 //motor PIN
#define lcd_ce 10
#define lcd_rst 11
#define lcd_dc 12
#define sdin 13
#define sclk 14
#define LCD_LEDPin 15
void setup() {
pinMode(PWM_PIN,OUTPUT);
pinMode(lcd_ce,OUTPUT);
pinMode(lcd_rst,OUTPUT);
pinMode(lcd_dc,OUTPUT);
pinMode(sdin,OUTPUT);
pinMode(sclk,OUTPUT);
pinMode(LCD_LEDPin,OUTPUT);
lcd_init();
lcd_clear();
initOutput();
}
void writeMotors(int16_t mc) {
OCR1A = mc>>3;// mc/8
}
void initOutput() {
TCCR1A |= _BV(COM1A1);//TCCR1A = 10000001,8 bit Pwm mode.out in pin 9.
}
void loop() {
int i;
writeMotors(1000);//waiting for motor test finished.
delay(3000);
for(i=1000;i<1500;i+=8){
showint(i,0);
writeMotors(i);
delay(100);
}
writeMotors(1000);//motor stop
while(1);
}
㈤ Arino的PWM信號是0-5V,如果我希望輸出變化范圍是0-10V,該怎麼辦
0~5V的PWM從PWM_IN輸入,用三極體反相後輸出PWM_OUT就是0~10V了,只不過相位相反,可以把程序稍微改一下,輸出反相的PWM就可以了。
㈥ 如何利用PWM控制直流電動機轉速
PWM是英文「Pulse
Width
Molation」的縮寫,意思是脈沖寬度調制,它是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中,而利用PWM控制電機轉速則是其中一種非常簡單應用。Arino168/328有6個PWM輸出引腳分別為D3、D5、D6、D9、D10、D11,只要在程序void
loop()中用「analogWrite(pwm,val);」語句就可以讓「pwm」對應的PWM引腳輸出val(val從0到255)值。當val為函數變數時,我們可以用讀取電位計模擬值作為val,讓電機轉速隨電位計取值大小而變化,這就是PWM控制電機轉速。
㈦ arino控制電機正反轉程序
arino控制電機,這可沒有固定的程序。因為直接控制電機的是「電機驅動器」,arino並不能適宜直接與電機連接在一起。
所以,控制正反轉以及轉速等的程序,取決於你購買的電機驅動器。仔細閱讀該驅動器的說明書,將arino的引腳與電機驅動器的控制引腳連接,然後控制相應引腳的高低電平和pwm,以實現電機的正反轉和轉速調節。
㈧ arino 程序解析, 求真正理解單片機的牛人
有以下疑問:
1. SoftPWMSet 這是什麼鬼? arino的pwm輸出,可以直接使用analogwrite函數。若是你自己寫的,;源文件丟出來給人看看是啥。
2. 還有"pins_arino.h"也是,如果是自己寫的,都把它貼出來。
3. arino的中斷,不是這樣用的。直接使用<avr/interrupt.h>,會造成沖突.
4. 對你這個程序,你遇到的困難是?想跟網友求助那個問題?看了10多分鍾,還是一頭霧水。你這個我大概看了下,目測你的程序是這樣的:3,5,10,9,這四個引腳來控制兩個直流電機,直接擴流來驅動電機,引腳8接的是一個LeD,用於顯示狀態,還有個11引腳,從注釋的字面上理解,應該是超聲波的相關引腳,但是一個引腳,超聲波,我愚鈍,看不出來的是幹嘛。
看了10多分鍾,還沒搞懂你想要幹嘛,根據超聲波測得的距離,來控制小車前進後退?還是前進過程中,超聲波檢測到障礙來做避障?
根據前面的分析,你這段代碼,肯定是不通過編譯的,錯誤提示呢?
你要網友幫你修正程序,但是又不知道你的需求,怎麼改?
總之,分給我吧~~~