Arduino可以读取PWM信号吗

Arduino可以读取PWM信号吗,第1张

void

loop()

{

digitalWrite(13,HIGH)

delay(500)

digitalWrite(13,LOW)

delay(500)

}

以上这段程序输出的就是1Hz的波形,把洞启两个500都改成50,这样输出的就是10Hz的。

解释:数字表示多少毫秒,要什么样频差悔率就自己算一下周期改进去就好虚颤正了。

//定义通道

#define CH1 0

#define CH2 1

#define CH3 2

#define CH4 4

#define CH5 6

unsigned long P[6] //定义PWM值存储数组

unsigned long T[6] //定义临时时间存储数组

bool L[6]  //定义状态存储数启槐组

void setup() 

{

  int i

  Serial.begin(9600) //初始化串口

  pinMode(CH1, INPUT)  //设置管脚输入状态

  pinMode(CH2, INPUT)

  pinMode(CH3, INPUT)

  pinMode(CH4, INPUT)

  pinMode(CH5, INPUT)

  

  for(i=1i<=5i++)

  {

    P[i] = 0 //初始化PWM值为0

    T[i] = 0 //初始化临时时间值为0

    L[i] = false //初始化状态为假

  }

}

void loop() 

{

  int i

  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=1i<=5i++) //输出采集结果

  {

    Serial.print(P[i])

    Serial.print(",")

  }

  Serial.println(" CH1,...,CH5")

}

void CHK_PWM_TIME(int Pin , int CH) //通道脉宽采集函数

{

  int puls //电平高低状态

  puls = digitalRead(Pin) //读Pin电平高低状态

  if (puls == HIGH && L[CH] == false) //如果高电平,但状态为假 则

  {

    T[CH] = micros() //记录临时时间

    L[CH] = true     //标记状态为真

  }

  else if (puls == LOW && L[CH] == true) //如果电平为低,但状态为真 则

 橘旁枣 {

    P[CH] = micros() - T[CH] //脉冲捕捉结束,脉宽值为当前时间 - 记录时间

    L[CH] = false  // 标记记录状态为假

  }

}

以上在Arduino IDE环境中调试无错,具体的运行效果,要根据您的具体的硬件连接来调试。

建议不要使用数圆拆字管脚的0和1,有一些Arduino的板子,数字管脚的0和1可能与串口是复用的,在输入数据,同时还要进行串口通信的时候,有可能会干扰您的采集准确或导致无法串口通信。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8223291.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存