double[] pwnData = {1, 0, 1, 0, 1, 1, 0, 0, 1, 0}; //PwN信号数据double upEdgeTime = 0; //上升沿位置double downEdgeTime = 0; //下降沿位置for (int i = 1; i < pwnData.Count(); i++){ if (pwnData[i] > pwnData[i - 1]) { upEdgeTime = i; //记录上升沿位置 } else if (pwnData[i] < pwnData[i - 1]) { downEdgeTime = i; //记录下降沿位置 break; //找到第一个下降沿位置,退出循环 }}double riseDelayTime = downEdgeTime - upEdgeTime; //计算上升延时间Console.WriteLine("PwN上升延时间为:" + riseDelayTime);
时间: 2024-03-01 19:52:18 浏览: 63
unc0ver1.ipa_unc0ver_
5星 · 资源好评率100%
这段代码应该可以计算出PWM信号的上升沿延时时间,但是有一些需要注意的地方:
1. 变量 `upEdgeTime` 和 `downEdgeTime` 的初始值应该设置为无效值,比如-1,以便在循环中可以判断是否已经找到上升沿和下降沿位置。
2. 在找到第一个下降沿位置后,应该退出循环,以免继续寻找其他下降沿位置。
3. 计算上升沿延时时间时,应该使用下降沿位置减去上升沿位置,而不是上升沿位置减去下降沿位置。
以下是修正后的代码:
```csharp
double[] pwnData = {1, 0, 1, 0, 1, 1, 0, 0, 1, 0}; // PWM信号数据
double upEdgeTime = -1; // 上升沿位置
double downEdgeTime = -1; // 下降沿位置
for (int i = 1; i < pwnData.Count(); i++)
{
if (pwnData[i] > pwnData[i - 1])
{
upEdgeTime = i; // 记录上升沿位置
}
else if (pwnData[i] < pwnData[i - 1])
{
downEdgeTime = i; // 记录下降沿位置
break; // 找到第一个下降沿位置,退出循环
}
}
if (upEdgeTime != -1 && downEdgeTime != -1)
{
double riseDelayTime = downEdgeTime - upEdgeTime; // 计算上升延时时间
Console.WriteLine("PWM上升延时时间为:" + riseDelayTime);
}
else
{
Console.WriteLine("未找到有效的上升沿和下降沿位置!");
}
```
希望这可以帮助您!
阅读全文