㈠ 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多分钟,还没搞懂你想要干嘛,根据超声波测得的距离,来控制小车前进后退?还是前进过程中,超声波检测到障碍来做避障?
根据前面的分析,你这段代码,肯定是不通过编译的,错误提示呢?
你要网友帮你修正程序,但是又不知道你的需求,怎么改?
总之,分给我吧~~~